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/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 481c49d0a7..e0d2e1ea6c 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -15,6 +15,8 @@ on: - '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/**' @@ -33,8 +35,6 @@ on: - ".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' diff --git a/.github/workflows/build_check_cache.yml b/.github/workflows/build_check_cache.yml index 91ea51ac60..2da05e1d69 100644 --- a/.github/workflows/build_check_cache.yml +++ b/.github/workflows/build_check_cache.yml @@ -41,7 +41,8 @@ jobs: # 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) || '')) }} - # ARM64 builds use the build-arm64 tree (see build_release_vs.bat); x64/other use build. + # 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: | diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index f7082a8a06..a6d7a17dff 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -138,25 +138,11 @@ jobs: if (-not "${{ vars.SELF_HOSTED }}") { choco install strawberryperl } - $arch = "${{ inputs.arch }}" - # -l selects clang-cl and -x Ninja; together they build the deps with clang. - $clang = "${{ inputs.compiler }}" -eq "clang" - $flags = if ($clang) { "-l", "-x" } else { @() } - if ($clang) { - # OpenSSL builds with nmake, which needs a VC environment. - $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" - $vs = & $vswhere -latest -property installationPath - $devArch = if ($arch -eq "arm64") { "arm64" } else { "amd64" } - Import-Module "$vs\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" - Enter-VsDevShell -VsInstallPath $vs -SkipAutomaticLocation -DevCmdArguments "-arch=$devArch" - } - if ($arch -eq "arm64") { - .\build_release_vs.bat deps arm64 @flags - .\build_release_vs.bat pack arm64 - } else { - .\build_release_vs.bat deps @flags - .\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 }} diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 95ec52a65d..e584fa03dd 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -85,6 +85,15 @@ jobs: 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" @@ -450,21 +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 }}" - # -l selects clang-cl and -x Ninja; together they build the slicer with clang. - $clang = "${{ inputs.compiler }}" -eq "clang" - $flags = if ($clang) { "-l", "-x" } else { @() } - if ($clang) { - # Build against the same VC toolchain and SDK as the dependencies. - $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" - $vs = & $vswhere -latest -property installationPath - $devArch = if ($arch -eq "arm64") { "arm64" } else { "amd64" } - Import-Module "$vs\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" - Enter-VsDevShell -VsInstallPath $vs -SkipAutomaticLocation -DevCmdArguments "-arch=$devArch" - } - if ($arch -eq "arm64") { .\build_release_vs.bat slicer arm64 @flags tests } else { .\build_release_vs.bat slicer @flags 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) diff --git a/.github/workflows/check_profiles.yml b/.github/workflows/check_profiles.yml index b855d09da7..e668482bfd 100644 --- a/.github/workflows/check_profiles.yml +++ b/.github/workflows/check_profiles.yml @@ -9,8 +9,9 @@ on: - release/* paths: - 'resources/profiles/**' - # The extra JSON check also validates resources/printers/bambu_filament_ids.json, - # and lives in scripts/, so a PR touching only those must still run this workflow. + # 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" @@ -36,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 @@ -68,8 +80,8 @@ 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]} - # All vendors' filament_id collisions were fixed (see scripts/filament_id_snapshot.json), - # so the duplicate-filament-subtype check runs tree-wide. + # 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 @@ -186,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. @@ -194,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 @@ -240,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 @@ -252,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/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/AGENTS.md b/AGENTS.md index 01402af3eb..3d0a61b303 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -20,9 +20,9 @@ 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 diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e713d8c88..e3547281f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,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) @@ -308,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 () @@ -1076,32 +1081,30 @@ 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 @@ -1109,38 +1112,11 @@ function(orcaslicer_copy_dlls target config postfix output_dlls) ${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 @@ -1148,6 +1124,8 @@ function(orcaslicer_copy_dlls target config postfix output_dlls) ${_out_dir}/avutil-59.dll PARENT_SCOPE ) + list(APPEND _dll_list ${_occt_staged}) + set(${output_dlls} ${_dll_list} PARENT_SCOPE) endfunction() 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_vs.bat b/build_release_vs.bat deleted file mode 100644 index 3842f1d198..0000000000 --- a/build_release_vs.bat +++ /dev/null @@ -1,190 +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 clang-cl option (-l). Combined with -x it also builds the deps with -@REM clang-cl; on the Visual Studio generator it applies to the slicer only, because -@REM the dependency sub-builds have no toolset to inherit and stay on MSVC. -set CLANG_ARG= -set TOOLSET_ARG= -for %%a in (%*) do ( - if "%%a"=="-l" ( - set CLANG_ARG=-DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl - set TOOLSET_ARG=-T ClangCL - ) -) - -@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.8+^), 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.." -if defined CLANG_ARG if "%USE_NINJA%"=="0" echo Note: -l needs -x for the dependencies; building them with MSVC. - -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% %CLANG_ARG% -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% %CLANG_ARG% -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% %TOOLSET_ARG% -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/deps/Boost/Boost.cmake b/deps/Boost/Boost.cmake index 08b62b9fb8..1526928094 100644 --- a/deps/Boost/Boost.cmake +++ b/deps/Boost/Boost.cmake @@ -27,8 +27,15 @@ 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 @@ -46,6 +53,7 @@ orcaslicer_add_cmake_project(Boost "${_context_arch_line}" "${_context_impl_line}" "${_boost_c_flags_line}" + "${_boost_cxx_flags_line}" ) set(DEP_Boost_DEPENDS ZLIB) diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index ed3af70d03..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") @@ -184,6 +185,11 @@ function(orcaslicer_add_cmake_project projectname) 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__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() @@ -358,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) @@ -447,6 +458,7 @@ set(_dep_list dep_NLopt dep_OpenVDB dep_OpenCSG + ${SLVS_PKG} dep_OpenCV dep_Eigen dep_CGAL 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/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/OCCT.cmake b/deps/OCCT/OCCT.cmake index 62bfcf8e76..45263d6ae3 100644 --- a/deps/OCCT/OCCT.cmake +++ b/deps/OCCT/OCCT.cmake @@ -11,6 +11,21 @@ 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 () @@ -35,7 +50,7 @@ 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} diff --git a/deps/OpenSSL/OpenSSL.cmake b/deps/OpenSSL/OpenSSL.cmake index 2fb4b51757..4a2d49572b 100644 --- a/deps/OpenSSL/OpenSSL.cmake +++ b/deps/OpenSSL/OpenSSL.cmake @@ -80,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/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 $ + 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/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//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= +cat $R/adm/MODULES # module -> toolkits +cat $R/src//EXTERNLIB # toolkit -> its dependencies + +# archive sizes +ls -l /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 @@ + + + + + +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 index 0aaf845909..122dfb6fdb 100644 --- a/docs/HLSD/filament_id.md +++ b/docs/HLSD/filament_id.md @@ -9,7 +9,7 @@ OrcaFilamentLibrary (OFL), Qidi, or Snapmaker bundle. The granularity is the nam 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_id_tool.py` +**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 @@ -34,23 +34,19 @@ This page is the rule for authoring `filament_id` in system profiles > [!IMPORTANT] > **Never write a `filament_id` value by hand.** A new filament gets its id from -> `python scripts/orca_id_tool.py --generate`; one already in the tree has one — inherit it. +> `python scripts/orca_profile_tool.py generate-id`; one already in the tree has one — inherit it. -## The design, in two pieces +## 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: - -1. **Deterministic minting.** 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. -2. **A sanctioned snapshot.** The complete id landscape derived from the tree must equal - `scripts/filament_id_snapshot.json` exactly, so every change to ids, claims (which bundles - ship which id, and for which filament), or product identity surfaces as a reviewable diff to - one file — the maintainer gate. +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 @@ -160,8 +156,8 @@ key needed). Tuning a generic material → **join the OrcaFilamentLibrary filame 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` (preview with `--dry-run`, confine with `--vendor`) and - gated by the `--update-snapshot` diff; the exact sequence is in the FAQ. Nothing forwards + **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. @@ -170,7 +166,7 @@ key needed). Tuning a generic material → **join the OrcaFilamentLibrary filame ## Minting — nobody invents ids New ids are deterministic, computed exactly like the `setting_id` precedent -(the `setting_id` half of `scripts/orca_id_tool.py`): +(the `setting_id` half of `scripts/orca_profile_tool.py generate-id`): ```text FILAMENT_ID_NAMESPACE = uuid5(setting-id NAMESPACE, "filament_id") @@ -196,13 +192,13 @@ Snapmaker bundles alike; the OFL generic `Generic/PLA/Generic PLA` mints `OFDSrz 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 the snapshot, not what -another preset of the product happens to carry. Determined triple, determined id: one product +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` pulls back. Two *different* products whose +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` refuses to write it, and the remedy is a rename so their triples differ. Where +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 @@ -212,80 +208,76 @@ Workflow for a new filament: ```bash # 1. Author the filament with NO filament_id key anywhere. -python scripts/orca_id_tool.py --dry-run # 2. preview the ids — writes nothing -python scripts/orca_id_tool.py --generate # 3. apply them to the profile file(s) -python scripts/orca_id_tool.py --update-snapshot # 4. record the new claims in the snapshot -python scripts/orca_id_tool.py --check # 5. validate the filament_id state -python scripts/orca_extra_profile_check.py # 6. ...and everything else CI checks -# 7. Commit the profile edits together with scripts/filament_id_snapshot.json, for review. +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` makes every filament's id equal the mint of its own +`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 3b names it, and the fix is to inherit +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 3d) is +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 `scripts/orca_extra_profile_check.py` — the -check CI runs over both id kinds, of which `--check` is the `filament_id` half. +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 + triple alone, so a narrowed run writes exactly what a full one would; `check` reports whatever it left outside. -- `--dry-run` reports what `--generate` would do and writes nothing; with no mode of its own it - implies `--generate`, so `--dry-run --vendor ` previews just that bundle. +- `--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`). `--check` and `--update-snapshot` read and write the sanctioned state of - the tree they are given, so pointing them elsewhere needs `--snapshot PATH` for that tree too — - `scripts/filament_id_snapshot.json` describes `resources/profiles` and no other tree. + `resources/profiles`). -**Identity fixes need no separate mode.** `--generate` 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, run `--generate` (confine it with `--vendor`, -preview it with `--dry-run`), then `--update-snapshot` and review the diff. +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_id_tool.py --generate`; once the id is minted, the -snapshot checks likewise point at `--update-snapshot` and tell you to commit the resulting -diff. +the instruction to run `python scripts/orca_profile_tool.py generate-id`. -## Reserved namespaces — never mint or hand-write into +## Ids other systems compose -A **reserved namespace** is an id space no system profile may declare, because an external -catalog or a device protocol owns the values. None of them has an owning vendor: there is no -bundle — not even the one whose printers use the catalog — that may write one into a profile. +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. -| Space | Status | Rule | -| --- | --- | --- | -| `GF*` | Bambu AMS/RFID catalog | declarable by **nobody**, BBL included: Bambu's own ids live in the generated catalog map, never in a profile | -| `QD_*` | Qidi device protocol | declarable by **nobody**, Qidi included: the box composes these ids at runtime and they are not preset ids | -| `P` + 7 hex chars (case-insensitive), `"null"` | user-created custom filaments (`CreatePresetsDialog.cpp`) | never appears in system profiles | +Three such spaces exist around us, and are worth recognising so nobody mistakes one for an id +to copy into a profile: -The two device namespaces, in detail: - -- **Bambu (`GF*`).** Bambu's device/RFID/cloud catalog is external and opaque, which is a - reason to keep it out of the profiles rather than to let one bundle own it. 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. Nothing under `resources/profiles/**` carries a `GF*` id today and nothing can be - exempted, so a `GF*` id appearing anywhere in the tree is a mistake, whoever wrote it. -- **Qidi (`QD_*`).** `QD_*` is a device-*protocol* namespace, not a preset id space: the - Qidi box path composes `QD___` ids 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`. The alternative — 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. +- **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 @@ -337,7 +329,7 @@ OrcaFilamentLibrary. **135 is the number to expect at every regeneration** — 1 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 6** lives in `check_filament_ids`, so profile CI runs it alongside the other five. 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)` @@ -426,23 +418,14 @@ map would silently reproduce the bug. ## How CI enforces this Profile CI (`check_profiles.yml`) runs `check_filament_ids()` tree-wide via -`scripts/orca_extra_profile_check.py`. Its ground truth is -**`scripts/filament_id_snapshot.json` — the sanctioned state**: the id state derived from the -tree must equal the snapshot exactly, in both directions. Any change to the id landscape -therefore surfaces as a diff to that file, and **that snapshot diff is what maintainers review -and gate in a PR**. Never edit the snapshot by hand — `--update-snapshot` regenerates it -deterministically (running it twice changes nothing). The snapshot holds one map, `ids`: each -entry is the product the id is minted from (`filament_vendor`, `filament_type`, `name`) and the -`filaments` claiming it (`Vendor/Filament`), and it sanctions *state*, never exceptions: no check -consults it to excuse a preset from a rule, and there is no grandfather list of any kind. +`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 a - snapshot entry, not BBL. -- **Snapshot equality** — tree claims == snapshot claims **and** each id's declared triple == - its snapshot entry, both directions: any `filament_vendor`/`filament_type`/name change - surfaces as a snapshot diff. +- **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 @@ -450,8 +433,6 @@ The checks, in brief: 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. -- **Reserved namespaces** — `GF*`, `QD_*`, `P<7-hex>` or `"null"` claimed by any vendor, - BBL and Qidi included. - **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. @@ -461,16 +442,14 @@ The checks, in brief: 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 a **reserved-namespace** id — `GF*`, `QD_*` or `P<7-hex>`, whatever -its vendor — cannot pass the format check, so `--update-snapshot` refuses to sanction it -rather than hide the mistake until CI. For a Bambu-cataloged product, the catalog map is where -the correspondence belongs. Any other new sharing via a *declared* id is caught by the identity -check; sharing through inheritance carries no declaration to check and surfaces only as a new -claim in the snapshot diff — which is exactly why that diff is the gate. +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. -`orca_extra_profile_check.py` separately 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). +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 @@ -488,21 +467,21 @@ ambiguity check behind structure rule 3. `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_id_tool.py --generate` to mint it. Inheritance never changes the id. + `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 --vendor ` (preview with `--dry-run`), then `--update-snapshot`, and commit - the profile and snapshot diffs together. The id re-derives from the corrected identity, and + `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 --vendor ` (preview with `--dry-run`), then - `--update-snapshot`. The id follows the new filament name; as with any identity fix, the old id + 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 — nobody can. It is the device protocol's - own id space: the box composes those values 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_id_tool.py --generate`, then - `--update-snapshot`, and commit both diffs. Do not type an id by hand. +- **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/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 7564105304..74774f1bf2 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3492,10 +3492,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..." @@ -5312,13 +5314,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" @@ -5826,6 +5831,9 @@ msgstr "" msgid "Logging" msgstr "" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "" @@ -8834,6 +8842,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "" @@ -8909,6 +8929,12 @@ msgstr "" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "" +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "" @@ -9434,13 +9460,12 @@ msgstr "" msgid "Filament %d (mixed)" msgstr "" -msgid "needs" +#, possible-boost-format +msgid "%1% needs %2%, which is not enabled." msgstr "" -msgid "not enabled" -msgstr "" - -msgid "material not published" +#, 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." @@ -10267,9 +10292,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 "" @@ -10977,12 +11008,6 @@ msgstr "" msgid "Capabilities" msgstr "" -msgid "Left: " -msgstr "" - -msgid "Right: " -msgstr "" - msgid "Show all presets (including incompatible)" msgstr "" @@ -11792,10 +11817,8 @@ msgstr "" msgid "Downloading new vendor profile(s): " msgstr "" -msgid "Configuration package: " -msgstr "" - -msgid " updated to " +#, possible-boost-format +msgid "Configuration package: %1% updated to %2%" msgstr "" msgid "Failed to download vendor profile(s): " @@ -11859,10 +11882,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." @@ -11976,6 +12001,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 "" @@ -13318,6 +13346,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 "" @@ -15268,6 +15302,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 "" @@ -15677,6 +15720,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 "" @@ -15917,7 +15981,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" @@ -15938,6 +16002,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 "" @@ -16843,6 +16925,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 "" @@ -16855,10 +16943,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" @@ -16915,6 +17015,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 "" @@ -20039,10 +20157,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." @@ -20156,6 +20276,2278 @@ msgstr "" msgid "The filament model is unknown. A random filament preset will be used." msgstr "" +msgid "Construction" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, possible-c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, possible-c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Face %d" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Sketch %d" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, possible-c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Edge %d" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, possible-c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid " · %d picked" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, possible-c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "feature %d" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Body %d shown" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Fix %s" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Lock X %s" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, possible-c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, possible-c-format +msgid "Redo (%zu more)" +msgstr "" + +#, possible-c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "Precise wall\nDid you know that turning on precise wall can improve precision and layer consistency?" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index f91b6ad66e..dedb57fff3 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -3788,11 +3788,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..." @@ -4708,11 +4712,14 @@ 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." @@ -5755,14 +5762,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" @@ -6288,6 +6301,9 @@ msgstr "Tancant l'aplicació mentre s'han modificat alguns perfils." msgid "Logging" msgstr "Registrant" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Preparació" @@ -6436,11 +6452,13 @@ msgstr "Desa el projecte com a" msgid "Save current project as" msgstr "Desar el projecte actual com" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Publicar 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7956,11 +7974,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inferior" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Aquesta opció no especifica cap tipus de capacitat del connector." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Aquesta opció especifica un tipus de capacitat del connector no reconegut: " # AI Translated msgid "Plugin Selection" @@ -8533,11 +8553,13 @@ msgstr "Confirmeu que els Codis-G d'aquests perfils són segurs per evitar danys msgid "Customized Preset" msgstr "Perfil personalitzat" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "No s'han pogut aplicar algunes opcions publicades:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +msgstr "S'han canviat algunes ranures de filament:" # AI Translated msgid "Component name(s) inside step file not in UTF-8 format!" @@ -8943,13 +8965,17 @@ 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 "" +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" @@ -9499,6 +9525,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Finestra emergent per seleccionar el mode d'agrupació de filaments" @@ -9580,6 +9618,12 @@ msgstr "Zoom invers del ratolí" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Si està habilitat, inverteix la direcció del zoom amb la roda del ratolí." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "Panoràmica" @@ -10174,63 +10218,80 @@ msgstr "Carregant dades" msgid "Jump to webpage" msgstr "Anar a la pàgina web" +# AI Translated msgid "Material" -msgstr "" +msgstr "Material" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Filament mixt" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Alguns filaments mixtos depenen de filaments que no es publicaran:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Filament %d (mixt)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% necessita %2%, que no està activat." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Publicar igualment" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Publicar 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Seleccioneu quines opcions es publicaran al fitxer 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki de Publicar 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Guia en vídeo de Publicar 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Publicar aquesta ranura de filament al fitxer 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Publicació completa" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Incrustar tot el filament d'aquesta ranura al fitxer 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Filtrar els no seleccionats" #, c-format, boost-format msgid "Save %s as" @@ -10249,8 +10310,9 @@ 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 "" +msgstr "Desar sense pare" # AI Translated msgid "Unique preset" @@ -11079,9 +11141,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?" @@ -11879,14 +11949,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 )" @@ -12741,17 +12803,18 @@ 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 "" +msgstr "S'estan descarregant perfils de fabricant nous: " -msgid "Configuration package: " -msgstr "Paquet de configuració: " - -msgid " updated to " -msgstr " actualitzat a " +# 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 "" +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ó." @@ -12820,11 +12883,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." @@ -12939,6 +13006,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." @@ -14382,8 +14453,9 @@ msgstr "Alineat Rectilini" msgid "Concentric" msgstr "Concèntric" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Espiral interior" msgid "Hilbert Curve" msgstr "Corba de Hilbert" @@ -14474,21 +14546,29 @@ msgstr "" msgid "Top surface fill order" 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, 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 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" 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, 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 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" @@ -14593,6 +14673,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" @@ -16811,6 +16899,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" @@ -17259,6 +17361,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" @@ -17523,8 +17658,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ó" @@ -17550,6 +17686,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" @@ -18570,6 +18734,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" @@ -18582,11 +18754,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ó" @@ -18642,6 +18831,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" @@ -21831,14 +22044,17 @@ msgstr "Aquesta acció no es pot desfer. Continuar?" msgid "Skipping objects." msgstr "Ometent objectes." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Proporció de material" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Alçada del model" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Proporció" msgid "Select Filament" msgstr "Seleccioneu filament" @@ -22123,12 +22339,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." @@ -22273,6 +22491,2278 @@ msgstr "El filament pot no ser compatible amb la configuració actual de la màq msgid "The filament model is unknown. A random filament preset will be used." msgstr "El model de filament és desconegut. S'utilitzarà un perfil de filament aleatori." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Final" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Inferior" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "Esborrar" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22575,15 +25065,70 @@ msgstr "" "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ó?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Seleccionar connector" +#~ msgid "Open actions speed dial" +#~ msgstr "Obrir el marcatge ràpid d'accions" + +# 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 "Open actions speed dial" -#~ msgstr "Obrir el marcatge ràpid d'accions" +#~ msgid "Select plugin" +#~ msgstr "Seleccionar connector" # AI Translated #~ msgid "" @@ -22605,6 +25150,12 @@ msgstr "" #~ "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." @@ -22659,9 +25210,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Ordre d'impressió dins d'una sola capa" -#~ msgid "Bottom" -#~ msgstr "Inferior" - #~ msgid "Front" #~ msgstr "Frontal" @@ -22671,9 +25219,6 @@ msgstr "" #~ msgid "Enter" #~ msgstr "Retorn" -#~ msgid "Del" -#~ msgstr "Esborrar" - #~ msgid "Backspace" #~ msgstr "Retrocés" @@ -22689,9 +25234,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Fletxa cap a la dreta" -#~ msgid "End" -#~ msgstr "Final" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index fb82edd388..5518d1d81e 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: Jakub Hencl\n" "Language-Team: \n" @@ -3755,11 +3755,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..." @@ -4668,11 +4672,14 @@ 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." @@ -5714,14 +5721,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í" @@ -6250,6 +6263,9 @@ msgstr "Zavírání aplikace, když jsou upraveny některé předvolby." msgid "Logging" msgstr "Protokolování" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Připravit" @@ -6397,11 +6413,13 @@ msgstr "Uložit projekt jako" msgid "Save current project as" msgstr "Uložit aktuální projekt jako" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Publikovat 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7922,11 +7940,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Spodní" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Toto nastavení neurčuje typ schopnosti pluginu." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Toto nastavení určuje neznámý typ schopnosti pluginu: " # AI Translated msgid "Plugin Selection" @@ -8494,11 +8514,13 @@ 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" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Některá publikovaná nastavení nebylo možné použít:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -8902,13 +8924,17 @@ 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 "" +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" @@ -9452,6 +9478,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Zobrazit dialog pro výběr režimu seskupení filamentů" @@ -9534,6 +9572,12 @@ msgstr "Změnit směr přibližování myší" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Je-li povoleno, obrátí se směr přiblížení kolečkem myši." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "Posun" @@ -10121,63 +10165,80 @@ msgstr "Nahrávání dat" msgid "Jump to webpage" msgstr "Přejít na webovou stránku" +# AI Translated msgid "Material" -msgstr "" +msgstr "Materiál" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Míchaný filament" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +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 "" +msgstr "Filament %d (míchaný)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% vyžaduje %2%, který není povolen." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Přesto publikovat" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Publikovat 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Vyberte, která nastavení se mají publikovat v souboru 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki k publikování 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Videonávod k publikování 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Publikovat tento slot filamentu v souboru 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Úplné publikování" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Vložit celý filament tohoto slotu do souboru 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Filtrovat nevybrané" #, c-format, boost-format msgid "Save %s as" @@ -10197,8 +10258,9 @@ 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 "" +msgstr "Uložit bez nadřazeného" # AI Translated msgid "Unique preset" @@ -11026,9 +11088,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?" @@ -11822,14 +11892,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)" @@ -12723,17 +12785,18 @@ 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 "" +msgstr "Stahování nových profilů dodavatelů: " -msgid "Configuration package: " -msgstr "Balíček konfigurace: " - -msgid " updated to " -msgstr " aktualizováno na " +# 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 "" +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." @@ -12797,11 +12860,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." @@ -12916,6 +12983,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." @@ -14346,8 +14417,9 @@ msgstr "Zarovnaná pravoúhlá" msgid "Concentric" msgstr "Koncentrický" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spirálový odsaz" msgid "Hilbert Curve" msgstr "Hilbertova křivka" @@ -14438,21 +14510,29 @@ msgstr "" msgid "Top surface fill order" 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, 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 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" 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, 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 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ě" @@ -14555,6 +14635,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" @@ -16751,6 +16839,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" @@ -17195,6 +17297,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" @@ -17462,8 +17597,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" @@ -17489,6 +17625,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" @@ -18491,6 +18655,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" @@ -18503,11 +18675,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" @@ -18563,6 +18752,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." @@ -21775,14 +21988,17 @@ msgstr "Tuto akci nelze vrátit zpět. Pokračovat?" msgid "Skipping objects." msgstr "Přeskakování objektů." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Poměr materiálu" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Výška modelu" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Poměr" # AI Translated msgid "Select Filament" @@ -22098,12 +22314,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." @@ -22253,6 +22471,2278 @@ msgstr "Filament nemusí být kompatibilní s aktuálním nastavením stroje. Po msgid "The filament model is unknown. A random filament preset will be used." msgstr "Model filamentu je neznámý. Použije se náhodná předvolba filamentu." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Konec" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Dole" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22556,15 +25046,70 @@ msgstr "" "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í?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Vybrat plugin" +#~ msgid "Open actions speed dial" +#~ msgstr "Otevřít rychlou nabídku akcí" + +# 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 "Open actions speed dial" -#~ msgstr "Otevřít rychlou nabídku akcí" +#~ msgid "Select plugin" +#~ msgstr "Vybrat plugin" # AI Translated #~ msgid "" @@ -22586,6 +25131,12 @@ msgstr "" #~ "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." @@ -22645,9 +25196,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Pořadí tisku v rámci jedné vrstvy." -#~ msgid "Bottom" -#~ msgstr "Dole" - #~ msgid "Front" #~ msgstr "Předek" @@ -22666,9 +25214,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Šipka vpravo" -#~ msgid "End" -#~ msgstr "Konec" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index ce1a7e37d4..f6bd69a1b1 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -3684,11 +3684,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..." @@ -4575,11 +4579,14 @@ 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." @@ -5614,14 +5621,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" @@ -6143,6 +6156,9 @@ msgstr "Schließen der Anwendung, während einige Profileinstellungen geändert msgid "Logging" msgstr "Protokollierung" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Vorbereiten" @@ -6289,11 +6305,13 @@ msgstr "Projekt speichern als" msgid "Save current project as" msgstr "Aktuelles Projekt speichern als" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "3MF veröffentlichen" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7792,11 +7810,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Untere" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Diese Einstellung gibt keinen Plugin-Fähigkeitstyp an." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Diese Einstellung gibt einen unbekannten Plugin-Fähigkeitstyp an: " # AI Translated msgid "Plugin Selection" @@ -8364,11 +8384,13 @@ msgstr "Bitte bestätigen Sie, dass die G-Codes innerhalb dieser Profile sicher msgid "Customized Preset" msgstr "Benutzerdefinierte Profile" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Einige veröffentlichte Einstellungen konnten nicht angewendet werden:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -8774,13 +8796,17 @@ 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 "" +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" @@ -9323,6 +9349,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Popup zum Auswählen des Filament-Gruppierungsmodus" @@ -9404,6 +9442,12 @@ msgstr "Maus-Zoom umkehren" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Wenn aktiviert, wird die Richtung des Zooms mit dem Mausrad umgekehrt." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "Schwenken" @@ -9955,63 +9999,80 @@ msgstr "Daten werden hochgeladen" msgid "Jump to webpage" msgstr "Zu einer Website springen" +# AI Translated msgid "Material" -msgstr "" +msgstr "Material" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Mischfilament" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Einige Mischfilamente benötigen Filamente, die nicht veröffentlicht werden:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Filament %d (gemischt)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% benötigt %2%, das nicht aktiviert ist." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Trotzdem veröffentlichen" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "3MF veröffentlichen..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Wählen Sie aus, welche Einstellungen in der 3MF-Datei veröffentlicht werden" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki: 3MF veröffentlichen" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Videoanleitung: 3MF veröffentlichen" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Diesen Filament-Steckplatz in der 3MF-Datei veröffentlichen" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Vollständig veröffentlichen" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Das gesamte Filament dieses Steckplatzes in die 3MF-Datei einbetten" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Nicht ausgewählte filtern" #, c-format, boost-format msgid "Save %s as" @@ -10030,8 +10091,9 @@ 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 "" +msgstr "Ohne übergeordnetes Element speichern" # AI Translated msgid "Unique preset" @@ -10853,9 +10915,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?" @@ -11626,12 +11696,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)" @@ -12471,17 +12535,18 @@ 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 "" +msgstr "Neue Herstellerprofile werden heruntergeladen: " -msgid "Configuration package: " -msgstr "Konfigurationspaket:" - -msgid " updated to " -msgstr " aktualisiert auf " +# 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 "" +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." @@ -12545,11 +12610,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." @@ -12663,6 +12732,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." @@ -14055,8 +14128,9 @@ msgstr "Geradlinig ausgerichtet" msgid "Concentric" msgstr "Konzentrisch" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spiralversatz" msgid "Hilbert Curve" msgstr "Hilbert-Kurve" @@ -14147,21 +14221,29 @@ msgstr "" msgid "Top surface fill order" msgstr "Füllreihenfolge der oberen Oberfläche" +# AI Translated msgid "" "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 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" msgstr "Füllreihenfolge der unteren Oberfläche" +# AI Translated msgid "" "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 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" @@ -14264,6 +14346,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" @@ -16417,6 +16507,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" @@ -16858,6 +16962,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" @@ -17120,8 +17257,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" @@ -17147,6 +17285,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" @@ -18140,6 +18306,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" @@ -18152,11 +18326,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" @@ -18212,6 +18403,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" @@ -21260,14 +21475,17 @@ msgstr "Diese Aktion kann nicht rückgängig gemacht werden. Fortsetzen?" msgid "Skipping objects." msgstr "Objekte werden übersprungen." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Materialanteil" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Modellhöhe" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Anteil" msgid "Select Filament" msgstr "Filament auswählen" @@ -21525,12 +21743,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." @@ -21675,6 +21895,2278 @@ msgstr "Das Filament ist möglicherweise nicht mit den aktuellen Geräteeinstell msgid "The filament model is unknown. A random filament preset will be used." msgstr "Das Filamentprofil ist unbekannt. Es wird ein zufälliges Filamentprofil verwendet." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Ende" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Unten" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "Entf" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -21976,15 +24468,68 @@ msgstr "" "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?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Plugin auswählen" +#~ msgid "Open actions speed dial" +#~ msgstr "Aktions-Schnellwahl öffnen" + +#~ 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 "Open actions speed dial" -#~ msgstr "Aktions-Schnellwahl öffnen" +#~ msgid "Select plugin" +#~ msgstr "Plugin auswählen" # AI Translated #~ msgid "" @@ -22006,6 +24551,12 @@ msgstr "" #~ "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." @@ -22058,9 +24609,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Druckreihenfolge innerhalb einer einzelnen Schicht" -#~ msgid "Bottom" -#~ msgstr "Unten" - #~ msgid "Front" #~ msgstr "Vorne" @@ -22073,9 +24621,6 @@ msgstr "" #~ msgid "Esc" #~ msgstr "Esc" -#~ msgid "Del" -#~ msgstr "Entf" - #~ msgid "Backspace" #~ msgstr "Rücktaste" @@ -22091,9 +24636,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Pfeil rechts" -#~ msgid "End" -#~ msgstr "Ende" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 932fbbe8a1..080cae9632 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -3488,10 +3488,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..." @@ -5308,13 +5310,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" @@ -5822,6 +5827,9 @@ msgstr "" msgid "Logging" msgstr "" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "" @@ -8830,6 +8838,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "" @@ -8905,6 +8925,12 @@ msgstr "" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "" +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "" @@ -9430,13 +9456,12 @@ msgstr "" msgid "Filament %d (mixed)" msgstr "" -msgid "needs" +#, boost-format +msgid "%1% needs %2%, which is not enabled." msgstr "" -msgid "not enabled" -msgstr "" - -msgid "material not published" +#, 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." @@ -10263,9 +10288,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 "" @@ -10973,12 +11004,6 @@ msgstr "" msgid "Capabilities" msgstr "" -msgid "Left: " -msgstr "" - -msgid "Right: " -msgstr "" - msgid "Show all presets (including incompatible)" msgstr "" @@ -11788,10 +11813,8 @@ msgstr "" msgid "Downloading new vendor profile(s): " msgstr "" -msgid "Configuration package: " -msgstr "" - -msgid " updated to " +#, boost-format +msgid "Configuration package: %1% updated to %2%" msgstr "" msgid "Failed to download vendor profile(s): " @@ -11855,10 +11878,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." @@ -11972,6 +11997,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 "" @@ -13314,6 +13342,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 "" @@ -15264,6 +15298,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 "" @@ -15673,6 +15716,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 "" @@ -15913,7 +15977,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" @@ -15934,6 +15998,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 "" @@ -16839,6 +16921,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 "" @@ -16851,10 +16939,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" @@ -16911,6 +17011,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 "" @@ -20035,10 +20153,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." @@ -20152,6 +20272,2278 @@ msgstr "" msgid "The filament model is unknown. A random filament preset will be used." msgstr "" +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 888e3065a3..5d864aa200 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: Ian A. Bassi <>\n" "Language-Team: \n" @@ -3566,11 +3566,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..." @@ -4445,11 +4449,14 @@ 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." @@ -5472,14 +5479,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" @@ -5999,6 +6012,9 @@ msgstr "Cerrando la aplicación tras haber modificado algunos perfiles." msgid "Logging" msgstr "Registrando" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Preparar" @@ -6145,11 +6161,13 @@ msgstr "Guardar proyecto como" msgid "Save current project as" msgstr "Guardar el proyecto actual como" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Publicar 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7636,11 +7654,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inferior" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Este ajuste no especifica un tipo de capacidad de plugin." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Este ajuste especifica un tipo de capacidad de plugin no reconocido: " msgid "Plugin Selection" msgstr "Selección de plugins" @@ -8166,11 +8186,13 @@ msgstr "¡Por favor, confirme que el G-Code dentro de los perfiles son seguros p msgid "Customized Preset" msgstr "Perfil Personalizado" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Algunos ajustes publicados no se han podido aplicar:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -8561,13 +8583,17 @@ 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 "" +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" @@ -9091,6 +9117,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Ventana emergente para seleccionar el modo de agrupación de filamentos" @@ -9172,6 +9210,12 @@ msgstr "Invertir el zoom del ratón" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Si se activa, invierte la dirección del zoom con la rueda del ratón." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "Desplazamiento" @@ -9713,63 +9757,80 @@ msgstr "Cargando datos" msgid "Jump to webpage" msgstr "Ir a la página web" +# AI Translated msgid "Material" -msgstr "" +msgstr "Material" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Filamento mixto" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Algunos filamentos mixtos dependen de filamentos que no se publicarán:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Filamento %d (mixto)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% necesita %2%, que no está habilitado." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Publicar de todos modos" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Publicar 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Seleccione qué ajustes se publicarán en el archivo 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki de Publicar 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Guía en vídeo de Publicar 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +msgstr "Publicar este filamento mixto y habilitar + publicar completamente sus filamentos componentes" +# AI Translated msgid "Publish this filament slot in the 3MF file" -msgstr "" +msgstr "Publicar esta ranura de filamento en el archivo 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Publicación completa" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Incrustar el filamento completo de esta ranura en el archivo 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Filtrar no seleccionados" #, c-format, boost-format msgid "Save %s as" @@ -9788,8 +9849,9 @@ 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 "" +msgstr "Guardar sin elemento padre" # AI Translated msgid "Unique preset" @@ -10571,9 +10633,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?" @@ -11336,12 +11406,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)" @@ -12162,17 +12226,18 @@ 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 "" +msgstr "Descargando nuevos perfiles de fabricante: " -msgid "Configuration package: " -msgstr "Paquete de configuración: " - -msgid " updated to " -msgstr " Actualizado a " +# 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 "" +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." @@ -12236,11 +12301,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." @@ -12353,6 +12422,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." @@ -13736,8 +13809,9 @@ msgstr "Rectilíneo Alineado" msgid "Concentric" msgstr "Concéntrico" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Espiral interior" msgid "Hilbert Curve" msgstr "Curva de Hilbert" @@ -13818,20 +13892,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, 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 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, 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 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" @@ -13930,6 +14012,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" @@ -16056,6 +16146,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" @@ -16483,6 +16587,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" @@ -16742,8 +16879,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" @@ -16766,6 +16904,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" @@ -17742,6 +17908,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" @@ -17754,11 +17928,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" @@ -17814,6 +18005,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." @@ -20857,14 +21072,17 @@ msgstr "Esta acción no se puede deshacer. ¿Continuar?" msgid "Skipping objects." msgstr "Omitiendo objetos." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Proporción de material" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Altura del modelo" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Proporción" msgid "Select Filament" msgstr "Seleccionar Filamento" @@ -21105,11 +21323,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." @@ -21222,6 +21444,2278 @@ msgstr "Es posible que el filamento no sea compatible con la configuración de l msgid "The filament model is unknown. A random filament preset will be used." msgstr "Modelo de filamento desconocido. Se utilizará la configuración de filamento genérico. Se utilizará una configuración de filamento aleatorio." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Final" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Inferior" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "Borrar" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -21522,14 +24016,65 @@ 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 "Select plugin" -#~ msgstr "Seleccionar plugin" +#~ msgid "Open actions speed dial" +#~ msgstr "Abrir el menú rápido de acciones" + +#~ 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 "Open actions speed dial" -#~ msgstr "Abrir el menú rápido de acciones" +#~ 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" @@ -21549,6 +24094,12 @@ msgstr "" #~ "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." @@ -21598,9 +24149,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Orden de impresión dentro de cada capa." -#~ msgid "Bottom" -#~ msgstr "Inferior" - #~ msgid "Front" #~ msgstr "Frontal" @@ -21613,9 +24161,6 @@ msgstr "" #~ msgid "Esc" #~ msgstr "Esc" -#~ msgid "Del" -#~ msgstr "Borrar" - #~ msgid "Backspace" #~ msgstr "Retroceso" @@ -21631,9 +24176,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Flecha hacia derecha" -#~ msgid "End" -#~ msgstr "Final" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index e9aeb9ad71..a3b02f9e87 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2026-07-20 13:33+0200\n" "Last-Translator: Manu Goiogana \n" "Language-Team: \n" @@ -3605,11 +3605,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..." @@ -4491,11 +4495,14 @@ 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." @@ -5521,14 +5528,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" @@ -6045,6 +6058,9 @@ msgstr "Aplikazioa ixten, aurrezarpen batzuk aldatu ondoren." msgid "Logging" msgstr "Saioa hasten" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Prestatu" @@ -6191,11 +6207,13 @@ msgstr "Gorde proiektua honela" msgid "Save current project as" msgstr "Gorde uneko proiektua honela" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Argitaratu 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7683,11 +7701,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Behea" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Ezarpen honek ez du plugin-gaitasun motarik zehazten." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Ezarpen honek ezagutzen ez den plugin-gaitasun mota bat zehazten du: " msgid "Plugin Selection" msgstr "Plugin-hautaketa" @@ -8244,11 +8264,13 @@ msgstr "Berretsi aurrezarpen hauetako G-codea segurua dela, makinari kalterik ez msgid "Customized Preset" msgstr "Aurrezarpen pertsonalizatua" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Argitaratutako ezarpen batzuk ezin izan dira aplikatu:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -8644,13 +8666,17 @@ 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 "" +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" @@ -9172,6 +9198,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Erakutsi filamentuak taldekatzeko modua hautatzeko leihoa" @@ -9253,6 +9291,12 @@ msgstr "Alderantzikatu saguaren zooma" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Gaituta badago, saguaren gurpilarekin zoomaren norabidea alderantzikatzen du." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "Desplazatu" @@ -9799,63 +9843,80 @@ msgstr "Datuak igotzen" msgid "Jump to webpage" msgstr "Joan web-orrira" +# AI Translated msgid "Material" -msgstr "" +msgstr "Materiala" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Filamentu nahasia" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Filamentu nahasi batzuk argitaratuko ez diren filamentuen mende daude:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "%d filamentua (nahasia)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% filamentuak %2% behar du, baina ez dago gaituta." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Argitaratu hala ere" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Argitaratu 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Hautatu zein ezarpen argitaratuko diren 3MF fitxategian" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "3MF argitaratzeko wikia" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "3MF argitaratzeko bideo-gida" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Argitaratu filamentu-erreten hau 3MF fitxategian" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Argitalpen osoa" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Kapsulatu erreten honetako filamentu osoa 3MF fitxategian" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Iragazi hautatu gabeak" #, c-format, boost-format msgid "Save %s as" @@ -9874,8 +9935,9 @@ msgstr "Aurrezarpen honetara gurasoaren balio heredatu guztiak kopiatzen ditu et msgid "Detach from parent" msgstr "Bereizi gurasotik" +# AI Translated msgid "Save without parent" -msgstr "" +msgstr "Gorde gurasorik gabe" # AI Translated msgid "Unique preset" @@ -10678,9 +10740,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?" @@ -11443,12 +11513,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)" @@ -12282,17 +12346,18 @@ 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 "" +msgstr "Hornitzaileen profil berriak deskargatzen: " -msgid "Configuration package: " -msgstr "Konfigurazio-paketea: " - -msgid " updated to " -msgstr " hona eguneratu da: " +# 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 "" +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." @@ -12356,11 +12421,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." @@ -12473,6 +12542,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." @@ -13869,8 +13942,9 @@ msgstr "Lerrozuzen lerrokatua" msgid "Concentric" msgstr "Kontzentrikoa" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Kiribil-barneratzea" msgid "Hilbert Curve" msgstr "Hilbert kurba" @@ -13955,20 +14029,28 @@ msgstr "" msgid "Top surface fill order" msgstr "Goiko gainazala betetzeko ordena" +# AI Translated msgid "" "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 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, 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 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" @@ -14070,6 +14152,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" @@ -16224,6 +16314,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" @@ -16653,6 +16757,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" @@ -16912,8 +17049,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" @@ -16936,6 +17074,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" @@ -17921,6 +18087,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" @@ -17933,11 +18107,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" @@ -17993,6 +18184,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." @@ -21042,14 +21257,17 @@ msgstr "Ekintza hau ezin da desegin. Jarraitu?" msgid "Skipping objects." msgstr "Objektuak saltatzen." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Material-proportzioa" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Modeloaren altuera" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Proportzioa" msgid "Select Filament" msgstr "Hautatu filamentua" @@ -21292,11 +21510,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." @@ -21409,6 +21631,2278 @@ msgstr "Baliteke filamentua uneko makinaren ezarpenekin bateragarria ez izatea. msgid "The filament model is unknown. A random filament preset will be used." msgstr "Filamentu-modeloa ezezaguna da. Ausazko filamentuen aurrezarpen bat erabiliko da." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Amaiera" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Behekoa" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "Ezabatu" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -21709,14 +24203,65 @@ msgstr "" "Saihestu okertzea\n" "Ba al zenekien ABS bezalako okertzeko joera duten materialak inprimatzean ohe beroaren tenperatura egoki igotzeak okertzeko probabilitatea murriztu dezakeela?" -#~ msgid "Select plugin" -#~ msgstr "Hautatu plugina" +#~ msgid "Open actions speed dial" +#~ msgstr "Ekintzen markatze azkarra ireki" + +#~ 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 "Open actions speed dial" -#~ msgstr "Ekintzen markatze azkarra ireki" +#~ msgid "Select plugin" +#~ msgstr "Hautatu plugina" # AI Translated #~ msgid "" @@ -21738,6 +24283,12 @@ msgstr "" #~ "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." @@ -21787,9 +24338,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Geruza bakarreko inprimatze-ordena." -#~ msgid "Bottom" -#~ msgstr "Behekoa" - #~ msgid "Front" #~ msgstr "Aurrekoa" @@ -21802,9 +24350,6 @@ msgstr "" #~ msgid "Esc" #~ msgstr "Esc" -#~ msgid "Del" -#~ msgstr "Ezabatu" - #~ msgid "Backspace" #~ msgstr "Atzera-tekla" @@ -21820,9 +24365,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Eskuin gezia" -#~ msgid "End" -#~ msgstr "Amaiera" - #~ msgid "Hotend" #~ msgstr "Hotend-a" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 0982d62593..a4c3c88954 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -3641,11 +3641,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…" @@ -4528,11 +4532,14 @@ 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." @@ -5564,14 +5571,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" @@ -6092,6 +6105,9 @@ msgstr "Fermeture de l'application pendant que certains préréglages sont modif msgid "Logging" msgstr "Enregistrement" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Préparer" @@ -6238,11 +6254,13 @@ msgstr "Enregistrer le projet sous" msgid "Save current project as" msgstr "Enregistrer le projet actuel sous" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Publier 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7733,11 +7751,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inférieur" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +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 "" +msgstr "Ce réglage précise un type de capacité de plugin non reconnu : " # AI Translated msgid "Plugin Selection" @@ -8299,11 +8319,13 @@ 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é" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Certains réglages publiés n'ont pas pu être appliqués :" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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 !" @@ -8700,13 +8722,17 @@ 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 "" +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" @@ -9239,6 +9265,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Fenêtre contextuelle pour sélectionner le mode de regroupement des filaments" @@ -9320,6 +9358,12 @@ msgstr "Inverser le zoom de la souris" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Si cette option est activée, elle inverse le sens du zoom avec la molette de la souris." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "Panoramique" @@ -9869,63 +9913,80 @@ msgstr "Téléversement des données" msgid "Jump to webpage" msgstr "Ouvrir la page internet" +# AI Translated msgid "Material" -msgstr "" +msgstr "Matériau" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Filament mixte" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +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 "" +msgstr "Filament %d (mixte)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% nécessite %2%, qui n'est pas activé." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Publier quand même" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Publier 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Sélectionnez les réglages à publier dans le fichier 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki de Publier 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Guide vidéo de Publier 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Publier cet emplacement de filament dans le fichier 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Publication complète" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Intégrer l'ensemble du filament de cet emplacement dans le fichier 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Filtrer les éléments non sélectionnés" #, c-format, boost-format msgid "Save %s as" @@ -9944,8 +10005,9 @@ 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 "" +msgstr "Enregistrer sans parent" # AI Translated msgid "Unique preset" @@ -10768,9 +10830,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 ?" @@ -11537,12 +11607,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)" @@ -12378,17 +12442,18 @@ 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 "" +msgstr "Téléchargement des nouveaux profils de fabricant : " -msgid "Configuration package: " -msgstr "Paquet de configuration : " - -msgid " updated to " -msgstr " mis à jour en " +# 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 "" +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." @@ -12452,11 +12517,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." @@ -12570,6 +12639,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." @@ -13961,8 +14034,9 @@ msgstr "Rectiligne Aligné" msgid "Concentric" msgstr "Concentrique" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spirale décalée" msgid "Hilbert Curve" msgstr "Courbe de Hilbert" @@ -14053,21 +14127,29 @@ msgstr "" msgid "Top surface fill order" 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, 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 "" +"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" 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, 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 "" +"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" @@ -14166,6 +14248,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" @@ -16318,6 +16408,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" @@ -16754,6 +16858,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" @@ -17015,8 +17152,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" @@ -17042,6 +17180,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" @@ -18031,6 +18197,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" @@ -18043,11 +18217,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" @@ -18103,6 +18294,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" @@ -21152,14 +21367,17 @@ msgstr "Cette action ne peut pas être annulée. Continuer ?" msgid "Skipping objects." msgstr "Ignorer des objets." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Proportion de matériau" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Hauteur du modèle" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Proportion" msgid "Select Filament" msgstr "Sélectionner le filament" @@ -21415,12 +21633,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." @@ -21565,6 +21785,2278 @@ msgstr "Le filament peut ne pas être compatible avec les paramètres actuels de msgid "The filament model is unknown. A random filament preset will be used." msgstr "Le modèle de filament est inconnu. Un préréglage de filament aléatoire sera utilisé." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Fin" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Dessous" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "Eff" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -21866,15 +24358,68 @@ msgstr "" "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?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Sélectionner un plugin" +#~ msgid "Open actions speed dial" +#~ msgstr "Ouvrir le menu d'actions rapides" + +#~ 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 "Open actions speed dial" -#~ msgstr "Ouvrir le menu d'actions rapides" +#~ msgid "Select plugin" +#~ msgstr "Sélectionner un plugin" # AI Translated #~ msgid "" @@ -21896,6 +24441,12 @@ msgstr "" #~ "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." @@ -21948,9 +24499,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Ordre d’impression au sein d’une même couche" -#~ msgid "Bottom" -#~ msgstr "Dessous" - #~ msgid "Front" #~ msgstr "Avant" @@ -21963,9 +24511,6 @@ msgstr "" #~ msgid "Esc" #~ msgstr "Échap" -#~ msgid "Del" -#~ msgstr "Eff" - #~ msgid "Backspace" #~ msgstr "Retour arrière" @@ -21981,9 +24526,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Flèche Droite" -#~ msgid "End" -#~ msgstr "Fin" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index dda48aee71..f83b1679e5 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -3716,11 +3716,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..." @@ -4622,11 +4626,14 @@ 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." @@ -5661,14 +5668,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" @@ -6192,6 +6205,9 @@ msgstr "Alkalmazás bezárása egyes beállítások módosítása közben." msgid "Logging" msgstr "Naplózás" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Előkészítés" @@ -6340,11 +6356,13 @@ 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 "" +msgstr "3MF közzététele" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7849,11 +7867,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Alsó" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +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 "" +msgstr "Ez a beállítás ismeretlen bővítményképesség-típust ad meg: " # AI Translated msgid "Plugin Selection" @@ -8416,11 +8436,13 @@ 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" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Néhány közzétett beállítást nem sikerült alkalmazni:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -8826,13 +8848,17 @@ 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 "" +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" @@ -9375,6 +9401,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Felugró ablak a filamentcsoportosítási mód kiválasztásához" @@ -9456,6 +9494,12 @@ msgstr "Fordított egér-nagyítás" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Ha engedélyezve van, megfordítja az egérgörgős nagyítás irányát." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "Pásztázás" @@ -10029,63 +10073,80 @@ msgstr "Adatok feltöltése" msgid "Jump to webpage" msgstr "Ugrás a weboldalra" +# AI Translated msgid "Material" -msgstr "" +msgstr "Anyag" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Kevert filament" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +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 "" +msgstr "%d. filament (kevert)" -msgid "needs" -msgstr "" +# 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." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Közzététel mindenképp" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "3MF közzététele..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +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 "" +msgstr "3MF közzététele wiki" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "3MF közzététele videós útmutató" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Ennek a filamenthelynek a közzététele a 3MF fájlban" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Teljes közzététel" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Ennek a helynek a teljes filamentjét beágyazza a 3MF fájlba" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Nem kijelöltek szűrése" #, c-format, boost-format msgid "Save %s as" @@ -10104,8 +10165,9 @@ 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 "" +msgstr "Mentés szülő nélkül" # AI Translated msgid "Unique preset" @@ -10933,9 +10995,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?" @@ -11715,14 +11785,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)" @@ -12568,17 +12630,18 @@ 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 "" +msgstr "Új gyártói profilok letöltése: " -msgid "Configuration package: " -msgstr "Konfigurációs csomag: " - -msgid " updated to " -msgstr " frissítve erre: " +# 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 "" +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." @@ -12642,11 +12705,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." @@ -12760,6 +12827,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." @@ -14184,8 +14255,9 @@ msgstr "Igazított vonal" msgid "Concentric" msgstr "Koncentrikus" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spirális behúzás" msgid "Hilbert Curve" msgstr "Hilbert-görbe" @@ -14276,21 +14348,29 @@ msgstr "" msgid "Top surface fill order" 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, 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é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" 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, 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é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" @@ -14394,6 +14474,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" @@ -16572,6 +16660,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" @@ -17012,6 +17114,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" @@ -17277,8 +17412,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" @@ -17304,6 +17440,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" @@ -18304,6 +18468,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" @@ -18316,11 +18488,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" @@ -18376,6 +18565,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" @@ -21554,14 +21767,17 @@ msgstr "Ez a művelet nem vonható vissza. Folytatod?" msgid "Skipping objects." msgstr "Objektumok kihagyása." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Anyagarány" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Modellmagasság" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Arány" msgid "Select Filament" msgstr "Filament kiválasztása" @@ -21845,12 +22061,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." @@ -21995,6 +22213,2278 @@ msgstr "Előfordulhat, hogy a filament nem kompatibilis a jelenlegi gépbeállí msgid "The filament model is unknown. A random filament preset will be used." msgstr "A filament modellje ismeretlen. Egy véletlenszerű filamentbeállítást használ." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Vége" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Alul" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22297,15 +24787,70 @@ msgstr "" "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?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Bővítmény kiválasztása" +#~ msgid "Open actions speed dial" +#~ msgstr "Műveletek gyorsmenüjének megnyitása" + +# 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 "Open actions speed dial" -#~ msgstr "Műveletek gyorsmenüjének megnyitása" +#~ msgid "Select plugin" +#~ msgstr "Bővítmény kiválasztása" # AI Translated #~ msgid "" @@ -22327,6 +24872,12 @@ msgstr "" #~ "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." @@ -22379,9 +24930,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Nyomtatási sorrend egyetlen rétegen belül." -#~ msgid "Bottom" -#~ msgstr "Alul" - #~ msgid "Front" #~ msgstr "Elöl" @@ -22403,9 +24951,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Jobbra nyíl" -#~ msgid "End" -#~ msgstr "Vége" - #~ msgid "Hotend" #~ msgstr "Fejegység" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index d00e28edc9..087189ae93 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -3719,11 +3719,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..." @@ -4624,11 +4628,14 @@ 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." @@ -5662,14 +5669,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" @@ -6194,6 +6207,9 @@ msgstr "Chiusura dell'applicazione durante la modifica di alcuni profili." msgid "Logging" msgstr "Accesso" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Prepara" @@ -6342,11 +6358,13 @@ msgstr "Salva progetto con nome" msgid "Save current project as" msgstr "Salva progetto corrente con nome" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Pubblica 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7853,11 +7871,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inferiore" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Questa impostazione non specifica un tipo di funzionalità del plugin." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Questa impostazione specifica un tipo di funzionalità del plugin non riconosciuto: " # AI Translated msgid "Plugin Selection" @@ -8420,11 +8440,13 @@ msgstr "Si prega di confermare che i G-code all'interno di questi profili sono s msgid "Customized Preset" msgstr "Profilo personalizzato" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Alcune impostazioni pubblicate non sono state applicate:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -8825,13 +8847,17 @@ 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 "" +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" @@ -9377,6 +9403,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Popup per selezionare la modalità di raggruppamento filamenti" @@ -9458,6 +9496,12 @@ msgstr "Inverti zoom del mouse" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Se abilitato, inverte la direzione dell'ingrandimento con la rotellina del mouse." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "Panoramica" @@ -10047,63 +10091,80 @@ msgstr "Caricamento dati" msgid "Jump to webpage" msgstr "Vai alla pagina web" +# AI Translated msgid "Material" -msgstr "" +msgstr "Materiale" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Filamento misto" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Alcuni filamenti misti dipendono da filamenti che non verranno pubblicati:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Filamento %d (misto)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% richiede %2%, che non è abilitato." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Pubblica comunque" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Pubblica 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Seleziona quali impostazioni pubblicare nel file 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki di Pubblica 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Guida video di Pubblica 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Pubblica questo slot filamento nel file 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Pubblicazione completa" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Incorpora l'intero filamento di questo slot nel file 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Filtra non selezionati" #, c-format, boost-format msgid "Save %s as" @@ -10122,8 +10183,9 @@ 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 "" +msgstr "Salva senza genitore" # AI Translated msgid "Unique preset" @@ -10949,9 +11011,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?" @@ -11733,14 +11803,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)" @@ -12589,17 +12651,18 @@ 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 "" +msgstr "Download dei nuovi profili produttore: " -msgid "Configuration package: " -msgstr "Pacchetto di configurazione: " - -msgid " updated to " -msgstr " aggiornato a " +# 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 "" +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." @@ -12663,11 +12726,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." @@ -12781,6 +12848,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." @@ -14204,8 +14275,9 @@ msgstr "Rettilineo allineato" msgid "Concentric" msgstr "Concentrico" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spirale interna" msgid "Hilbert Curve" msgstr "Curva di Hilbert" @@ -14296,21 +14368,29 @@ msgstr "" msgid "Top surface fill order" msgstr "Ordine di riempimento della superficie superiore" +# AI Translated msgid "" "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 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" msgstr "Ordine di riempimento della superficie inferiore" +# AI Translated msgid "" "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 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" @@ -14413,6 +14493,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" @@ -16591,6 +16679,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" @@ -17035,6 +17137,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" @@ -17301,8 +17436,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" @@ -17328,6 +17464,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" @@ -18327,6 +18491,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" @@ -18339,11 +18511,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" @@ -18399,6 +18588,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." @@ -21578,14 +21791,17 @@ msgstr "Questa azione non può essere annullata. Continuare?" msgid "Skipping objects." msgstr "Salto degli oggetti." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Proporzione materiale" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Altezza modello" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Proporzione" msgid "Select Filament" msgstr "Seleziona filamento" @@ -21869,12 +22085,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." @@ -22019,6 +22237,2278 @@ msgstr "Il filamento potrebbe non essere compatibile con le impostazioni corrent msgid "The filament model is unknown. A random filament preset will be used." msgstr "Il modello di filamento è sconosciuto. Verrà utilizzato un profilo filamento casuale." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Fine" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Inferiore" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "Elimina" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22321,15 +24811,70 @@ msgstr "" "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?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Seleziona plugin" +#~ msgid "Open actions speed dial" +#~ msgstr "Apri la selezione rapida delle azioni" + +# 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 "Open actions speed dial" -#~ msgstr "Apri la selezione rapida delle azioni" +#~ msgid "Select plugin" +#~ msgstr "Seleziona plugin" # AI Translated #~ msgid "" @@ -22351,6 +24896,12 @@ msgstr "" #~ "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." @@ -22403,9 +24954,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Ordine di stampa all'interno di un singolo strato." -#~ msgid "Bottom" -#~ msgstr "Inferiore" - #~ msgid "Front" #~ msgstr "Frontale" @@ -22415,9 +24963,6 @@ msgstr "" #~ msgid "Enter" #~ msgstr "Invio" -#~ msgid "Del" -#~ msgstr "Elimina" - #~ msgid "Arrow Up" #~ msgstr "Freccia Su" @@ -22430,9 +24975,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Freccia Destra" -#~ msgid "End" -#~ msgstr "Fine" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index e0a168ddd4..98f937fc6d 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -3733,11 +3733,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..." @@ -4631,11 +4635,14 @@ 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." @@ -5677,14 +5684,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 "使用量" @@ -6204,6 +6217,9 @@ msgstr "プリセットが変更されたが終了します" msgid "Logging" msgstr "ログ" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "準備" @@ -6352,11 +6368,13 @@ msgstr "プロジェクトを名前を付けて保存" msgid "Save current project as" msgstr "プロジェクトを名前を付けて保存" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "3MFを公開" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +msgstr "選択した設定を埋め込んだ3MFファイルをエクスポートします" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMFをインポート" @@ -7862,11 +7880,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "底面" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "この設定にはプラグイン機能タイプが指定されていません。" +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "この設定には認識できないプラグイン機能タイプが指定されています: " # AI Translated msgid "Plugin Selection" @@ -8437,11 +8457,13 @@ msgstr "これらのプリセット内のG-codeがマシンに損傷を与えな msgid "Customized Preset" msgstr "カスタマイズされたプリセット" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "一部の公開された設定を適用できませんでした:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +msgstr "一部のフィラメントスロットが変更されました:" msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "ファイルのエンコーディング方式はUTF-8形式ではありません" @@ -8847,13 +8869,17 @@ 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 "" +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 "公開する" @@ -9400,6 +9426,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "フィラメントグルーピングモード選択のポップアップ" @@ -9481,6 +9519,12 @@ msgstr "マウスの逆ズーム" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "有効にすると、マウス ホイールによるズームの方向が反転します。" +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "パン" @@ -10072,63 +10116,80 @@ msgstr "データをアップロード中" msgid "Jump to webpage" msgstr "ウェブページに移動" +# AI Translated msgid "Material" -msgstr "" +msgstr "材料" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "混合フィラメント" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "一部の混合フィラメントは、公開されないフィラメントに依存しています:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "フィラメント %d (混合)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1%には%2%が必要ですが、有効化されていません。" -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +msgstr "混合フィラメントを公開するには、使用しているすべてのフィラメントを有効にし、完全公開を選ぶか、タイプの要件を満たしてください。" +# AI Translated msgid "Publish anyway" -msgstr "" +msgstr "それでも公開" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "3MFを公開..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "3MFファイルで公開する設定を選択してください" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "3MF公開のWiki" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "3MF公開のビデオガイド" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +msgstr "混合フィラメント - 上の「有効化」を選択すると全体が公開されます" +# AI Translated msgid "Publish this mixed filament and enable + Full Publish its component filaments" -msgstr "" +msgstr "この混合フィラメントを公開し、その構成フィラメントを有効化+完全公開します" +# AI Translated msgid "Publish this filament slot in the 3MF file" -msgstr "" +msgstr "このフィラメントスロットを3MFファイルで公開します" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "完全公開" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "このスロットのフィラメント全体を3MFファイルに埋め込みます" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "未選択を絞り込み" #, c-format, boost-format msgid "Save %s as" @@ -10147,8 +10208,9 @@ msgstr "親プリセットから継承したすべての値をこのプリセッ msgid "Detach from parent" msgstr "親から分離" +# AI Translated msgid "Save without parent" -msgstr "" +msgstr "親なしで保存" # AI Translated msgid "Unique preset" @@ -10976,9 +11038,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 "それでもオブジェクト別に印刷しますか?" @@ -11757,14 +11827,6 @@ msgstr "エクストルーダー数" msgid "Capabilities" msgstr "能力" -# AI Translated -msgid "Left: " -msgstr "左: " - -# AI Translated -msgid "Right: " -msgstr "右: " - msgid "Show all presets (including incompatible)" msgstr "全てのプリセットを表示" @@ -12618,17 +12680,18 @@ msgstr "修復を取消しました" msgid "Copying of file %1% to %2% failed: %3%" msgstr "ファイル %1% を %2% へのコピーが失敗しました (%3%)" +# AI Translated msgid "Downloading new vendor profile(s): " -msgstr "" +msgstr "新しいベンダープロファイルをダウンロード中: " -msgid "Configuration package: " -msgstr "設定パッケージ: " - -msgid " updated to " -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 "" +msgstr "ベンダープロファイルのダウンロードに失敗しました: " msgid "Please check any unsaved changes before updating the configuration." msgstr "構成を更新する前に、未保存の変更をご確認ください" @@ -12696,11 +12759,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." @@ -12814,6 +12881,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 "が除外領域に近すぎます。衝突の可能性があります。" @@ -14298,8 +14369,9 @@ msgstr "整列直線" msgid "Concentric" msgstr "同心" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "スパイラルインセット" msgid "Hilbert Curve" msgstr "ヒルベルト曲線" @@ -14392,21 +14464,29 @@ msgstr "" msgid "Top surface fill order" msgstr "上面の充填順序" +# AI Translated msgid "" "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" +"デフォルトは最短経路順を使用し、どちらの方向にも進むことがあります。" # AI Translated msgid "Bottom surface fill order" msgstr "底面の充填順序" +# AI Translated msgid "" "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" +"デフォルトは最短経路順を使用し、どちらの方向にも進むことがあります。" msgid "Internal solid infill pattern" msgstr "内部ソリッドインフィルパターン" @@ -14515,6 +14595,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 "レールまでの高さ" @@ -16854,6 +16942,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 "外壁" @@ -17346,6 +17448,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 "外周ループ前のワイプ" @@ -17648,8 +17783,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 "全てのエクストルーダーでプライムを実施" @@ -17675,6 +17811,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 "隙間充填半径" @@ -18738,6 +18902,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 "規範チェック" @@ -18752,11 +18924,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 "パイプに進捗を送信" @@ -18817,6 +19006,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 "指定した比率で伸縮する" @@ -22123,14 +22336,17 @@ msgstr "この操作は元に戻せません。続行しますか?" msgid "Skipping objects." msgstr "オブジェクトをスキップ中。" +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "材料比率" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "モデル高さ" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "比率" msgid "Select Filament" msgstr "フィラメントを選択" @@ -22414,12 +22630,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." @@ -22564,6 +22782,2278 @@ msgstr "フィラメントが現在のマシン設定と互換性がない可能 msgid "The filament model is unknown. A random filament preset will be used." msgstr "フィラメントモデルが不明です。ランダムなフィラメントプリセットが使用されます。" +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "終了" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "底面" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + # AI Translated #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -22877,15 +25367,70 @@ msgstr "" "ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "プラグインを選択" +#~ msgid "Open actions speed dial" +#~ 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 "Open actions speed dial" -#~ msgstr "アクションスピードダイヤルを開く" +#~ msgid "Select plugin" +#~ msgstr "プラグインを選択" # AI Translated #~ msgid "" @@ -22907,6 +25452,12 @@ msgstr "" #~ "内向きは各面を幅の広い外側のカーブから始めるため、中心の細かいカーブが定着しにくいベッドでも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を再起動してください。" @@ -22965,9 +25516,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "単一レイヤー内の印刷順序。" -#~ msgid "Bottom" -#~ msgstr "底面" - #~ msgid "Front" #~ msgstr "正面" @@ -22986,9 +25534,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "→" -#~ msgid "End" -#~ msgstr "終了" - #~ msgid "Hotend" #~ msgstr "ホットエンド" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index c29a0723f7..1dda527e28 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -3733,11 +3733,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..." @@ -4646,11 +4650,14 @@ 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." @@ -5688,14 +5695,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 "사용량" @@ -6218,6 +6231,9 @@ msgstr "일부 사전 설정을 수정하는 동안 응용 프로그램을 닫 msgid "Logging" msgstr "로깅" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "준비 하기" @@ -6365,11 +6381,13 @@ msgstr "프로젝트 다른 이름으로 저장" msgid "Save current project as" msgstr "현재 프로젝트 다른 이름으로 저장" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "3MF 게시" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +msgstr "선택한 설정이 포함된 3MF 파일을 내보냅니다" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF 가져오기" @@ -7873,11 +7891,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "하부" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "이 설정은 플러그인 기능 유형을 지정하지 않습니다." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "이 설정은 인식할 수 없는 플러그인 기능 유형을 지정합니다: " # AI Translated msgid "Plugin Selection" @@ -8453,11 +8473,13 @@ msgstr "이러한 사전 설정 내의 Gcode가 기계 손상을 방지할 수 msgid "Customized Preset" msgstr "사용자 정의 프리셋" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "일부 게시된 설정을 적용할 수 없습니다:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +msgstr "일부 필라멘트 슬롯이 변경되었습니다:" # AI Translated msgid "Component name(s) inside step file not in UTF-8 format!" @@ -8878,13 +8900,17 @@ 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 "" +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 "게시" @@ -9460,6 +9486,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "필라멘트 그룹화 모드를 선택하기 위한 팝업" @@ -9550,6 +9588,12 @@ msgstr "역방향 마우스 줌" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "활성화되면 마우스 휠을 사용하여 확대/축소 방향을 반대로 바꿉니다." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "화면 이동" @@ -10160,63 +10204,80 @@ msgstr "데이터 업로드 중" msgid "Jump to webpage" msgstr "웹 페이지로 이동" +# AI Translated msgid "Material" -msgstr "" +msgstr "재료" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "혼합 필라멘트" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "일부 혼합 필라멘트는 게시되지 않을 필라멘트에 의존합니다:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "필라멘트 %d (혼합)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1%에는 %2%이(가) 필요하지만 활성화되어 있지 않습니다." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +msgstr "혼합 필라멘트를 게시하려면 사용하는 모든 필라멘트를 활성화하고 전체 게시를 선택하거나 유형 요구 사항을 충족하세요." +# AI Translated msgid "Publish anyway" -msgstr "" +msgstr "그래도 게시" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "3MF 게시..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "3MF 파일에 게시할 설정을 선택하세요" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "3MF 게시 위키" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "3MF 게시 비디오 가이드" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +msgstr "혼합 필라멘트 - 위에서 \"활성화\"를 선택하면 전체가 게시됩니다" +# AI Translated msgid "Publish this mixed filament and enable + Full Publish its component filaments" -msgstr "" +msgstr "이 혼합 필라멘트를 게시하고 구성 필라멘트를 활성화 + 전체 게시합니다" +# AI Translated msgid "Publish this filament slot in the 3MF file" -msgstr "" +msgstr "이 필라멘트 슬롯을 3MF 파일에 게시합니다" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "전체 게시" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "이 슬롯의 필라멘트 전체를 3MF 파일에 포함합니다" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "선택되지 않은 항목 필터링" #, c-format, boost-format msgid "Save %s as" @@ -10236,8 +10297,9 @@ msgstr "상위 사전 설정에서 상속한 모든 값을 이 사전 설정으 msgid "Detach from parent" msgstr "상위 항목에서 분리" +# AI Translated msgid "Save without parent" -msgstr "" +msgstr "상위 항목 없이 저장" # AI Translated msgid "Unique preset" @@ -11073,10 +11135,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 "아직도 객체별로 출력하시나요?" @@ -11877,14 +11947,6 @@ msgstr "익스트루더 수" msgid "Capabilities" msgstr "성능" -# AI Translated -msgid "Left: " -msgstr "왼쪽: " - -# AI Translated -msgid "Right: " -msgstr "오른쪽: " - msgid "Show all presets (including incompatible)" msgstr "모든 사전 설정 표시(호환되지 않는 설정 포함)" @@ -12749,17 +12811,18 @@ msgstr "수리 취소됨" msgid "Copying of file %1% to %2% failed: %3%" msgstr "파일 %1%를 %2%으로 복사 실패: %3%" +# AI Translated msgid "Downloading new vendor profile(s): " -msgstr "" +msgstr "새 제조사 프로파일 다운로드 중: " -msgid "Configuration package: " -msgstr "구성 패키지: " - -msgid " updated to " -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 "" +msgstr "제조사 프로파일을 다운로드하지 못했습니다: " msgid "Please check any unsaved changes before updating the configuration." msgstr "구성 업데이트 전에 저장되지 않은 변경 사항을 확인해야 합니다." @@ -12828,11 +12891,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." @@ -12947,6 +13014,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 " 이(가) 제외 영역에 너무 가깝습니다. 출력 시 충돌이 발생 할 수 있습니다." @@ -14424,8 +14495,9 @@ msgstr "정렬된 직선" msgid "Concentric" msgstr "동심" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "나선형 인셋" msgid "Hilbert Curve" msgstr "힐베르트 곡선" @@ -14518,21 +14590,29 @@ msgstr "" msgid "Top surface fill order" msgstr "상단 표면 채우기 순서" +# AI Translated msgid "" "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" +"기본값은 최단 경로 순서를 사용하며, 어느 방향으로든 진행될 수 있습니다." # AI Translated msgid "Bottom surface fill order" msgstr "하단 표면 채우기 순서" +# AI Translated msgid "" "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" +"기본값은 최단 경로 순서를 사용하며, 어느 방향으로든 진행될 수 있습니다." msgid "Internal solid infill pattern" msgstr "꽉찬 내부 채우기 패턴" @@ -14636,6 +14716,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 "레일까지의 높이" @@ -16888,6 +16976,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 "외벽" @@ -17339,6 +17441,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 "외부 루프 전 닦아내기" @@ -17609,8 +17744,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 "모든 활성화된 압출기 프라이밍" @@ -17636,6 +17772,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 "슬라이스 간격 폐쇄 반경" @@ -18660,6 +18824,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 "표준 검사" @@ -18672,11 +18844,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 "진행 상황을 파이프로 보내기" @@ -18732,6 +18921,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 "부동 소수점 계수로 모델 크기 조정" @@ -21980,14 +22193,17 @@ msgstr "이 작업은 취소할 수 없습니다. 계속하시겠습니까?" msgid "Skipping objects." msgstr "물체 건너뛰기" +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "재료 비율" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "모델 높이" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "비율" msgid "Select Filament" msgstr "필라멘트 선택" @@ -22290,12 +22506,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." @@ -22440,6 +22658,2278 @@ msgstr "필라멘트가 현재 기기 설정과 호환되지 않을 수 있습 msgid "The filament model is unknown. A random filament preset will be used." msgstr "미지의 필라멘트 모델. 무작위 필라멘트 사전 설정이 사용됩니다." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "끝" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "아래" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22743,15 +25233,70 @@ msgstr "" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "플러그인 선택" +#~ msgid "Open actions speed dial" +#~ 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 "Open actions speed dial" -#~ msgstr "작업 스피드 다이얼 열기" +#~ msgid "Select plugin" +#~ msgstr "플러그인 선택" # AI Translated #~ msgid "" @@ -22773,6 +25318,12 @@ msgstr "" #~ "안쪽은 각 표면을 더 넓은 바깥쪽 곡선에서 시작하므로, 중앙의 좁은 곡선이 잘 붙지 않는 빌드 플레이트에서 초기 레이어 접착력이 향상됩니다. 바깥쪽은 중앙에서 시작하여 남는 재료를 가장자리로 밀어냅니다.\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를 다시 시작하십시오." @@ -22828,9 +25379,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "단일 레이어 내의 출력 순서" -#~ msgid "Bottom" -#~ msgstr "아래" - #~ msgid "Front" #~ msgstr "앞" @@ -22849,9 +25397,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "화살표 오른쪽으로" -#~ msgid "End" -#~ msgstr "끝" - #~ msgid "Hotend" #~ msgstr "핫엔드" diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index c91efdbe58..999932b773 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -295,3 +295,6 @@ 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/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 0384fde3aa..6fe2933981 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -3707,11 +3707,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..." @@ -4608,11 +4612,14 @@ 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." @@ -5648,14 +5655,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" @@ -6181,6 +6194,9 @@ msgstr "Programa uždaroma, nors kai kurie profiliai yra pakeisti." msgid "Logging" msgstr "Registravimas" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Paruošimas" @@ -6327,11 +6343,13 @@ msgstr "Įrašyti projektą kaip" msgid "Save current project as" msgstr "Įrašyti dabartinį projektą kaip" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Talpinti 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +msgstr "Eksportuoti 3MF failą su įterptais pasirinktais parametrais" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importuoti 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7836,11 +7854,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Apatinis" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Šis parametras nenurodo papildinio gebos tipo." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Šis parametras nurodo neatpažintą papildinio gebos tipą: " # AI Translated msgid "Plugin Selection" @@ -8410,11 +8430,13 @@ msgstr "Patvirtinkite, kad šiuose profiliuose esantis G-kodas yra saugus, kad i msgid "Customized Preset" msgstr "Pritaikytas profilis" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Kai kurių patalpintų parametrų pritaikyti nepavyko:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -8819,13 +8841,17 @@ 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 "" +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" @@ -9358,6 +9384,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Iššokantis langas gijų grupavimo režimui pasirinkti" @@ -9439,6 +9477,12 @@ msgstr "Apversti pelės didinimą" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Jei įjungta, apverčia didinimo ar mažinimo kryptį pelės ratuku." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "Slinkimas" @@ -9986,63 +10030,80 @@ msgstr "Įkeliami duomenys" msgid "Jump to webpage" msgstr "Pereiti į interneto puslapį" +# AI Translated msgid "Material" -msgstr "" +msgstr "Medžiaga" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Mišri gija" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Kai kurios mišrios gijos priklauso nuo gijų, kurios nebus patalpintos:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Gija %d (mišri)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% reikalauja %2%, kuri nėra įjungta." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Vis tiek talpinti" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Talpinti 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Pasirinkite, kuriuos parametrus talpinti 3MF faile" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "3MF talpinimo wiki" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "3MF talpinimo vaizdo vadovas" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Talpinti šį gijos lizdą 3MF faile" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Pilnas talpinimas" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Įterpti visą šio lizdo giją į 3MF failą" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Filtruoti nepasirinktus" #, c-format, boost-format msgid "Save %s as" @@ -10061,8 +10122,9 @@ 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 "" +msgstr "Išsaugoti be tėvinio profilio" # AI Translated msgid "Unique preset" @@ -10886,9 +10948,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ą?" @@ -11663,12 +11733,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)" @@ -12509,17 +12573,18 @@ 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 "" +msgstr "Atsisiunčiami nauji gamintojų profiliai: " -msgid "Configuration package: " -msgstr "Konfigūracijos paketas: " - -msgid " updated to " -msgstr " atnaujintas į " +# 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 "" +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." @@ -12583,11 +12648,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." @@ -12701,6 +12770,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ų." @@ -14093,8 +14166,9 @@ msgstr "Sulygiuotas tiesiaeigis" msgid "Concentric" msgstr "Koncentrinis" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spiralinis poslinkis" msgid "Hilbert Curve" msgstr "Hilberto kreivė" @@ -14185,21 +14259,29 @@ msgstr "" msgid "Top surface fill order" 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, 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 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" msgstr "Apatinio paviršiaus užpildymo tvarka" +# AI Translated msgid "" "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 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" @@ -14298,6 +14380,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)" @@ -16453,6 +16543,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" @@ -16886,6 +16990,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ą" @@ -17147,8 +17284,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" @@ -17174,6 +17312,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" @@ -18179,6 +18345,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" @@ -18191,11 +18365,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ą" @@ -18251,6 +18442,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ą." @@ -21309,14 +21524,17 @@ msgstr "Šio veiksmo atšaukti nebus galima. Tęsti?" msgid "Skipping objects." msgstr "Praleidžiami objektai." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Medžiagos santykis" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Modelio aukštis" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Santykis" msgid "Select Filament" msgstr "Pasirinkti giją" @@ -21572,12 +21790,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." @@ -21722,6 +21942,2278 @@ msgstr "Gija gali būti nesuderinama su dabartiniais įrenginio nustatymais. Bus msgid "The filament model is unknown. A random filament preset will be used." msgstr "Gijos modelis nežinomas. Bus naudojamas atsitiktinis gijos profilis." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Pabaiga" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Apačia" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "Del" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22023,15 +24515,68 @@ msgstr "" "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ę?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Pasirinkti papildinį" +#~ msgid "Open actions speed dial" +#~ msgstr "Atidaryti veiksmų greitosios prieigos meniu" + +#~ 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 "Open actions speed dial" -#~ msgstr "Atidaryti veiksmų greitosios prieigos meniu" +#~ msgid "Select plugin" +#~ msgstr "Pasirinkti papildinį" # AI Translated #~ msgid "" @@ -22053,6 +24598,12 @@ msgstr "" #~ "„Į 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“." @@ -22107,9 +24658,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Elementų spausdinimo eiliškumas vieno sluoksnio ribose." -#~ msgid "Bottom" -#~ msgstr "Apačia" - #~ msgid "Front" #~ msgstr "Priekis" @@ -22122,9 +24670,6 @@ msgstr "" #~ msgid "Esc" #~ msgstr "Esc" -#~ msgid "Del" -#~ msgstr "Del" - #~ msgid "Backspace" #~ msgstr "Backspace" @@ -22140,9 +24685,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Rodyklė dešinėn" -#~ msgid "End" -#~ msgstr "Pabaiga" - #~ msgid "Hotend" #~ msgstr "Kaitinimo blokas (Hotend)" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index d283a3c231..685be64863 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -4037,12 +4037,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..." @@ -5030,11 +5032,14 @@ 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." @@ -6179,14 +6184,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" @@ -6752,6 +6763,9 @@ msgstr "Applicatie sluiten terwijl sommige voorinstellingen zijn gewijzigd." msgid "Logging" msgstr "Vastleggen" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Voorbereiden" @@ -6903,11 +6917,13 @@ msgstr "Bewaar project als" msgid "Save current project as" msgstr "Bewaar huidig project als" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "3MF publiceren" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -8525,11 +8541,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Onderste" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Deze instelling geeft geen type plug-infunctionaliteit op." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Deze instelling geeft een niet-herkend type plug-infunctionaliteit op: " # AI Translated msgid "Plugin Selection" @@ -9162,11 +9180,13 @@ msgstr "Controleer of de G-codes in deze presets veilig zijn om schade aan de ma msgid "Customized Preset" msgstr "Aangepaste voorinstelling" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Sommige gepubliceerde instellingen konden niet worden toegepast:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -9595,13 +9615,17 @@ 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 "" +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" @@ -10209,6 +10233,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pop up to select filament grouping mode" msgstr "Pop-up om de filamentgroeperingsmodus te kiezen" @@ -10301,6 +10337,12 @@ msgstr "Omgekeerde muiszoom" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Als deze optie is ingeschakeld, wordt de zoomrichting met het muiswiel omgedraaid." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "Pannen" @@ -10921,63 +10963,80 @@ msgstr "Gegevens uploaden" msgid "Jump to webpage" msgstr "Ga naar de website" +# AI Translated msgid "Material" -msgstr "" +msgstr "Materiaal" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Gemengd filament" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Sommige gemengde filamenten zijn afhankelijk van filamenten die niet worden gepubliceerd:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Filament %d (gemengd)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% heeft %2% nodig, dat niet is ingeschakeld." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Toch publiceren" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "3MF publiceren..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Selecteer welke instellingen in het 3MF-bestand worden gepubliceerd" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki over 3MF publiceren" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Videohandleiding over 3MF publiceren" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +msgstr "Dit gemengde filament publiceren en de samenstellende filamenten inschakelen + volledig publiceren" +# AI Translated msgid "Publish this filament slot in the 3MF file" -msgstr "" +msgstr "Deze filamentsleuf publiceren in het 3MF-bestand" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Volledig publiceren" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Het volledige filament van deze sleuf insluiten in het 3MF-bestand" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Niet-geselecteerde filteren" #, c-format, boost-format msgid "Save %s as" @@ -10997,8 +11056,9 @@ 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 "" +msgstr "Opslaan zonder bovenliggend element" # AI Translated msgid "Unique preset" @@ -11890,9 +11950,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?" @@ -12721,14 +12789,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)" @@ -13673,19 +13733,18 @@ 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 "" +msgstr "Nieuwe leveranciersprofielen downloaden: " # AI Translated -msgid "Configuration package: " -msgstr "Configuratiepakket: " +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Configuratiepakket: %1% bijgewerkt naar %2%" # AI Translated -msgid " updated to " -msgstr " bijgewerkt naar " - msgid "Failed to download vendor profile(s): " -msgstr "" +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." @@ -13757,12 +13816,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." @@ -13877,6 +13938,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." @@ -15440,8 +15505,9 @@ msgstr "Uitgelijnd Rechtlijnig" msgid "Concentric" msgstr "Concentrisch" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spiraalinzet" # AI Translated msgid "Hilbert Curve" @@ -15538,21 +15604,29 @@ msgstr "" msgid "Top surface fill order" msgstr "Vulvolgorde bovenoppervlak" +# AI Translated msgid "" "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 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 msgid "Bottom surface fill order" msgstr "Vulvolgorde onderoppervlak" +# AI Translated msgid "" "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 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" msgstr "Intern massief invulpatroon" @@ -15669,6 +15743,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" @@ -18125,6 +18207,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" @@ -18632,6 +18728,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" @@ -18939,8 +19068,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" @@ -18966,6 +19096,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" @@ -20065,6 +20223,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" @@ -20079,11 +20245,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" @@ -20142,6 +20325,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" @@ -23689,14 +23896,17 @@ msgstr "Deze actie kan niet ongedaan worden gemaakt. Doorgaan?" msgid "Skipping objects." msgstr "Objecten worden overgeslagen." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Materiaalverhouding" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Modelhoogte" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Verhouding" msgid "Select Filament" msgstr "Selecteer filament" @@ -24006,12 +24216,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." @@ -24161,6 +24373,2278 @@ msgstr "Het filament is mogelijk niet compatibel met de huidige machine-instelli msgid "The filament model is unknown. A random filament preset will be used." msgstr "Het filamentmodel is onbekend. Er wordt een willekeurige filamentvoorinstelling gebruikt." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Einde" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Onderkant" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -24463,15 +26947,76 @@ msgstr "" "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?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Plug-in selecteren" +#~ msgid "Open actions speed dial" +#~ msgstr "Snelmenu met acties openen" + +# 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 "Open actions speed dial" -#~ msgstr "Snelmenu met acties openen" +#~ msgid "Select plugin" +#~ msgstr "Plug-in selecteren" # AI Translated #~ msgid "" @@ -24493,6 +27038,12 @@ msgstr "" #~ "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." @@ -24552,9 +27103,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Printvolgorde binnen één laag." -#~ msgid "Bottom" -#~ msgstr "Onderkant" - #~ msgid "Front" #~ msgstr "Voorkant" @@ -24573,9 +27121,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Pijl naar rechts" -#~ msgid "End" -#~ msgstr "Einde" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index d6728e9c40..25b5b664cf 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -3795,11 +3795,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..." @@ -4723,11 +4727,14 @@ 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." @@ -5785,14 +5792,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" @@ -6335,6 +6348,9 @@ msgstr "Zamykanie aplikacji podczas modyfikacji niektórych ustawień." msgid "Logging" msgstr "Logowanie" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Przygotowanie" @@ -6484,11 +6500,13 @@ msgstr "Zapisz projekt jako" msgid "Save current project as" msgstr "Zapisz bieżący projekt jako" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Opublikuj 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +msgstr "Eksportuj plik 3MF z osadzonymi wybranymi ustawieniami" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importuj 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8031,11 +8049,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Dół" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "To ustawienie nie określa typu funkcji wtyczki." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "To ustawienie określa nierozpoznany typ funkcji wtyczki: " # AI Translated msgid "Plugin Selection" @@ -8611,11 +8631,13 @@ msgstr "Proszę potwierdź, że G-code w tych profilach jest bezpieczny, aby zap msgid "Customized Preset" msgstr "Dostosowany profil" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Niektórych opublikowanych ustawień nie udało się zastosować:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -9035,13 +9057,17 @@ 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 "" +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" @@ -9615,6 +9641,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Okno dialogowe do wyboru trybu grupowania filamentów" @@ -9705,6 +9743,12 @@ msgstr "Odwrócone przybliżanie myszką" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Odwraca kierunek przybliżania kółkiem myszy." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "Przesuwanie" @@ -10316,63 +10360,80 @@ msgstr "Przesyłanie danych" msgid "Jump to webpage" msgstr "Przejdź na stronę" +# AI Translated msgid "Material" -msgstr "" +msgstr "Materiał" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Filament mieszany" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +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 "" +msgstr "Filament %d (mieszany)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% wymaga %2%, który nie jest włączony." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Opublikuj mimo to" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Opublikuj 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Wybierz, które ustawienia zostaną opublikowane w pliku 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki publikowania 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Poradnik wideo publikowania 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Opublikuj to gniazdo filamentu w pliku 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Pełna publikacja" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Osadź cały filament z tego gniazda w pliku 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Filtruj niezaznaczone" #, c-format, boost-format msgid "Save %s as" @@ -10392,8 +10453,9 @@ 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 "" +msgstr "Zapisz bez elementu nadrzędnego" # AI Translated msgid "Unique preset" @@ -11238,9 +11300,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?" @@ -12053,14 +12123,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)" @@ -12921,17 +12983,18 @@ 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 "" +msgstr "Pobieranie nowych profili producentów: " -msgid "Configuration package: " -msgstr "Pakiet konfiguracyjny:" - -msgid " updated to " -msgstr " aktualizacja do " +# 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 "" +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." @@ -12999,11 +13062,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." @@ -13118,6 +13185,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." @@ -14597,8 +14668,9 @@ msgstr "Wyrównany prostoliniowy" msgid "Concentric" msgstr "Koncentryczny" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spirala do wewnątrz" msgid "Hilbert Curve" msgstr "Krzywa Hilberta" @@ -14691,21 +14763,29 @@ msgstr "" msgid "Top surface fill order" msgstr "Kolejność wypełniania górnej powierzchni" +# AI Translated msgid "" "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 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ślny używa kolejności najkrótszej ścieżki, która może przebiegać w dowolnym kierunku." # AI Translated msgid "Bottom surface fill order" msgstr "Kolejność wypełniania dolnej powierzchni" +# AI Translated msgid "" "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 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" @@ -14808,6 +14888,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" @@ -17060,6 +17148,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" @@ -17510,6 +17612,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ą" @@ -17786,8 +17921,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" @@ -17813,6 +17949,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" @@ -18839,6 +19003,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" @@ -18851,11 +19023,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" @@ -18911,6 +19100,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" @@ -22167,14 +22380,17 @@ msgstr "Tego działania nie będzie można cofnąć. Kontynuować?" msgid "Skipping objects." msgstr "Pomijanie obiektów." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Udział materiału" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Wysokość modelu" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Udział" msgid "Select Filament" msgstr "Wybierz filament" @@ -22468,12 +22684,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." @@ -22618,6 +22836,2278 @@ msgstr "Filament może być niezgodny z bieżącymi ustawieniami urządzenia. U msgid "The filament model is unknown. A random filament preset will be used." msgstr "Model filamentu jest nieznany. Losowy profil filamentu zostanie użyty" +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "Offset" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Koniec" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Dół" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22920,15 +25410,70 @@ msgstr "" "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ń?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Wybierz wtyczkę" +#~ msgid "Open actions speed dial" +#~ msgstr "Otwórz szybkie menu akcji" + +# 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 "Open actions speed dial" -#~ msgstr "Otwórz szybkie menu akcji" +#~ msgid "Select plugin" +#~ msgstr "Wybierz wtyczkę" # AI Translated #~ msgid "" @@ -22950,6 +25495,12 @@ msgstr "" #~ "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." @@ -23005,9 +25556,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Kolejność druku obiektów w obrębie jednej warstwy. Domyślnie lub według listy obiektów" -#~ msgid "Bottom" -#~ msgstr "Dół" - #~ msgid "Front" #~ msgstr "Przód" @@ -23032,9 +25580,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Strzałka w prawo" -#~ msgid "End" -#~ msgstr "Koniec" - #~ msgid "Hotend" #~ msgstr "Hotend" @@ -25496,9 +28041,6 @@ msgstr "" #~ msgid "Preview hollowed and drilled model" #~ msgstr "Podgląd drążenia/wiercenia" -#~ msgid "Offset" -#~ msgstr "Offset" - #~ msgid "Closing distance" #~ msgstr "Dystans domykania" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 5285bf2d6e..db28922786 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2026-07-26 11:14-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -3577,11 +3577,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…" @@ -4462,11 +4466,14 @@ 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." @@ -5488,14 +5495,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" @@ -6016,6 +6029,9 @@ msgstr "Fechando o aplicativo enquanto algumas predefinições são modificadas. msgid "Logging" msgstr "Registro" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Preparar" @@ -6162,11 +6178,13 @@ msgstr "Salvar projeto como" msgid "Save current project as" msgstr "Salvar o projeto atual como" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Publicar 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7656,11 +7674,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inferior" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +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 "" +msgstr "Esta configuração especifica um tipo de recurso de plugin não reconhecido: " msgid "Plugin Selection" msgstr "Seleção de plugins" @@ -8199,11 +8219,13 @@ msgstr "Por favor, confirme se o G-code dentro dessas predefinições é seguro msgid "Customized Preset" msgstr "Predefinição Personalizada" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Algumas configurações publicadas não puderam ser aplicadas:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -8602,13 +8624,17 @@ 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 "" +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" @@ -9143,6 +9169,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Abrir seleção do modo de agrupamento de filamento" @@ -9224,6 +9262,12 @@ msgstr "Inverter zoom do mouse" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Se ativo, inverte a direção de zoom com a roda do mouse." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "Mover" @@ -9772,63 +9816,80 @@ msgstr "Enviando dados" msgid "Jump to webpage" msgstr "Ir para a página web" +# AI Translated msgid "Material" -msgstr "" +msgstr "Material" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Filamento misto" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Alguns filamentos mistos dependem de filamentos que não serão publicados:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Filamento %d (misto)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% precisa de %2%, que não está ativado." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Publicar mesmo assim" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Publicar 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Selecione quais configurações serão publicadas no arquivo 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Documentação de Publicar 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Guia em vídeo de Publicar 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Publicar este espaço de filamento no arquivo 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Publicação completa" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Incorporar o filamento inteiro deste espaço no arquivo 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Filtrar não selecionados" #, c-format, boost-format msgid "Save %s as" @@ -9847,8 +9908,9 @@ 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 "" +msgstr "Salvar sem pai" # AI Translated msgid "Unique preset" @@ -10636,9 +10698,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?" @@ -11403,12 +11473,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)" @@ -12233,17 +12297,18 @@ 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 "" +msgstr "Baixando novos perfis de fornecedor: " -msgid "Configuration package: " -msgstr "Pacote de configuração: " - -msgid " updated to " -msgstr " atualizado para " +# 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 "" +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." @@ -12307,11 +12372,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." @@ -12424,6 +12493,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." @@ -13811,8 +13884,9 @@ msgstr "Retilíneo alinhado" msgid "Concentric" msgstr "Concêntrico" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Espiral interna" msgid "Hilbert Curve" msgstr "Curva de Hilbert" @@ -13893,20 +13967,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, 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, 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, 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, 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" @@ -14005,6 +14087,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" @@ -16128,6 +16218,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" @@ -16554,6 +16658,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" @@ -16811,8 +16948,9 @@ msgstr "Pega a nova ferramenta sem esperar que ela atinja a temperatura de impre 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" @@ -16835,6 +16973,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" @@ -17805,6 +17971,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" @@ -17817,11 +17991,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" @@ -17877,6 +18068,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." @@ -20909,14 +21124,17 @@ msgstr "Esta ação não pode ser desfeita. Continuar?" msgid "Skipping objects." msgstr "Ignorando objetos." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Proporção de Material" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Altura do Modelo" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Proporção" msgid "Select Filament" msgstr "Selecionar Filamento" @@ -21157,11 +21375,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." @@ -21274,6 +21496,2278 @@ msgstr "O filamento pode não ser compatível com as configurações atuais da m msgid "The filament model is unknown. A random filament preset will be used." msgstr "O modelo do filamento é desconhecido. Uma predefinição de filamento aleatória será usada." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Inferior" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -21574,15 +24068,65 @@ 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 "Select plugin" -#~ msgstr "Selecionar plugin" +#~ msgid "Open actions speed dial" +#~ msgstr "Abrir menu rápido de ações" + +#~ 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" -# AI Translated -#~ msgid "Open actions speed dial" -#~ msgstr "Abrir menu rápido de ações" +#~ 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" @@ -21602,6 +24146,12 @@ msgstr "" #~ "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." @@ -21644,9 +24194,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Ordem de impressão dentro de uma única camada." -#~ msgid "Bottom" -#~ msgstr "Inferior" - #~ msgid "Front" #~ msgstr "Frente" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index e3274d939c..6b28f87f7e 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\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" @@ -3702,11 +3702,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 "Поиск..." @@ -4598,11 +4602,14 @@ 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." @@ -5681,14 +5688,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 "Расход" @@ -6237,6 +6250,9 @@ msgstr "Закрытие приложения, при имеющихся изм msgid "Logging" msgstr "Авторизация" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Подготовка" @@ -6394,11 +6410,13 @@ msgstr "Сохранить проект как" msgid "Save current project as" msgstr "Сохранить текущий проект как" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Опубликовать 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +msgstr "Экспорт файла 3MF со встроенными выбранными настройками" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Импорт 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7912,11 +7930,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Снизу" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Эта настройка не указывает тип возможности плагина." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Эта настройка указывает нераспознанный тип возможности плагина: " msgid "Plugin Selection" msgstr "Выбор плагинов" @@ -8468,11 +8488,13 @@ msgstr "Во избежание повреждения принтера убед msgid "Customized Preset" msgstr "Пользовательский профиль" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Некоторые опубликованные настройки не удалось применить:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +msgstr "Некоторые слоты материалов были изменены:" msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "Имена компонентов внутри файла STEP не в формате UTF-8." @@ -8880,13 +8902,17 @@ 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 "" +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 "Опубликовать" @@ -9422,6 +9448,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + # Запрашивать выбор режима группировки? msgid "Pop up to select filament grouping mode" msgstr "Всплывающее окно для выбора режима группировки материалов" @@ -9506,6 +9544,12 @@ msgstr "Инвертировать приближение" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Инвертировать масштабирование с помощью колеса мыши." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "Смещение" @@ -10064,63 +10108,80 @@ msgstr "Отправка данных" msgid "Jump to webpage" msgstr "Перейти на страницу" +# AI Translated msgid "Material" -msgstr "" +msgstr "Материал" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Смешанный материал" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Некоторые смешанные материалы зависят от материалов, которые не будут опубликованы:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Материал %d (смешанный)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% требует %2%, но он не включён." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +msgstr "Чтобы опубликовать смешанный материал, включите каждый используемый им материал и выберите «Полная публикация» либо выполните требование «Тип»." +# AI Translated msgid "Publish anyway" -msgstr "" +msgstr "Всё равно опубликовать" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Опубликовать 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Выберите, какие настройки будут опубликованы в файле 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki по публикации 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Видеоруководство по публикации 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +msgstr "Смешанный материал — публикуется целиком, когда выше выбрано «Включить»" +# AI Translated msgid "Publish this mixed filament and enable + Full Publish its component filaments" -msgstr "" +msgstr "Опубликовать этот смешанный материал и включить + полностью опубликовать его составляющие материалы" +# AI Translated msgid "Publish this filament slot in the 3MF file" -msgstr "" +msgstr "Опубликовать этот слот материала в файле 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Полная публикация" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Встроить материал этого слота целиком в файл 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Фильтровать невыбранные" #, c-format, boost-format msgid "Save %s as" @@ -10139,8 +10200,9 @@ msgstr "Копирует в этот профиль все значения, у msgid "Detach from parent" msgstr "Сделать независимым" +# AI Translated msgid "Save without parent" -msgstr "" +msgstr "Сохранить без родителя" # AI Translated msgid "Unique preset" @@ -10938,9 +11000,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 "Продолжить печать по очереди?" @@ -11747,12 +11817,6 @@ msgstr "Количество экструдеров" msgid "Capabilities" msgstr "Возможности" -msgid "Left: " -msgstr "Левый: " - -msgid "Right: " -msgstr "Правый: " - msgid "Show all presets (including incompatible)" msgstr "Показать все профили (включая несовместимые)" @@ -12590,17 +12654,18 @@ msgstr "Восстановление отменено" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Не удалось скопировать файл %1% в %2%: %3%" +# AI Translated msgid "Downloading new vendor profile(s): " -msgstr "" +msgstr "Загрузка новых профилей производителей: " -msgid "Configuration package: " -msgstr "Пакет профилей: " - -msgid " updated to " -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 "" +msgstr "Не удалось загрузить профили производителей: " msgid "Please check any unsaved changes before updating the configuration." msgstr "Перед обновлением профилей необходимо проверить несохранённые изменения." @@ -12664,12 +12729,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 "Ошибка группировки в ручном режиме. Проверьте количество сопел или измените группировку." @@ -12782,6 +12850,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 " находится слишком близко к области исключения, что может привести к столкновению при печати." @@ -14242,8 +14314,9 @@ msgstr "Ровный зигзаг" msgid "Concentric" msgstr "Эквидистанты" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Спиральный отступ" msgid "Hilbert Curve" msgstr "Кривая Гильберта" @@ -14338,20 +14411,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, 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" +"По умолчанию используется порядок по кратчайшему пути, который может идти в любом направлении." msgid "Bottom surface fill order" msgstr "Направление печати" +# AI Translated msgid "" "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" +"По умолчанию используется порядок по кратчайшему пути, который может идти в любом направлении." msgid "Internal solid infill pattern" msgstr "Шаблон сплошного заполнения" @@ -14469,6 +14550,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 "Высота до вала" @@ -16845,6 +16934,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 "Внешние периметры" @@ -17355,6 +17458,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" @@ -17646,9 +17782,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 "Подготовка всех печатающих экструдеров" @@ -17673,6 +17809,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 "Радиус закрытия зазоров полигональной сетки" @@ -18780,6 +18944,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 "Нормативная проверка" @@ -18794,12 +18966,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" @@ -18859,6 +19048,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 "Масштабировать модель с помощью коэффициента." @@ -21987,14 +22200,17 @@ msgstr "Это действие необратимо. Продолжить?" msgid "Skipping objects." msgstr "Исключение объектов." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Доля материала" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Высота модели" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Доля" msgid "Select Filament" msgstr "Выбрать материал" @@ -22244,11 +22460,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 "Сушка этого материала может не быть эффективной." @@ -22375,6 +22595,2278 @@ msgstr "Материал может быть несовместим с теку msgid "The filament model is unknown. A random filament preset will be used." msgstr "Модель материала неизвестна. Будет использован случайный профиль материала." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Снизу" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22673,14 +25165,66 @@ msgstr "" "Предотвращение коробления материала\n" "Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?" -#~ msgid "Select plugin" -#~ msgstr "Выбрать плагин" +#~ msgid "Open actions speed dial" +#~ 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 "Open actions speed dial" -#~ 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" @@ -22702,6 +25246,13 @@ msgstr "" #~ "• Наружу: от центра шаблона к краю модели.\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." @@ -22751,9 +25302,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Последовательность печати моделей в пределах одного слоя." -#~ msgid "Bottom" -#~ msgstr "Снизу" - #~ msgid "Front" #~ msgstr "Спереди" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 4fee82d858..e4f3079704 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -4110,12 +4110,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..." @@ -5087,11 +5089,14 @@ 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 @@ -6258,14 +6263,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" @@ -6837,6 +6848,9 @@ msgstr "Stänger Begäran medans vissa inställningar ändrats." msgid "Logging" msgstr "Loggar" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Förbered" @@ -6987,11 +7001,13 @@ msgstr "Spara Projekt som" msgid "Save current project as" msgstr "Spara nuvarande projekt som" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Publicera 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -8612,11 +8628,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Bottenlager" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Den här inställningen anger ingen typ av insticksmodulsfunktion." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Den här inställningen anger en okänd typ av insticksmodulsfunktion: " # AI Translated msgid "Plugin Selection" @@ -9254,11 +9272,13 @@ 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" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Vissa publicerade inställningar kunde inte tillämpas:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -9688,13 +9708,17 @@ 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 "" +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" @@ -10315,6 +10339,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pop up to select filament grouping mode" msgstr "Visa dialogruta för val av filamentgrupperingsläge" @@ -10411,6 +10447,12 @@ msgstr "Omvänd muszoomning" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Om aktiverad, vänder zoomriktningen med mushjulet." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "Panorera" @@ -11035,63 +11077,80 @@ msgstr "Laddar upp data" msgid "Jump to webpage" msgstr "Växla till hemsidan" +# AI Translated msgid "Material" -msgstr "" +msgstr "Material" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Blandat filament" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Vissa blandade filament är beroende av filament som inte kommer att publiceras:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Filament %d (blandat)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% behöver %2%, som inte är aktiverat." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Publicera ändå" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Publicera 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Välj vilka inställningar som ska publiceras i 3MF-filen" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Wiki för Publicera 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Videoguide för Publicera 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Publicera den här filamentplatsen i 3MF-filen" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Fullständig publicering" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Bädda in hela filamentet från den här platsen i 3MF-filen" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Filtrera ej valda" #, c-format, boost-format msgid "Save %s as" @@ -11111,8 +11170,9 @@ 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 "" +msgstr "Spara utan överordnad" # AI Translated msgid "Unique preset" @@ -12011,9 +12071,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?" @@ -12884,14 +12952,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)" @@ -13835,19 +13895,18 @@ 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 "" +msgstr "Laddar ner nya leverantörsprofiler: " # AI Translated -msgid "Configuration package: " -msgstr "Konfigurationspaket: " +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Konfigurationspaket: %1% uppdaterat till %2%" # AI Translated -msgid " updated to " -msgstr " uppdaterat till " - msgid "Failed to download vendor profile(s): " -msgstr "" +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." @@ -13919,12 +13978,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." @@ -14039,6 +14100,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." @@ -15609,8 +15674,9 @@ msgstr "Justerade Rätlinjig" msgid "Concentric" msgstr "Koncentrisk" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spiralinsättning" msgid "Hilbert Curve" msgstr "Hilbert kurvan" @@ -15707,21 +15773,29 @@ msgstr "" msgid "Top surface fill order" msgstr "Fyllordning för ovansidan" +# AI Translated msgid "" "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 "" +"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" msgstr "Fyllordning för undersidan" +# AI Translated msgid "" "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 "" +"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" @@ -15838,6 +15912,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" @@ -18335,6 +18417,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" @@ -18853,6 +18949,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" @@ -19161,8 +19290,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" @@ -19190,6 +19319,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" @@ -20292,6 +20449,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" @@ -20304,11 +20469,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)" @@ -20374,6 +20556,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" @@ -23957,14 +24163,17 @@ msgstr "Åtgärden kan inte ångras. Vill du fortsätta?" msgid "Skipping objects." msgstr "Hoppar över objekt." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Materialandel" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Modellhöjd" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Andel" msgid "Select Filament" msgstr "Välj filament" @@ -24280,12 +24489,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." @@ -24435,6 +24646,2278 @@ msgstr "Filamentet kanske inte är kompatibelt med de aktuella maskininställnin msgid "The filament model is unknown. A random filament preset will be used." msgstr "Filamentmodellen är okänd. En slumpmässig filamentförinställning används." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Slut" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Botten" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + # AI Translated #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -24751,15 +27234,76 @@ msgstr "" "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?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Välj insticksmodul" +#~ msgid "Open actions speed dial" +#~ msgstr "Öppna snabbvalsmenyn för åtgärder" + +# 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 "Open actions speed dial" -#~ msgstr "Öppna snabbvalsmenyn för åtgärder" +#~ msgid "Select plugin" +#~ msgstr "Välj insticksmodul" # AI Translated #~ msgid "" @@ -24781,6 +27325,13 @@ msgstr "" #~ "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." @@ -24842,9 +27393,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Utskriftsordning inom ett enskilt lager." -#~ msgid "Bottom" -#~ msgstr "Botten" - #~ msgid "Front" #~ msgstr "Framifrån" @@ -24866,9 +27414,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Pil Höger" -#~ msgid "End" -#~ msgstr "Slut" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index 3657d1ab80..47aa50fb13 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n" "Last-Translator: Icezaza\n" "Language-Team: Thai\n" @@ -3702,11 +3702,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 "พิมพ์เพื่อกรอง..." @@ -4603,11 +4607,14 @@ 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." @@ -5642,14 +5649,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 "การใช้งาน" @@ -6173,6 +6186,9 @@ msgstr "การปิดแอปพลิเคชันในขณะที msgid "Logging" msgstr "การบันทึก" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "เตรียมพิมพ์" @@ -6319,11 +6335,13 @@ msgstr "บันทึกโปรเจกต์เป็น" msgid "Save current project as" msgstr "บันทึกโครงการปัจจุบันเป็น" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "เผยแพร่ 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +msgstr "ส่งออกไฟล์ 3MF ที่ฝังการตั้งค่าที่เลือกไว้" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "นำเข้า 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7809,11 +7827,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "ล่าง" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "การตั้งค่านี้ไม่ได้ระบุชนิดความสามารถของปลั๊กอิน" +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "การตั้งค่านี้ระบุชนิดความสามารถของปลั๊กอินที่ไม่รู้จัก: " # AI Translated msgid "Plugin Selection" @@ -8375,11 +8395,13 @@ msgstr "โปรดยืนยันว่ารหัส G ภายในค msgid "Customized Preset" msgstr "ค่าที่ตั้งไว้ล่วงหน้าที่กำหนดเอง" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "ไม่สามารถใช้การตั้งค่าที่เผยแพร่บางรายการได้:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +msgstr "ช่องเส้นพลาสติกบางช่องถูกเปลี่ยนแปลง:" msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "ชื่อของส่วนประกอบภายในไฟล์ STEP ไม่ใช่รูปแบบ UTF-8!" @@ -8780,13 +8802,17 @@ 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 "" +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 "เผยแพร่" @@ -9327,6 +9353,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "ปรากฏขึ้นเพื่อเลือกโหมดการจัดกลุ่มเส้นพลาสติก" @@ -9408,6 +9446,12 @@ msgstr "ย้อนกลับการซูมเมาส์" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "หากเปิดใช้งาน จะกลับทิศทางการซูมด้วยล้อเลื่อนของเมาส์" +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "แพน" @@ -9960,63 +10004,80 @@ msgstr "กำลังอัพโหลดข้อมูล" msgid "Jump to webpage" msgstr "ข้ามไปที่หน้าเว็บ" +# AI Translated msgid "Material" -msgstr "" +msgstr "วัสดุ" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "เส้นพลาสติกผสม" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "เส้นพลาสติกผสมบางรายการต้องอาศัยเส้นพลาสติกที่จะไม่ถูกเผยแพร่:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "เส้นพลาสติก %d (ผสม)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% ต้องใช้ %2% แต่ยังไม่ได้เปิดใช้" -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +msgstr "หากต้องการเผยแพร่เส้นพลาสติกผสม ให้เปิดใช้เส้นพลาสติกทุกเส้นที่ใช้ แล้วเลือกการเผยแพร่แบบเต็ม หรือทำตามข้อกำหนดชนิดของมัน" +# AI Translated msgid "Publish anyway" -msgstr "" +msgstr "เผยแพร่ต่อไป" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "เผยแพร่ 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "เลือกว่าจะเผยแพร่การตั้งค่าใดในไฟล์ 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "วิกิการเผยแพร่ 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "คู่มือวีดีโอการเผยแพร่ 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +msgstr "เส้นพลาสติกผสม - เผยแพร่ทั้งชุดเมื่อเลือก \"เปิดใช้\" ด้านบน" +# AI Translated msgid "Publish this mixed filament and enable + Full Publish its component filaments" -msgstr "" +msgstr "เผยแพร่เส้นพลาสติกผสมนี้ และเปิดใช้ + เผยแพร่แบบเต็มสำหรับเส้นพลาสติกที่เป็นส่วนประกอบ" +# AI Translated msgid "Publish this filament slot in the 3MF file" -msgstr "" +msgstr "เผยแพร่ช่องเส้นพลาสติกนี้ในไฟล์ 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "การเผยแพร่แบบเต็ม" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "ฝังเส้นพลาสติกทั้งหมดของช่องนี้ลงในไฟล์ 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "กรองรายการที่ไม่ได้เลือก" #, c-format, boost-format msgid "Save %s as" @@ -10035,8 +10096,9 @@ msgstr "คัดลอกค่าที่สืบทอดมาจากพ msgid "Detach from parent" msgstr "แยกออกจากพรีเซ็ตแม่" +# AI Translated msgid "Save without parent" -msgstr "" +msgstr "บันทึกโดยไม่มีพรีเซ็ตแม่" # AI Translated msgid "Unique preset" @@ -10862,9 +10924,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 "ยังคงพิมพ์ตามวัตถุใช่ไหม" @@ -11633,14 +11703,6 @@ msgstr "จำนวนชุดดันเส้น" msgid "Capabilities" msgstr "ความสามารถ" -# AI Translated -msgid "Left: " -msgstr "ซ้าย: " - -# AI Translated -msgid "Right: " -msgstr "ขวา: " - msgid "Show all presets (including incompatible)" msgstr "แสดงค่าที่ตั้งล่วงหน้าทั้งหมด (รวมทั้งเข้ากันไม่ได้)" @@ -12481,17 +12543,18 @@ msgstr "ยกเลิกการซ่อมแล้ว" msgid "Copying of file %1% to %2% failed: %3%" msgstr "การคัดลอกไฟล์ %1% ถึง %2% ล้มเหลว: %3%" +# AI Translated msgid "Downloading new vendor profile(s): " -msgstr "" +msgstr "กำลังดาวน์โหลดโปรไฟล์ผู้ขายใหม่: " -msgid "Configuration package: " -msgstr "แพคเกจการกำหนดค่า:" - -msgid " updated to " -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 "" +msgstr "ดาวน์โหลดโปรไฟล์ผู้ขายล้มเหลว: " msgid "Please check any unsaved changes before updating the configuration." msgstr "โปรดตรวจสอบการเปลี่ยนแปลงที่ยังไม่ได้บันทึกก่อนอัปเดตการกำหนดค่า" @@ -12553,11 +12616,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." @@ -12671,6 +12738,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 "อยู่ใกล้พื้นที่แยกมากเกินไป อาจเกิดการชนกันเมื่อพิมพ์" @@ -14064,8 +14135,9 @@ msgstr "จัดแนวเป็นเส้นตรง" msgid "Concentric" msgstr "ศูนย์กลาง" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "เกลียวเข้าใน" msgid "Hilbert Curve" msgstr "ฮิลเบิร์ต เคิร์ฟ" @@ -14156,21 +14228,29 @@ msgstr "" msgid "Top surface fill order" msgstr "ลำดับการเติมพื้นผิวด้านบน" +# AI Translated msgid "" "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" +"ค่าเริ่มต้นใช้การเรียงตามเส้นทางที่สั้นที่สุด ซึ่งอาจเดินไปทางใดก็ได้" # AI Translated msgid "Bottom surface fill order" msgstr "ลำดับการเติมพื้นผิวด้านล่าง" +# AI Translated msgid "" "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" +"ค่าเริ่มต้นใช้การเรียงตามเส้นทางที่สั้นที่สุด ซึ่งอาจเดินไปทางใดก็ได้" msgid "Internal solid infill pattern" msgstr "รูปแบบไส้ในของแข็งภายใน" @@ -14273,6 +14353,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 "ความสูงถึงก้าน" @@ -16442,6 +16530,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 "ผนังชั้นนอก" @@ -16879,6 +16981,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 "เช็ดก่อนวนรอบภายนอก" @@ -17140,8 +17275,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 "ใช้ชุดดันเส้นการพิมพ์ทั้งหมด" @@ -17167,6 +17303,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" @@ -18171,6 +18335,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 "การตรวจสอบเชิงบรรทัดฐาน" @@ -18183,11 +18355,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 "ส่งความคืบหน้าไปป์" @@ -18243,6 +18432,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 "ปรับขนาดโมเดลตามปัจจัยโฟลต" @@ -21335,14 +21548,17 @@ msgstr "การทำงานนี้ไม่สามารถย้อน msgid "Skipping objects." msgstr "ข้ามวัตถุ" +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "สัดส่วนวัสดุ" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "ความสูงโมเดล" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "สัดส่วน" msgid "Select Filament" msgstr "เลือกเส้นพลาสติก" @@ -21600,12 +21816,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." @@ -21750,6 +21968,2278 @@ msgstr "เส้นพลาสติกอาจไม่เข้ากัน msgid "The filament model is unknown. A random filament preset will be used." msgstr "ไม่ทราบแบบจำลองเส้นพลาสติก ระบบจะใช้การตั้งค่าฟิลาเมนต์แบบสุ่ม" +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "จบ" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "ล่าง" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "เดล" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22051,15 +24541,70 @@ msgstr "" "คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "เลือกปลั๊กอิน" +#~ msgid "Open actions speed dial" +#~ 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 "Open actions speed dial" -#~ msgstr "เปิดสปีดไดอัลการดำเนินการ" +#~ msgid "Select plugin" +#~ msgstr "เลือกปลั๊กอิน" # AI Translated #~ msgid "" @@ -22081,6 +24626,12 @@ msgstr "" #~ "เข้าด้านในเริ่มแต่ละพื้นผิวด้วยเส้นโค้งด้านนอกที่กว้างกว่า ซึ่งช่วยเพิ่มการยึดเกาะเลเยอร์แรกบนฐานพิมพ์ที่เส้นโค้งแคบตรงกลางอาจไม่ติด ออกด้านนอกเริ่มที่กึ่งกลาง โดยดันวัสดุส่วนเกินไปทางขอบ\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" @@ -22133,9 +24684,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "สั่งพิมพ์ภายในชั้นเดียว" -#~ msgid "Bottom" -#~ msgstr "ล่าง" - #~ msgid "Front" #~ msgstr "ด้านหน้า" @@ -22148,9 +24696,6 @@ msgstr "" #~ msgid "Esc" #~ msgstr "Esc" -#~ msgid "Del" -#~ msgstr "เดล" - #~ msgid "Backspace" #~ msgstr "แบ็คสเปซ" @@ -22166,9 +24711,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "ลูกศรขวา" -#~ msgid "End" -#~ msgstr "จบ" - #~ msgid "Hotend" #~ msgstr "ฮอตเอนด์" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 76290a0261..91c5660328 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2026-08-21 23:18+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -3740,11 +3740,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..." @@ -4662,11 +4666,14 @@ 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." @@ -5707,14 +5714,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" @@ -6241,6 +6254,9 @@ msgstr "Bazı ön ayarlar değiştirilirken Uygulama kapatılıyor." msgid "Logging" msgstr "Günlük kaydı" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Hazırlık" @@ -6387,11 +6403,13 @@ msgstr "Projeyi farklı kaydet" msgid "Save current project as" msgstr "Mevcut projeyi farklı kaydet" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "3MF Yayınla" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -7899,11 +7917,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Alt" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Bu ayar bir eklenti yeteneği türü belirtmiyor." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Bu ayar tanınmayan bir eklenti yeteneği türü belirtiyor: " # AI Translated msgid "Plugin Selection" @@ -8473,11 +8493,13 @@ msgstr "Lütfen bu ön ayarlar içindeki G-code'larının makineye herhangi bir msgid "Customized Preset" msgstr "Özel Ayar" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Bazı yayınlanan ayarlar uygulanamadı:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +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!" @@ -8880,13 +8902,17 @@ 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 "" +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" @@ -9433,6 +9459,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "Filament gruplama modunu seçmek için açılır pencere" @@ -9514,6 +9552,12 @@ msgstr "Mouse yakınlaştırmasını tersine çevir" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Etkinleştirilirse, mouse tekerleğiyle yakınlaştırmanın yönü tersine çevrilir." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "Kaydır" @@ -10105,63 +10149,80 @@ msgstr "Veriler yükleniyor" msgid "Jump to webpage" msgstr "Web sayfasına atla" +# AI Translated msgid "Material" -msgstr "" +msgstr "Malzeme" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Karışık filament" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Bazı karışık filamentler, yayınlanmayacak filamentlere bağlıdır:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Filament %d (karışık)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% için %2% gerekiyor, ancak o etkin değil." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Yine de yayınla" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "3MF Yayınla..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "3MF dosyasında hangi ayarların yayınlanacağını seçin" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "3MF Yayınlama Wiki" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "3MF Yayınlama Video Kılavuzu" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +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 "" +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 "" +msgstr "Bu filament yuvasını 3MF dosyasında yayınla" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Tam Yayınlama" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Bu yuvadaki filamentin tamamını 3MF dosyasına göm" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Seçilmeyenleri filtrele" #, c-format, boost-format msgid "Save %s as" @@ -10180,8 +10241,9 @@ 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 "" +msgstr "Ebeveyn olmadan kaydet" # AI Translated msgid "Unique preset" @@ -11017,9 +11079,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?" @@ -11818,14 +11888,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)" @@ -12677,17 +12739,18 @@ 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 "" +msgstr "Yeni satıcı profilleri indiriliyor: " -msgid "Configuration package: " -msgstr "Yapılandırma paketi: " - -msgid " updated to " -msgstr " güncellendi " +# 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 "" +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." @@ -12756,11 +12819,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." @@ -12875,6 +12942,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." @@ -14313,8 +14384,9 @@ msgstr "Hizalanmış doğrusal" msgid "Concentric" msgstr "Konsantrik" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Spiral içe" msgid "Hilbert Curve" msgstr "Hilbert eğrisi" @@ -14405,21 +14477,29 @@ msgstr "" msgid "Top surface fill order" msgstr "Üst yüzey doldurma sırası" +# AI Translated msgid "" "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 "" +"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 msgid "Bottom surface fill order" msgstr "Alt yüzey doldurma sırası" +# AI Translated msgid "" "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 "" +"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" msgstr "İç katı dolgu deseni" @@ -14524,6 +14604,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" @@ -16743,6 +16831,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" @@ -17191,6 +17293,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" @@ -17457,8 +17592,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" @@ -17484,6 +17620,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ı" @@ -18502,6 +18666,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" @@ -18514,11 +18686,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" @@ -18574,6 +18763,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." @@ -21762,14 +21975,17 @@ msgstr "Bu eylem geri alınamaz. Devam etmek?" msgid "Skipping objects." msgstr "Nesneleri atlama." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Malzeme Oranı" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Model Yüksekliği" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Oran" msgid "Select Filament" msgstr "Filament Seçin" @@ -22053,12 +22269,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." @@ -22203,6 +22421,2278 @@ msgstr "Filament mevcut makine ayarlarıyla uyumlu olmayabilir. Rastgele bir fil msgid "The filament model is unknown. A random filament preset will be used." msgstr "Filament modeli bilinmiyor. Rastgele bir filament ön ayarı kullanılacaktır." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Son" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Alt" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "Sil" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22506,15 +24996,70 @@ msgstr "" "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?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Eklenti seç" +#~ msgid "Open actions speed dial" +#~ msgstr "Eylem hızlı erişim menüsünü aç" + +# 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 "Open actions speed dial" -#~ msgstr "Eylem hızlı erişim menüsünü aç" +#~ msgid "Select plugin" +#~ msgstr "Eklenti seç" # AI Translated #~ msgid "" @@ -22536,6 +25081,12 @@ msgstr "" #~ "İç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." @@ -22590,18 +25141,12 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Tek bir katmanda yazdırma sırası." -#~ msgid "Bottom" -#~ msgstr "Alt" - #~ msgid "Front" #~ msgstr "Ön" #~ msgid "Rear" #~ msgstr "Arka" -#~ msgid "Del" -#~ msgstr "Sil" - #~ msgid "Arrow Up" #~ msgstr "Yukarı ok" @@ -22614,9 +25159,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Sağ Yön Tuşu" -#~ msgid "End" -#~ msgstr "Son" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index d603945e0d..ffa055a2ff 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2026-07-17 16:25+0300\n" "Last-Translator: Andrij Mizyk \n" "Language-Team: Ukrainian\n" @@ -3672,11 +3672,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 "Вводьте для фільтру..." @@ -4598,11 +4602,14 @@ 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." @@ -5664,14 +5671,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 "Використання" @@ -6210,6 +6223,9 @@ msgstr "Закриття програми під чвс зміни деяких msgid "Logging" msgstr "Ведення журналу" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Підготовка" @@ -6356,11 +6372,13 @@ msgstr "Зберегти проєкт як" msgid "Save current project as" msgstr "Зберегти поточний проєкт як" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "Публікувати 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +msgstr "Експортувати файл 3MF із вбудованими вибраними налаштуваннями" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Імпорт 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7881,11 +7899,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Низ" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "Це налаштування не вказує тип можливості плагіна." +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "Це налаштування вказує нерозпізнаний тип можливості плагіна: " # AI Translated msgid "Plugin Selection" @@ -8479,11 +8499,13 @@ msgstr "Будь ласка, підтвердьте, що G-коди в цих msgid "Customized Preset" msgstr "Пристосований пресет" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "Деякі опубліковані налаштування не вдалося застосувати:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +msgstr "Деякі слоти філаменту було змінено:" # AI Translated msgid "Component name(s) inside step file not in UTF-8 format!" @@ -8891,13 +8913,17 @@ 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 "" +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 "Публікувати" @@ -9451,6 +9477,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pop up to select filament grouping mode" msgstr "Показувати вікно вибору режиму групування філаментів" @@ -9540,6 +9578,12 @@ msgstr "Зворотне масштабування мишкою" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Якщо увімкнено, змінює напрямок масштабування за допомогою коліщатка миші." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "Панорамування" @@ -10108,63 +10152,80 @@ msgstr "Відвантаження даних" msgid "Jump to webpage" msgstr "Перейти на вебсторінку" +# AI Translated msgid "Material" -msgstr "" +msgstr "Матеріал" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Змішаний філамент" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "Деякі змішані філаменти залежать від філаментів, які не будуть опубліковані:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "Філамент %d (змішаний)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% потребує %2%, але його не ввімкнено." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +msgstr "Щоб опублікувати змішаний філамент, увімкніть кожен філамент, який він використовує, і виберіть «Повна публікація» або виконайте його вимогу «Тип»." +# AI Translated msgid "Publish anyway" -msgstr "" +msgstr "Опублікувати попри це" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Публікувати 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "Виберіть, які налаштування буде опубліковано у файлі 3MF" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "Енциклопедія з публікації 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "Відеопосібник з публікації 3MF" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +msgstr "Змішаний філамент — публікується цілком, коли вище вибрано «Увімкнути»" +# AI Translated msgid "Publish this mixed filament and enable + Full Publish its component filaments" -msgstr "" +msgstr "Опублікувати цей змішаний філамент та увімкнути + повністю опублікувати його складові філаменти" +# AI Translated msgid "Publish this filament slot in the 3MF file" -msgstr "" +msgstr "Опублікувати цей слот філаменту у файлі 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Повна публікація" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Вбудувати весь філамент цього слота у файл 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Фільтрувати невибрані" #, c-format, boost-format msgid "Save %s as" @@ -10184,8 +10245,9 @@ msgstr "Копіює в цей пресет усі значення, успад msgid "Detach from parent" msgstr "Відʼєднати від батьківського" +# AI Translated msgid "Save without parent" -msgstr "" +msgstr "Зберегти без батьківського" # AI Translated msgid "Unique preset" @@ -11046,10 +11108,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 "Все одно друкувати кожен обʼєкт окремо?" @@ -11863,12 +11933,6 @@ msgstr "Кількість екструдерів" msgid "Capabilities" msgstr "Можливості" -msgid "Left: " -msgstr "Лівий: " - -msgid "Right: " -msgstr "Правий: " - msgid "Show all presets (including incompatible)" msgstr "Показувати всі профілі (включаючи несумісні)" @@ -12735,17 +12799,18 @@ msgstr "Ремонт скасовано" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Копіювання %1% у %2% не вдалося: %3%" +# AI Translated msgid "Downloading new vendor profile(s): " -msgstr "" +msgstr "Завантаження нових профілів виробників: " -msgid "Configuration package: " -msgstr "Пакет конфігурації: " - -msgid " updated to " -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 "" +msgstr "Не вдалося завантажити профілі виробників: " # AI Translated msgid "Please check any unsaved changes before updating the configuration." @@ -12815,11 +12880,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 "Помилка групування в ручному режимі. Перевірте кількість сопел або перегрупуйте." @@ -12933,6 +13002,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 " знаходиться надто близько до зони відчуження, при друку можуть виникати колізії." @@ -14409,8 +14482,9 @@ msgstr "Вирівняний прямолінійний" msgid "Concentric" msgstr "Концентричний" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Спіральний відступ" msgid "Hilbert Curve" msgstr "Крива Гільберта" @@ -14500,21 +14574,29 @@ msgstr "" msgid "Top surface fill order" msgstr "Порядок заповнення верхньої поверхні" +# AI Translated msgid "" "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" +"Типово використовується порядок за найкоротшим шляхом, який може йти в будь-якому напрямку." # AI Translated msgid "Bottom surface fill order" msgstr "Порядок заповнення нижньої поверхні" +# AI Translated msgid "" "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" +"Типово використовується порядок за найкоротшим шляхом, який може йти в будь-якому напрямку." msgid "Internal solid infill pattern" msgstr "Шаблон внутрішнього суцільного заповнення" @@ -14619,6 +14701,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 "Висота до сопла" @@ -16926,6 +17016,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 "Зовнішні стінки" @@ -17372,6 +17476,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 "Протирати перед зовнішнім контуром" @@ -17648,8 +17785,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 "Підготовка всіх друкуючих екструдерів" @@ -17674,6 +17812,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 "Радіус закриття пробілів під час нарізування" @@ -18712,6 +18878,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 "Нормативна перевірка" @@ -18724,11 +18898,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 "Надіслати прогрес до каналу" @@ -18784,6 +18975,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 "Масштабуйте модель за допомогою плаваючого коефіцієнта" @@ -21939,14 +22154,17 @@ msgstr "Дію не можливо завершити. Продовжити?" msgid "Skipping objects." msgstr "Пропускання обʼєктів." +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "Частка матеріалу" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Висота моделі" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Частка" msgid "Select Filament" msgstr "Вибрати філамент" @@ -22211,12 +22429,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." @@ -22361,6 +22581,2278 @@ msgstr "Цей філамент може бути несумісним з пот msgid "The filament model is unknown. A random filament preset will be used." msgstr "Модель філамента невідома. Буде використаний випадковий пресет філамента" +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Кінець" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Низ" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "Видалити" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22667,15 +25159,68 @@ msgstr "" "Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури столу може зменшити ймовірність деформації?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Вибрати плагін" +#~ msgid "Open actions speed dial" +#~ 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 "Open actions speed dial" -#~ msgstr "Відкрити панель швидких дій" +#~ msgid "Select plugin" +#~ msgstr "Вибрати плагін" # AI Translated #~ msgid "" @@ -22697,6 +25242,12 @@ msgstr "" #~ "Усередину починає кожну поверхню з ширших зовнішніх кривих, що покращує зчеплення першого шару на столах, де щільні криві в центрі можуть не прилипати. Назовні починає з центру, виштовхуючи надлишок матеріалу до краю.\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." @@ -22750,9 +25301,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Друк замовлення в один шар" -#~ msgid "Bottom" -#~ msgstr "Низ" - #~ msgid "Front" #~ msgstr "Перед" @@ -22765,9 +25313,6 @@ msgstr "" #~ msgid "Esc" #~ msgstr "Esc" -#~ msgid "Del" -#~ msgstr "Видалити" - #~ msgid "Backspace" #~ msgstr "Назад" @@ -22783,9 +25328,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Стрілка праворуч" -#~ msgid "End" -#~ msgstr "Кінець" - #~ msgid "Hotend" #~ msgstr "Хотенд" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index 8e884a71af..3263e575c5 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n" "Last-Translator: \n" "Language-Team: hainguyen.ts13@gmail.com\n" @@ -3884,12 +3884,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..." @@ -4855,11 +4857,14 @@ 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." @@ -5984,14 +5989,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" @@ -6556,6 +6567,9 @@ msgstr "Đang đóng ứng dụng trong khi một số preset được sửa đ msgid "Logging" msgstr "Ghi nhật ký" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "Chuẩn bị" @@ -6704,11 +6718,13 @@ 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 "" +msgstr "Xuất bản 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +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" @@ -8268,11 +8284,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "Dưới" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +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 "" +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" @@ -8887,11 +8905,13 @@ 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" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +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 "" +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!" @@ -9312,13 +9332,17 @@ 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 "" +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" @@ -9914,6 +9938,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pop up to select filament grouping mode" msgstr "Hiện cửa sổ để chọn chế độ nhóm filament" @@ -10004,6 +10040,12 @@ msgstr "Đảo ngược thu phóng chuột" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "Nếu được bật, đảo ngược hướng thu phóng bằng con lăn chuột." +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + # AI Translated msgid "Pan" msgstr "Di chuyển khung nhìn" @@ -10621,63 +10663,80 @@ msgstr "Đang tải dữ liệu lên" msgid "Jump to webpage" msgstr "Chuyển đến trang web" +# AI Translated msgid "Material" -msgstr "" +msgstr "Vật liệu" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "Filament pha trộn" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +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 "" +msgstr "Filament %d (pha trộn)" -msgid "needs" -msgstr "" +# 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." -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +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 "" +msgstr "Vẫn xuất bản" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "Xuất bản 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +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 "" +msgstr "Wiki về Xuất bản 3MF" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +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 "" +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 "" +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 "" +msgstr "Xuất bản khe filament này trong tệp 3MF" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "Xuất bản đầy đủ" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "Nhúng toàn bộ filament của khe này vào tệp 3MF" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "Lọc mục chưa chọn" #, c-format, boost-format msgid "Save %s as" @@ -10697,8 +10756,9 @@ 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 "" +msgstr "Lưu không kèm vật thể cha" # AI Translated msgid "Unique preset" @@ -11582,9 +11642,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?" @@ -12381,14 +12449,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)" @@ -13306,17 +13366,18 @@ 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 "" +msgstr "Đang tải xuống hồ sơ nhà cung cấp mới: " -msgid "Configuration package: " -msgstr "Gói cấu hình: " - -msgid " updated to " -msgstr " đã cập nhật lên " +# 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 "" +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." @@ -13387,12 +13448,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." @@ -13507,6 +13570,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." @@ -14976,8 +15043,9 @@ msgstr "Thẳng hàng căn chỉnh" msgid "Concentric" msgstr "Đồng tâm" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "Xoắn ốc thụt vào" msgid "Hilbert Curve" msgstr "Đường cong Hilbert" @@ -15068,21 +15136,29 @@ msgstr "" msgid "Top surface fill order" 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, 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 đầ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" 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, 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 đầ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" @@ -15186,6 +15262,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" @@ -17460,6 +17544,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" @@ -17909,6 +18007,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" @@ -18178,8 +18309,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" @@ -18205,6 +18337,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" @@ -19240,6 +19400,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" @@ -19252,11 +19420,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" @@ -19312,6 +19497,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." @@ -22609,14 +22818,17 @@ 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 "" +msgstr "Tỉ lệ vật liệu" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "Chiều cao mô hình" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "Tỉ lệ" # AI Translated msgid "Select Filament" @@ -22933,12 +23145,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." @@ -23088,6 +23302,2278 @@ msgstr "Filament có thể không tương thích với cài đặt máy hiện t msgid "The filament model is unknown. A random filament preset will be used." msgstr "Không rõ mẫu filament. Một cài đặt sẵn filament ngẫu nhiên sẽ được dùng." +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "Kết thúc" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "Dưới" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -23390,15 +25876,74 @@ msgstr "" "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?" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "Chọn plugin" +#~ msgid "Open actions speed dial" +#~ msgstr "Mở vòng quay thao tác nhanh" + +# 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 "Open actions speed dial" -#~ msgstr "Mở vòng quay thao tác nhanh" +#~ msgid "Select plugin" +#~ msgstr "Chọn plugin" # AI Translated #~ msgid "" @@ -23420,6 +25965,12 @@ msgstr "" #~ "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." @@ -23474,9 +26025,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "Thứ tự in trong một lớp đơn." -#~ msgid "Bottom" -#~ msgstr "Dưới" - #~ msgid "Front" #~ msgstr "Trước" @@ -23495,9 +26043,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "Mũi tên phải" -#~ msgid "End" -#~ msgstr "Kết thúc" - #~ msgid "Hotend" #~ msgstr "Hotend" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index a59dda34ba..d3c0b03ec1 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -3578,11 +3578,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 "输入以筛选……" @@ -4458,11 +4462,14 @@ 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." @@ -5498,14 +5505,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 "用法" @@ -6028,6 +6041,9 @@ msgstr "正在关闭应用程序,部分预设已修改。" msgid "Logging" msgstr "日志" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "准备" @@ -6174,11 +6190,13 @@ msgstr "项目另存为" msgid "Save current project as" msgstr "项目另存为" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "发布 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +msgstr "导出内嵌所选设置的 3MF 文件" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "导入 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7660,11 +7678,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "底部" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "此设置未指定插件能力类型。" +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "此设置指定了无法识别的插件能力类型: " msgid "Plugin Selection" msgstr "插件选择" @@ -8204,11 +8224,13 @@ msgstr "请确认这些预设中的G-codes是否安全,以防止对机器造 msgid "Customized Preset" msgstr "自定义的预设" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "部分已发布的设置无法应用:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +msgstr "部分耗材丝槽位已更改:" msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "STEP 文件中的部件名称不是 UTF-8 格式!" @@ -8609,13 +8631,17 @@ 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 "" +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 "发布" @@ -9149,6 +9175,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "弹出选择耗材丝分组模式" @@ -9230,6 +9268,12 @@ msgstr "反转鼠标缩放" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "如果启用,使用鼠标滚轮缩放的方向会反转。" +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "平移" @@ -9782,63 +9826,80 @@ msgstr "正在上传数据" msgid "Jump to webpage" msgstr "跳转到网页" +# AI Translated msgid "Material" -msgstr "" +msgstr "材料" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "混合耗材丝" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "部分混合耗材丝依赖于不会被发布的耗材丝:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "耗材丝 %d(混合)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% 需要 %2%,但它未开启。" -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +msgstr "要发布混合耗材丝,请开启它所使用的每一种耗材丝,并选择“完整发布”或满足其“类型”要求。" +# AI Translated msgid "Publish anyway" -msgstr "" +msgstr "仍然发布" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "发布 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "选择要在 3MF 文件中发布的设置" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "发布 3MF Wiki" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "发布 3MF 视频指南" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +msgstr "混合耗材丝 - 在上方选择“开启”后将整体发布" +# AI Translated msgid "Publish this mixed filament and enable + Full Publish its component filaments" -msgstr "" +msgstr "发布此混合耗材丝,并开启 + 完整发布其组成耗材丝" +# AI Translated msgid "Publish this filament slot in the 3MF file" -msgstr "" +msgstr "在 3MF 文件中发布此耗材丝槽位" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "完整发布" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "将此槽位的整条耗材丝内嵌到 3MF 文件中" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "筛选未选项" #, c-format, boost-format msgid "Save %s as" @@ -9857,8 +9918,9 @@ msgstr "将父预设继承的所有数值复制到当前预设,并解除继承 msgid "Detach from parent" msgstr "与父级分离" +# AI Translated msgid "Save without parent" -msgstr "" +msgstr "不保留父级另存" # AI Translated msgid "Unique preset" @@ -10650,9 +10712,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 "仍然按对象打印吗?" @@ -11423,14 +11493,6 @@ msgstr "挤出机数量" msgid "Capabilities" msgstr "能力" -# AI Translated -msgid "Left: " -msgstr "左: " - -# AI Translated -msgid "Right: " -msgstr "右: " - msgid "Show all presets (including incompatible)" msgstr "显示所有预设(包括不兼容的)" @@ -12277,17 +12339,18 @@ msgstr "修复被取消" msgid "Copying of file %1% to %2% failed: %3%" msgstr "从%1%拷贝文件到%2%失败:%3%" +# AI Translated msgid "Downloading new vendor profile(s): " -msgstr "" +msgstr "正在下载新的供应商配置: " -msgid "Configuration package: " -msgstr "配置包:" - -msgid " updated to " -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 "" +msgstr "下载供应商配置失败: " msgid "Please check any unsaved changes before updating the configuration." msgstr "需要在配置更新之前检查没有保存的参数修改。" @@ -12351,11 +12414,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." @@ -12469,6 +12536,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 "离不可打印区域太近,打印时可能会发生碰撞。" @@ -13821,8 +13892,9 @@ msgstr "直线排列" msgid "Concentric" msgstr "同心" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "螺旋内缩" msgid "Hilbert Curve" msgstr "希尔伯特曲线" @@ -13917,21 +13989,29 @@ msgstr "" msgid "Top surface fill order" msgstr "顶面填充顺序" +# AI Translated msgid "" "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" +"默认使用最短路径排序,方向可能是两者中的任意一种。" # AI Translated msgid "Bottom surface fill order" msgstr "底面填充顺序" +# AI Translated msgid "" "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" +"默认使用最短路径排序,方向可能是两者中的任意一种。" msgid "Internal solid infill pattern" msgstr "内部实心填充图案" @@ -14034,6 +14114,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 "到横杆高度" @@ -16198,6 +16286,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 "外墙" @@ -16637,6 +16739,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 "额外的外墙打印前擦拭" @@ -16898,8 +17033,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 "所有挤出机画线" @@ -16925,6 +17061,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 "切片间隙闭合半径" @@ -17921,6 +18085,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 "规范性检查" @@ -17933,11 +18105,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 "将进度发送到管道" @@ -17993,6 +18182,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 "根据因数缩放模型" @@ -21083,14 +21296,17 @@ msgstr "此操作无法撤消。继续?" msgid "Skipping objects." msgstr "跳过对象。" +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "材料比例" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "模型高度" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "比例" msgid "Select Filament" msgstr "选择耗材" @@ -21348,12 +21564,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." @@ -21498,6 +21716,2278 @@ msgstr "此耗材可能与当前设备设置不兼容,将使用随机耗材预 msgid "The filament model is unknown. A random filament preset will be used." msgstr "此耗材可能于当前设备设置不兼容,将使用随机耗材预设。" +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "结束" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "底部" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "删除" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -21799,15 +24289,70 @@ msgstr "" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "选择插件" +#~ msgid "Open actions speed dial" +#~ 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 "Open actions speed dial" -#~ msgstr "打开快捷操作盘" +#~ msgid "Select plugin" +#~ msgstr "选择插件" # AI Translated #~ msgid "" @@ -21829,6 +24374,12 @@ msgstr "" #~ "向内以较宽的外侧曲线开始每个表面,这可以改善在热床上的首层附着,因为中心处的紧密曲线可能无法粘牢。向外从中心开始,将多余的材料推向边缘。\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。" @@ -21883,9 +24434,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "同一层内的打印顺序" -#~ msgid "Bottom" -#~ msgstr "底部" - #~ msgid "Front" #~ msgstr "前面" @@ -21898,9 +24446,6 @@ msgstr "" #~ msgid "Esc" #~ msgstr "Esc" -#~ msgid "Del" -#~ msgstr "删除" - #~ msgid "Backspace" #~ msgstr "回退键" @@ -21916,9 +24461,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "右箭头" -#~ msgid "End" -#~ msgstr "结束" - #~ msgid "Hotend" #~ msgstr "热端" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index e891121bc1..d50ec44d21 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-09-14 12:09+0800\n" +"POT-Creation-Date: 2026-09-18 15:50+0800\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Language-Team: \n" @@ -3676,11 +3676,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 "輸入以篩選..." @@ -4571,11 +4575,14 @@ 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." @@ -5627,14 +5634,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 "使用情況" @@ -6158,6 +6171,9 @@ msgstr "正在關閉應用程式,部分預設已修改。" msgid "Logging" msgstr "日誌" +msgid "Design" +msgstr "" + msgid "Prepare" msgstr "準備" @@ -6304,11 +6320,13 @@ msgstr "另存專案為" msgid "Save current project as" msgstr "將目前專案另存為" +# AI Translated msgid "Publish 3MF" -msgstr "" +msgstr "發布 3MF" +# AI Translated msgid "Export a 3MF file with the selected settings embedded" -msgstr "" +msgstr "匯出內嵌所選設定的 3MF 檔案" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "匯入 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7801,11 +7819,13 @@ msgctxt "Layers" msgid "Bottom" msgstr "底部" +# AI Translated msgid "This setting does not specify a plugin capability type." -msgstr "" +msgstr "此設定未指定外掛能力類型。" +# AI Translated msgid "This setting specifies an unrecognized plugin capability type: " -msgstr "" +msgstr "此設定指定了無法識別的外掛能力類型: " # AI Translated msgid "Plugin Selection" @@ -8367,11 +8387,13 @@ msgstr "請確認這些預設中的 G-code 是安全的,以防止對列印裝 msgid "Customized Preset" msgstr "自訂預設" +# AI Translated msgid "Some published settings could not be applied:" -msgstr "" +msgstr "部分已發布的設定無法套用:" +# AI Translated msgid "Some filament slots were changed:" -msgstr "" +msgstr "部分線材槽位已變更:" msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "STEP 檔案內部元件的名稱不是 UTF-8 格式!" @@ -8775,13 +8797,17 @@ 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 "" +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 "發布" @@ -9322,6 +9348,18 @@ msgstr "" msgid "How many recently launched actions to show at the top of the Speed Dial. Set to 0 to hide recent actions." msgstr "" +msgid "CAD feature (experimental)" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Auto-close sketch loops" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pop up to select filament grouping mode" msgstr "彈出視窗選擇線材分組模式" @@ -9403,6 +9441,12 @@ msgstr "反轉滑鼠滾輪縮放方向" msgid "If enabled, reverses the direction of zoom with mouse wheel." msgstr "啟用後,改變滑鼠滾輪縮放方向。" +msgid "Draw mate connectors as a face" +msgstr "" + +msgid "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." +msgstr "" + msgid "Pan" msgstr "平移" @@ -9955,63 +9999,80 @@ msgstr "正在上傳資料" msgid "Jump to webpage" msgstr "跳至網頁" +# AI Translated msgid "Material" -msgstr "" +msgstr "材料" +# AI Translated msgid "Mixed filament" -msgstr "" +msgstr "混合線材" +# AI Translated msgid "Some mixed filaments rely on filaments that will not be published:" -msgstr "" +msgstr "部分混合線材依賴不會被發布的線材:" +# AI Translated #, c-format, boost-format msgid "Filament %d (mixed)" -msgstr "" +msgstr "線材 %d(混合)" -msgid "needs" -msgstr "" +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% 需要 %2%,但它未啟用。" -msgid "not enabled" -msgstr "" - -msgid "material not published" -msgstr "" +# 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 "" +msgstr "若要發布混合線材,請啟用它所使用的每一種線材,並選擇「完整發布」或滿足其「類型」需求。" +# AI Translated msgid "Publish anyway" -msgstr "" +msgstr "仍要發布" +# AI Translated msgid "Publish 3MF..." -msgstr "" +msgstr "發布 3MF..." +# AI Translated msgid "Select which settings to be published in the 3MF file" -msgstr "" +msgstr "選擇要在 3MF 檔案中發布的設定" +# AI Translated msgid "Publish 3MF Wiki" -msgstr "" +msgstr "發布 3MF Wiki" +# AI Translated msgid "Publish 3MF Video Guide" -msgstr "" +msgstr "發布 3MF 影片指南" +# AI Translated msgid "Mixed filament - published as a whole when \"Enable\" above is selected" -msgstr "" +msgstr "混合線材 - 在上方選擇「啟用」後將整體發布" +# AI Translated msgid "Publish this mixed filament and enable + Full Publish its component filaments" -msgstr "" +msgstr "發布此混合線材,並啟用 + 完整發布其組成線材" +# AI Translated msgid "Publish this filament slot in the 3MF file" -msgstr "" +msgstr "在 3MF 檔案中發布此線材槽位" +# AI Translated msgid "Full Publish" -msgstr "" +msgstr "完整發布" +# AI Translated msgid "Embed the entire filament of this slot in the 3MF file" -msgstr "" +msgstr "將此槽位的整條線材內嵌到 3MF 檔案中" +# AI Translated msgid "Filter non-selected" -msgstr "" +msgstr "篩選未選項" #, c-format, boost-format msgid "Save %s as" @@ -10030,8 +10091,9 @@ msgstr "將父配置繼承的所有數值複製到目前的配置,並解除繼 msgid "Detach from parent" msgstr "從父預設分離" +# AI Translated msgid "Save without parent" -msgstr "" +msgstr "不保留父預設另存" # AI Translated msgid "Unique preset" @@ -10856,9 +10918,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 "持續逐件列印?" @@ -11629,14 +11699,6 @@ msgstr "擠出機數量" msgid "Capabilities" msgstr "能力" -# AI Translated -msgid "Left: " -msgstr "左: " - -# AI Translated -msgid "Right: " -msgstr "右: " - msgid "Show all presets (including incompatible)" msgstr "顯示所有預設(包括不相容的)" @@ -12481,17 +12543,18 @@ msgstr "修復被取消" msgid "Copying of file %1% to %2% failed: %3%" msgstr "從 %1% 複製檔案到 %2% 失敗:%3%" +# AI Translated msgid "Downloading new vendor profile(s): " -msgstr "" +msgstr "正在下載新的廠牌設定檔: " -msgid "Configuration package: " -msgstr "設定檔:" - -msgid " updated to " -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 "" +msgstr "下載廠牌設定檔失敗: " msgid "Please check any unsaved changes before updating the configuration." msgstr "在設定更新之前需要檢查未儲存的設定變更。" @@ -12555,11 +12618,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." @@ -12673,6 +12740,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 "離淨空區域太近,列印時可能會發生碰撞。" @@ -14036,8 +14107,9 @@ msgstr "直線排列" msgid "Concentric" msgstr "同心" +# AI Translated msgid "Spiral Inset" -msgstr "" +msgstr "螺旋內縮" msgid "Hilbert Curve" msgstr "希爾伯特曲線" @@ -14128,21 +14200,29 @@ msgstr "" msgid "Top surface fill order" msgstr "頂面填充順序" +# AI Translated msgid "" "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" +"預設使用最短路徑排序,方向可能為兩者之一。" # AI Translated msgid "Bottom surface fill order" msgstr "底面填充順序" +# AI Translated msgid "" "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" +"預設使用最短路徑排序,方向可能為兩者之一。" msgid "Internal solid infill pattern" msgstr "內部實心填充圖案" @@ -14241,6 +14321,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 "到橫杆高度" @@ -16405,6 +16493,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 "外牆" @@ -16840,6 +16942,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 "外牆迴圈前的擦拭動作" @@ -17094,8 +17229,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 "所有擠出機畫線" @@ -17121,6 +17257,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 "切片間隙閉合半徑" @@ -18109,6 +18273,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 "規範符合性偵測" @@ -18121,12 +18293,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" @@ -18182,6 +18370,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 "依浮點數比例縮放模型" @@ -21276,14 +21488,17 @@ msgstr "此操作無法撤消。繼續?" msgid "Skipping objects." msgstr "跳過物件。" +# AI Translated msgid "Material Ratio" -msgstr "" +msgstr "材料比例" +# AI Translated msgid "Model Height" -msgstr "" +msgstr "模型高度" +# AI Translated msgid "Ratio" -msgstr "" +msgstr "比例" msgid "Select Filament" msgstr "選擇線材" @@ -21541,12 +21756,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." @@ -21691,6 +21908,2278 @@ msgstr "線材可能與目前的列印裝置設定不相容,將使用隨機線 msgid "The filament model is unknown. A random filament preset will be used." msgstr "線材型號未知,將使用隨機線材預設。" +msgid "Construction" +msgstr "" + +#, c-format, boost-format +msgid "%s · on %s" +msgstr "" + +msgid "Line — click start, then end" +msgstr "" + +msgid "Rectangle — click two opposite corners" +msgstr "" + +msgid "Circle — click center, then radius" +msgstr "" + +msgid "Arc — click start, end, then a point" +msgstr "" + +msgid "Slot — two centerline ends, then end radius" +msgstr "" + +msgid "Ellipse — center, major end, minor point" +msgstr "" + +msgid "Spline — click control points" +msgstr "" + +msgid "Point — click to place" +msgstr "" + +msgid "Dimension — click 2 points or an entity" +msgstr "" + +msgid "Trim — click a segment to trim it" +msgstr "" + +msgid "Extend — click a line/arc to extend it" +msgstr "" + +msgid "Offset — pick an entity, drag the distance" +msgstr "" + +msgid "Mirror — pick axis, then entities" +msgstr "" + +msgid "Fillet — pick two lines, set the radius" +msgstr "" + +msgid "Chamfer — pick two lines, set the distance" +msgstr "" + +msgid "Polygon — click center, then a vertex" +msgstr "" + +msgid "Nothing here has a value to type — pick a line, an arc, a circle, or two entities" +msgstr "" + +msgid "Normal to the sketch plane" +msgstr "" + +msgid "Converted the selection between construction and real geometry" +msgstr "" + +msgid "Origin planes shown" +msgstr "" + +msgid "Origin planes hidden" +msgstr "" + +msgid "World axes shown" +msgstr "" + +msgid "World axes hidden" +msgstr "" + +msgid "Isometric view, fitted" +msgstr "" + +msgid "Bed shown" +msgstr "" + +msgid "Bed hidden" +msgstr "" + +msgid "FEATURES" +msgstr "" + +msgid "Sketch" +msgstr "" + +#, c-format, boost-format +msgid "Sketching on %s — pick a tool" +msgstr "" + +msgid "Click a face or a reference plane in the viewport, then a sketch tool" +msgstr "" + +#, c-format, boost-format +msgid "" +"Drawing on %s.\n" +"Pick a tool, or press Menu for the list." +msgstr "" + +msgid "Click a face or a reference plane, then a sketch tool." +msgstr "" + +msgid "Add material (extrude / revolve / sweep / loft / thicken / rib)" +msgstr "" + +msgid "Extrude a sketch profile, or push/pull a picked face" +msgstr "" + +msgid "Create a sketch, or pick a solid face, first" +msgstr "" + +msgid "Revolve" +msgstr "" + +msgid "Revolve a profile about an axis" +msgstr "" + +msgid "Create a sketch profile to revolve first" +msgstr "" + +msgid "Sweep" +msgstr "" + +msgid "Sweep a profile along a path" +msgstr "" + +msgid "Create a profile sketch to sweep first" +msgstr "" + +msgid "Loft" +msgstr "" + +msgid "Loft (skin) between two or more profiles" +msgstr "" + +msgid "Create at least two profile sketches to loft" +msgstr "" + +msgid "Thicken" +msgstr "" + +msgid "Offset a solid face into a thin plate (new body)" +msgstr "" + +msgid "Thicken needs a solid body — add or import one first" +msgstr "" + +#, c-format +msgid "Body %zu" +msgstr "" + +msgid "Grow a thin wall from an open sketch line, fused to a body" +msgstr "" + +msgid "Rib needs a solid body — add or import one first" +msgstr "" + +msgid "Create a sketch with an open line first" +msgstr "" + +msgid "Create a solid body to pattern first" +msgstr "" + +msgid "Pattern — needs a solid body to replicate" +msgstr "" + +msgid "Surface (extrude / revolve / loft / fill / offset / thicken)" +msgstr "" + +msgid "Surface Extrude" +msgstr "" + +msgid "Extrude a sketch into a sheet body (no end caps)" +msgstr "" + +msgid "Create a sketch first" +msgstr "" + +msgid "Surface Revolve" +msgstr "" + +msgid "Revolve a sketch profile into a sheet body" +msgstr "" + +msgid "Surface Loft" +msgstr "" + +msgid "Loft (skin) between 2+ profiles, open (no end caps)" +msgstr "" + +msgid "Surface Fill" +msgstr "" + +msgid "Fill a sketch boundary with a smooth face" +msgstr "" + +msgid "Create a sketch profile to fill first" +msgstr "" + +msgid "Surface Offset" +msgstr "" + +msgid "Offset a sheet body's shell by a signed distance" +msgstr "" + +msgid "No sheet body to offset — create a surface feature first" +msgstr "" + +msgid "Thicken Surface" +msgstr "" + +msgid "Thicken a sheet body into a solid" +msgstr "" + +msgid "No sheet body to thicken — create a surface feature first" +msgstr "" + +msgid "Datum / Curve (plane / axis / coord sys / helix / project)" +msgstr "" + +msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" +msgstr "" + +msgid "Axis" +msgstr "" + +msgid "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" +msgstr "" + +msgid "Coord Sys" +msgstr "" + +msgid "Datum coordinate system (world point, or face + direction edge)" +msgstr "" + +msgid "Helix" +msgstr "" + +msgid "Helical curve (spring path) — use as a sweep path for coils / springs / augers" +msgstr "" + +msgid "Project body edges onto a plane as sketch entities" +msgstr "" + +msgid "Project needs a body — add or import one first" +msgstr "" + +msgid "(all edges)" +msgstr "" + +msgid "Placement (transform / mirror / mate)" +msgstr "" + +msgid "Transform" +msgstr "" + +msgid "Move and/or rotate an existing body" +msgstr "" + +msgid "Transform needs a body — add or import one first" +msgstr "" + +msgid "Reflect a body about a plane" +msgstr "" + +msgid "Mirror needs a body — add or import one first" +msgstr "" + +msgid "Mate" +msgstr "" + +msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" +msgstr "" + +msgid "Boolean (combine bodies)" +msgstr "" + +msgid "Boolean — needs two solid bodies to combine" +msgstr "" + +msgid "Cut (split a body with a plane)" +msgstr "" + +msgid "Create a solid body to cut first" +msgstr "" + +msgid "Cut — needs a solid body to slice" +msgstr "" + +msgid "Color — set the selected body's display colour" +msgstr "" + +msgid "Select a feature, or a body, first — then rename it" +msgstr "" + +msgid "Fillet / chamfer / draft / shell / delete face" +msgstr "" + +msgid "Fillet / Chamfer" +msgstr "" + +msgid "Round or bevel a picked edge" +msgstr "" + +msgid "Draft (taper a face)" +msgstr "" + +msgid "Tilt a picked face by a draft angle" +msgstr "" + +msgid "Hollow the body to a wall thickness, opening a picked face" +msgstr "" + +msgid "Delete Face" +msgstr "" + +msgid "Remove faces from a body and heal the solid" +msgstr "" + +msgid "Delete Face needs a body — add or import one first" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "Hole / thread" +msgstr "" + +msgid "Drill a hole, centred on a picked face or placed on a plane" +msgstr "" + +msgid "Thread" +msgstr "" + +msgid "Thread a cylindrical surface (inner bore / outer) or a circular edge" +msgstr "" + +msgid "Pick a cylindrical surface (bore / outer) or a circular edge for a thread" +msgstr "" + +msgid "Import STEP (editable B-rep solid)" +msgstr "" + +msgid "Import mesh (STL/OBJ) as an editable B-rep solid" +msgstr "" + +msgid "Constrain selected sketch" +msgstr "" + +msgid "SKETCH" +msgstr "" + +msgid "Click to select; Shift to add; double-click for a whole loop" +msgstr "" + +msgid "Dimension" +msgstr "" + +msgid "Click 2 points or a line / circle / arc to place a dimension" +msgstr "" + +msgid "Line / polyline" +msgstr "" + +msgid "Click start, then end — then set the exact length" +msgstr "" + +msgid "Polyline" +msgstr "" + +msgid "Click points; click first / right-click to close the loop" +msgstr "" + +msgid "Corner rectangle" +msgstr "" + +msgid "Click two opposite corners" +msgstr "" + +msgid "Center rectangle" +msgstr "" + +msgid "Click center, then a corner" +msgstr "" + +msgid "Oblique rectangle" +msgstr "" + +msgid "Click two corners of one edge, then a point for the width" +msgstr "" + +msgid "Rounded rectangle" +msgstr "" + +msgid "Click two opposite corners, then a point for the corner radius" +msgstr "" + +msgid "Center circle" +msgstr "" + +msgid "Click center, then radius" +msgstr "" + +msgid "2-point circle" +msgstr "" + +msgid "Click two ends of the diameter" +msgstr "" + +msgid "3-point circle" +msgstr "" + +msgid "Click three points on the circle" +msgstr "" + +msgid "Arc" +msgstr "" + +msgid "3-point arc" +msgstr "" + +msgid "Click start, end, then a point on the arc" +msgstr "" + +msgid "Tangent arc" +msgstr "" + +msgid "Click start (on the last entity) then end" +msgstr "" + +msgid "Center-point arc" +msgstr "" + +msgid "Click center, then start, then a point for the end angle" +msgstr "" + +msgid "Slot" +msgstr "" + +msgid "Click two centerline ends, then a point for the end radius" +msgstr "" + +msgid "Arc slot" +msgstr "" + +msgid "Click center, start, end, then a point for the width" +msgstr "" + +msgid "Ellipse" +msgstr "" + +msgid "Click center, a major-axis end, then a point for the minor axis" +msgstr "" + +msgid "Elliptical arc" +msgstr "" + +msgid "Click center, major-axis end, minor point, then arc start and end" +msgstr "" + +msgid "Spline" +msgstr "" + +msgid "Click control points; double-click or right-click to finish" +msgstr "" + +msgid "Click to place a point" +msgstr "" + +msgid "Select — click to select; Shift to add" +msgstr "" + +msgid "Text — emboss text as a profile" +msgstr "" + +msgid "SVG — import an outline as a profile" +msgstr "" + +msgid "Fillet / chamfer" +msgstr "" + +msgid "Fillet" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the radius to set it" +msgstr "" + +msgid "Chamfer" +msgstr "" + +msgid "Pick two lines, then drag the arrow or click the distance to set it" +msgstr "" + +msgid "Offset" +msgstr "" + +msgid "Pick an entity, then drag the arrow or click the distance; click empty to apply" +msgstr "" + +msgid "Pick a mirror-axis line, then the entities to mirror; click empty to apply" +msgstr "" + +msgid "Trim" +msgstr "" + +msgid "Click a segment to trim it back to its nearest intersection; right-click exits" +msgstr "" + +msgid "Extend" +msgstr "" + +msgid "Click a line or arc to extend it to the nearest entity; right-click exits" +msgstr "" + +msgid "Constrain — add geometric/dimensional relations" +msgstr "" + +msgid "Move / rotate / scale" +msgstr "" + +msgid "Move (translate)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the distance; click empty to apply" +msgstr "" + +msgid "Rotate (about centroid)" +msgstr "" + +msgid "Pick entities, then drag around the pivot or click the angle; click empty to apply" +msgstr "" + +msgid "Scale (about centroid)" +msgstr "" + +msgid "Pick entities, then drag the handle or click the factor; click empty to apply" +msgstr "" + +msgid "Linear / polar array" +msgstr "" + +msgid "Linear array" +msgstr "" + +msgid "Pick entities, drag the spacing handle, click the count; click empty to apply" +msgstr "" + +msgid "Polar array (about centroid)" +msgstr "" + +msgid "Pick entities, drag the sweep handle, click the count; click empty to apply" +msgstr "" + +#, c-format, boost-format +msgid "Click center then a vertex — %d sides, %s" +msgstr "" + +msgid "circumscribed" +msgstr "" + +msgid "inscribed" +msgstr "" + +msgid "Polygon" +msgstr "" + +#, c-format, boost-format +msgid "Converted %d entit%s between construction and real geometry" +msgstr "" + +msgid "CONSTRAIN" +msgstr "" + +msgid "Perpendicular" +msgstr "" + +msgid "Coincident" +msgstr "" + +msgid "Equal length" +msgstr "" + +msgid "Equal radius" +msgstr "" + +msgid "Collinear" +msgstr "" + +msgid "Tangent" +msgstr "" + +msgid "Midpoint" +msgstr "" + +msgid "Symmetric" +msgstr "" + +msgid "Symmetric about the vertical axis" +msgstr "" + +msgid "Symmetric about the horizontal axis" +msgstr "" + +msgid "Fix point (anchor in place)" +msgstr "" + +msgid "Horizontal distance" +msgstr "" + +msgid "Vertical distance" +msgstr "" + +msgid "✓ Confirm" +msgstr "" + +msgid "✗ Cancel" +msgstr "" + +msgid "Undo (Ctrl+Z)" +msgstr "" + +msgid "Redo (Ctrl+Shift+Z)" +msgstr "" + +msgid "New Design — clear the feature tree" +msgstr "" + +msgid "Export STEP…" +msgstr "" + +msgid "Show the printer bed and its plate grid" +msgstr "" + +msgid "Place on Face (F) — lay the picked face on the bed" +msgstr "" + +msgid "Section View — hide part of the model to see inside. PageUp/PageDown move the plane; Delete removes it." +msgstr "" + +msgid "Flip Section — show the opposite half" +msgstr "" + +msgid "Commit to Plate — send the solid to Prepare" +msgstr "" + +msgid "Width / X" +msgstr "" + +msgid "Height / Y" +msgstr "" + +msgid "Distance X" +msgstr "" + +msgid "Distance Y" +msgstr "" + +msgid "Distance Z" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Rotation axis" +msgstr "" + +msgid "Angle °" +msgstr "" + +msgid "Move / Rotate" +msgstr "" + +msgid "Sketch: —" +msgstr "" + +msgid "Extrude dist" +msgstr "" + +msgid "End" +msgstr "結束" + +msgid "2nd dist" +msgstr "" + +msgid "Taper °" +msgstr "" + +msgid "New body" +msgstr "" + +msgid "Intersect" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Flip direction" +msgstr "" + +msgid "(no edge picked — group below)" +msgstr "" + +msgid "Bottom" +msgstr "底部" + +msgid "Lateral" +msgstr "" + +msgid "Edges" +msgstr "" + +msgid "Size (r/dist)" +msgstr "" + +msgid "XY" +msgstr "" + +msgid "XZ" +msgstr "" + +msgid "YZ" +msgstr "" + +msgid "Hole plane" +msgstr "" + +msgid "Depth (blind)" +msgstr "" + +msgid "Pos X" +msgstr "" + +msgid "Pos Y" +msgstr "" + +msgid "Through" +msgstr "" + +msgid "(none — uses Hole plane)" +msgstr "" + +msgid "On face" +msgstr "" + +msgid "Thread plane" +msgstr "" + +msgid "Pitch" +msgstr "" + +msgid "Thread depth" +msgstr "" + +msgid "(none — uses Thread plane)" +msgstr "" + +msgid "Plane X" +msgstr "" + +msgid "Plane Y" +msgstr "" + +msgid "Profile: —" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Linear" +msgstr "" + +msgid "Direction" +msgstr "" + +msgid "Total angle°" +msgstr "" + +msgid "Boolean" +msgstr "" + +msgid "Union (join)" +msgstr "" + +msgid "Subtract (cut)" +msgstr "" + +msgid "Target (kept)" +msgstr "" + +msgid "Keep tool body" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "" +"Drag a corner to size, the centre to move.\n" +"Confirm or Cancel in the toolbar above." +msgstr "" + +msgid "Midplane" +msgstr "" + +msgid "Two edges" +msgstr "" + +msgid "Plane type" +msgstr "" + +msgid "Base" +msgstr "" + +msgid "Angle°" +msgstr "" + +msgid "Base X" +msgstr "" + +msgid "Base Y" +msgstr "" + +msgid "Tilt axis" +msgstr "" + +msgid "Pick Face A" +msgstr "" + +msgid "Pick Face B" +msgstr "" + +msgid "Pick Edge A" +msgstr "" + +msgid "Pick Edge B" +msgstr "" + +msgid "Size U" +msgstr "" + +msgid "Size V" +msgstr "" + +msgid "Profiles (check 2+, in order):" +msgstr "" + +msgid "Ruled (straight) sections" +msgstr "" + +msgid "Fills the sketch's closed boundary with a smooth face." +msgstr "" + +msgid "Sheet body" +msgstr "" + +msgid "Offsets a sheet body's shell. Positive = outward, negative = inward." +msgstr "" + +msgid "Thickens a sheet body into a solid. Flip reverses the direction." +msgstr "" + +msgid "(all faces — closed hollow)" +msgstr "" + +msgid "Open face" +msgstr "" + +msgid "Pick a solid face to open it, then set the wall thickness." +msgstr "" + +msgid "Angle (°)" +msgstr "" + +msgid "(pick a side face)" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pick a side face, then set the draft angle. The face pivots about the body base." +msgstr "" + +msgid "Translate X" +msgstr "" + +msgid "Translate Y" +msgstr "" + +msgid "Translate Z" +msgstr "" + +msgid "Rotate axis" +msgstr "" + +msgid "Pivot X" +msgstr "" + +msgid "Pivot Y" +msgstr "" + +msgid "Pivot Z" +msgstr "" + +msgid "Keep original (make a copy)" +msgstr "" + +msgid "Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows." +msgstr "" + +msgid "Mirror plane" +msgstr "" + +msgid "Keep original" +msgstr "" + +msgid "Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both." +msgstr "" + +msgid "(pick a solid face)" +msgstr "" + +msgid "Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those." +msgstr "" + +msgid "Target body" +msgstr "" + +msgid "Entity index" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Source body" +msgstr "" + +msgid "Target plane" +msgstr "" + +msgid "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." +msgstr "" + +msgid "Add picked face" +msgstr "" + +msgid "Click a face on the body first, then Add picked face" +msgstr "" + +#, c-format, boost-format +msgid "Face %d is already in the list" +msgstr "" + +msgid "Faces to delete" +msgstr "" + +msgid "Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid." +msgstr "" + +msgid "Left-handed" +msgstr "" + +msgid "Taper (°)" +msgstr "" + +msgid "A helical curve (spring path). Use as a sweep path to build springs, coils, or augers." +msgstr "" + +msgid "Two points" +msgstr "" + +msgid "Face normal" +msgstr "" + +msgid "Cylinder centerline" +msgstr "" + +msgid "Plane intersection" +msgstr "" + +msgid "Along edge" +msgstr "" + +msgid "Axis type" +msgstr "" + +msgid "Pick Face" +msgstr "" + +msgid "Pick Edge" +msgstr "" + +msgid "Plane A" +msgstr "" + +msgid "Plane B" +msgstr "" + +msgid "Point 1 X" +msgstr "" + +msgid "Point 1 Y" +msgstr "" + +msgid "Point 1 Z" +msgstr "" + +msgid "Point 2 X" +msgstr "" + +msgid "Point 2 Y" +msgstr "" + +msgid "Point 2 Z" +msgstr "" + +msgid "Point (world)" +msgstr "" + +msgid "Face + direction" +msgstr "" + +msgid "(all)" +msgstr "" + +msgid "Restrict picking to one body — the others go see-through and stop catching clicks" +msgstr "" + +msgid "Edge (sets in-plane direction)" +msgstr "" + +msgid "Without an edge the frame takes X from the face's first edge — pick one to choose it yourself" +msgstr "" + +msgid "X hint X" +msgstr "" + +msgid "X hint Y" +msgstr "" + +msgid "X hint Z" +msgstr "" + +msgid "Fastened — 6 DOF locked, B driven onto A exactly" +msgstr "" + +msgid "Planar — z aligned, offset distance; free in-plane slide" +msgstr "" + +msgid "Revolute — axes collinear; free rotation about z" +msgstr "" + +msgid "Slider — orientation locked; free axial slide" +msgstr "" + +msgid "Cylindrical — axes collinear; free spin + axial slide" +msgstr "" + +msgid "Kind" +msgstr "" + +msgid "CS A (fixed)" +msgstr "" + +msgid "CS B (moves)" +msgstr "" + +msgid "Flip (oppose z axes)" +msgstr "" + +msgid "Plane distance" +msgstr "" + +msgid "Axial position" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Expr" +msgstr "" + +msgid "(no bindings)" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "Constraints" +msgstr "" + +msgid "Feature tree" +msgstr "" + +msgid " — the eye suppresses this mate" +msgstr "" + +#, c-format, boost-format +msgid "%s selected — F2 or right-click renames it, double-click edits it" +msgstr "" + +msgid "Rename\tF2" +msgstr "" + +msgid "Scale artwork" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Show / hide" +msgstr "" + +msgid "Check interference — find overlapping bodies" +msgstr "" + +msgid "Bodies" +msgstr "" + +msgid "Move body" +msgstr "" + +msgid "Select a body row first, then move it" +msgstr "" + +msgid "Boolean — join, subtract or intersect with another body" +msgstr "" + +msgid "Colour" +msgstr "" + +#, c-format, boost-format +msgid "Body %d selected — right-click for what applies to it" +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "+" +msgstr "" + +msgid "Del" +msgstr "刪除" + +msgid "Sketch created — select it, then right-click to Extrude" +msgstr "" + +msgid "Sketch empty — nothing committed" +msgstr "" + +msgid "Sketch updated" +msgstr "" + +#, c-format +msgid "Sketch created (%zu driving dims) — select it, then right-click to Extrude" +msgstr "" + +msgid "Could not resolve the sketch to extrude" +msgstr "" + +msgid "Face selected — set the depth and Confirm" +msgstr "" + +msgid "Region selected — right-click to Extrude, or double-click to edit" +msgstr "" + +msgid "Sketch selected — right-click to Extrude, or double-click to edit" +msgstr "" + +#, c-format, boost-format +msgid "Face %d" +msgstr "" + +#, c-format, boost-format +msgid "Body %d " +msgstr "" + +msgid "vertex selected — click again for the whole body" +msgstr "" + +msgid "selected (whole body) — right-click for what applies to it" +msgstr "" + +#, c-format, boost-format +msgid "face %d selected — right-click to push/pull it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click for the drawing tools" +msgstr "" + +#, c-format, boost-format +msgid "%s plane selected — right-click to sketch on it, or click an object to select it" +msgstr "" + +#, c-format, boost-format +msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" +msgstr "" + +msgid "Tool exited" +msgstr "" + +msgid "Sketch kept — Finish to commit it, Cancel to discard" +msgstr "" + +msgid "✗ Conflicting constraints" +msgstr "" + +msgid "✓ Fully constrained" +msgstr "" + +#, c-format, boost-format +msgid "%d degrees of freedom" +msgstr "" + +#, c-format, boost-format +msgid "Sketch %d" +msgstr "" + +#, c-format, boost-format +msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" +msgstr "" + +#, c-format +msgid "OK — %zu triangles" +msgstr "" + +msgid "Text to insert:" +msgstr "" + +msgid "Import SVG" +msgstr "" + +msgid "Import STEP" +msgstr "" + +msgid "Reading STEP…" +msgstr "" + +msgid "No solids found in STEP" +msgstr "" + +msgid "STEP import failed: " +msgstr "" + +msgid "Rebuilding model…" +msgstr "" + +#, c-format, boost-format +msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +msgid "Import mesh" +msgstr "" + +msgid "Could not read the STL file" +msgstr "" + +msgid "Could not read the OBJ file: " +msgstr "" + +msgid "Unsupported mesh format (STL and OBJ are supported)" +msgstr "" + +msgid "The mesh contains no triangles" +msgstr "" + +#, c-format, boost-format +msgid "" +"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" +"\n" +"Import anyway?" +msgstr "" + +msgid "Large mesh" +msgstr "" + +msgid "Mesh conversion failed: " +msgstr "" + +msgid "Mesh conversion produced no geometry" +msgstr "" + +msgid "Mesh import failed: " +msgstr "" + +#, c-format, boost-format +msgid "Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, then Fillet / Cut / Shell to modify" +msgstr "" + +#, c-format, boost-format +msgid "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" +msgstr "" + +msgid "No importable geometry found" +msgstr "" + +#, c-format, boost-format +msgid "%s added to the sketch — Confirm to commit it" +msgstr "" + +msgid " — drag to place/size, then Confirm" +msgstr "" + +msgid "Insert cancelled" +msgstr "" + +msgid "Drag a corner to scale, the centre to move — right-click when done" +msgstr "" + +#, c-format, boost-format +msgid "Sketch added on %s — select it, then right-click to Extrude" +msgstr "" + +msgid "Recompute error: " +msgstr "" + +msgid "Add a solid (sketch + extrude) first" +msgstr "" + +#, c-format, boost-format +msgid "Edge %d" +msgstr "" + +#, c-format, boost-format +msgid "Thread standard: %s (pitch %.3g mm)" +msgstr "" + +msgid "Thread needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to revolve first" +msgstr "" + +msgid "Revolve needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a profile sketch to sweep first" +msgstr "" + +msgid "Pick a path sketch for the sweep" +msgstr "" + +msgid "Sweep needs a solid body — add or import one first" +msgstr "" + +msgid "Check at least two profile sketches to loft" +msgstr "" + +msgid "Loft needs a solid body — add or import one first" +msgstr "" + +msgid "Pick a sketch profile to extrude first" +msgstr "" + +msgid "Pick a sketch to fill first" +msgstr "" + +msgid "Select a sheet body first" +msgstr "" + +msgid "Pick a solid face to thicken first" +msgstr "" + +msgid "Pick a sketch with an open line first" +msgstr "" + +msgid "Add at least one face to delete first" +msgstr "" + +msgid "Mate needs two CoordSys features — create them first" +msgstr "" + +msgid "Mate: CS A and CS B must be different CoordSys features" +msgstr "" + +msgid "Mate rejected" +msgstr "" + +msgid "No interference — need at least two solid bodies to check" +msgstr "" + +msgid "No interference found" +msgstr "" + +#, c-format +msgid "%zu interference pairs, worst %.2f mm³" +msgstr "" + +msgid "" +"Interference pairs:\n" +"\n" +msgstr "" + +#, c-format, boost-format +msgid "Body %d" +msgstr "" + +msgid "Interference" +msgstr "" + +msgid "Select a solid body first — its mass properties are what is reported" +msgstr "" + +msgid "Mass properties could not be computed for this body" +msgstr "" + +#, c-format, boost-format +msgid "%s: sheet body — %.2f cm² of surface, no volume" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Sheet body (open shell)\n" +"Surface area: %.2f cm²\n" +"\n" +"A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." +msgstr "" + +msgid "Mass properties" +msgstr "" + +#, c-format, boost-format +msgid "%s: %.3f cm³, %.2f cm²" +msgstr "" + +#, c-format, boost-format +msgid "" +"%s\n" +"\n" +"Volume: %.3f cm³\n" +"Surface area: %.2f cm²" +msgstr "" + +msgid "Pattern needs a solid body — add or import one first" +msgstr "" + +msgid "Boolean needs two solid bodies — add or import a second one" +msgstr "" + +msgid "Cut needs a solid body — add or import one first" +msgstr "" + +#, c-format, boost-format +msgid "the picked face of Body %d" +msgstr "" + +msgid "the picked face" +msgstr "" + +#, c-format, boost-format +msgid " · %d picked" +msgstr "" + +#, c-format, boost-format +msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" +msgstr "" + +msgid "Select — click an entity to pick it · drag an endpoint or centre to move it · Shift-click adds · Del removes" +msgstr "" + +#, c-format, boost-format +msgid "%d picked · now choose a constraint (Horizontal, Parallel, Tangent, Equal…)" +msgstr "" + +msgid "Constrain — click one or two entities, then choose a constraint" +msgstr "" + +msgid "Dimension — click an entity, or the first of two points" +msgstr "" + +msgid "Dimension — click the second point" +msgstr "" + +msgid "Line — click the start point" +msgstr "" + +msgid "Line — click the end point, or type the length" +msgstr "" + +msgid "Polyline — click the first point" +msgstr "" + +msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" +msgstr "" + +msgid "Rectangle — click one corner" +msgstr "" + +msgid "Rectangle — click the opposite corner" +msgstr "" + +msgid "Centre rectangle — click the centre" +msgstr "" + +msgid "Centre rectangle — click a corner" +msgstr "" + +msgid "Oblique rectangle — click the start of the base edge" +msgstr "" + +msgid "Oblique rectangle — click the end of the base edge (this sets the angle)" +msgstr "" + +msgid "Oblique rectangle — click to set the width" +msgstr "" + +msgid "Rounded rectangle — click one corner" +msgstr "" + +msgid "Rounded rectangle — click the opposite corner" +msgstr "" + +msgid "Rounded rectangle — click to set the corner radius" +msgstr "" + +msgid "Circle — click the centre" +msgstr "" + +msgid "Circle — click to set the radius, or type it" +msgstr "" + +msgid "Circle (2 points) — click one end of the diameter" +msgstr "" + +msgid "Circle (2 points) — click the other end of the diameter" +msgstr "" + +msgid "Circle (3 points) — click the first point on the circle" +msgstr "" + +msgid "Circle (3 points) — click the second point" +msgstr "" + +msgid "Circle (3 points) — click the third point" +msgstr "" + +msgid "Arc — click the start point" +msgstr "" + +msgid "Arc — click the end point" +msgstr "" + +msgid "Arc — click a point the arc passes through" +msgstr "" + +msgid "Tangent arc — click the endpoint it leaves from" +msgstr "" + +msgid "Tangent arc — click its far end" +msgstr "" + +msgid "Centre arc — click the centre" +msgstr "" + +msgid "Centre arc — click the start point (this sets the radius)" +msgstr "" + +msgid "Centre arc — click the end point" +msgstr "" + +msgid "Slot — click one end of the centreline" +msgstr "" + +msgid "Slot — click the other end of the centreline" +msgstr "" + +msgid "Slot — click to set the width" +msgstr "" + +msgid "Arc slot — click the centre the slot curves about" +msgstr "" + +msgid "Arc slot — click the start of the centreline (this sets the radius)" +msgstr "" + +msgid "Arc slot — click the end of the centreline" +msgstr "" + +msgid "Arc slot — click to set the width" +msgstr "" + +msgid "Polygon — click the centre" +msgstr "" + +msgid "Polygon — click a vertex (this sets size and orientation)" +msgstr "" + +msgid "Ellipse — click the centre" +msgstr "" + +msgid "Ellipse — click the end of the major axis" +msgstr "" + +msgid "Ellipse — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click the centre" +msgstr "" + +msgid "Elliptical arc — click the end of the major axis" +msgstr "" + +msgid "Elliptical arc — click a point on the minor axis" +msgstr "" + +msgid "Elliptical arc — click where the arc starts" +msgstr "" + +msgid "Elliptical arc — click where the arc ends" +msgstr "" + +msgid "Spline — click the first control point" +msgstr "" + +msgid "Spline — click the next control point · right-click to finish the curve" +msgstr "" + +msgid "Point — click to place one; the tool stays armed for more" +msgstr "" + +msgid "Trim — click a segment where it crosses another entity · right-click to exit" +msgstr "" + +msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" +msgstr "" + +msgid "Fillet — click the first of two lines that meet" +msgstr "" + +msgid "Fillet — click the second line" +msgstr "" + +msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Chamfer — click the first of two lines that meet" +msgstr "" + +msgid "Chamfer — click the second line" +msgstr "" + +msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Offset — click the entity to offset" +msgstr "" + +msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" +msgstr "" + +msgid "Mirror — first click the LINE to mirror about (a construction line works)" +msgstr "" + +msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" +msgstr "" + +#, c-format, boost-format +msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" +msgstr "" + +msgid "Move — click the entities to move" +msgstr "" + +msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" +msgstr "" + +msgid "Rotate — click the entities to rotate" +msgstr "" + +msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" +msgstr "" + +msgid "Scale — click the entities to scale" +msgstr "" + +msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" +msgstr "" + +msgid "Array — click the entities to repeat" +msgstr "" + +msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Polar array — click the entities to repeat" +msgstr "" + +msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" +msgstr "" + +msgid "Drag a corner to scale, the centre to move · right-click when done" +msgstr "" + +msgid " · Esc goes back to Select" +msgstr "" + +msgid " · click a constraint badge to remove it" +msgstr "" + +msgid "select something first" +msgstr "" + +#, c-format, boost-format +msgid "Mate: %s → %s" +msgstr "" + +msgid "Fastened" +msgstr "" + +msgid "Revolute" +msgstr "" + +msgid "Slider" +msgstr "" + +msgid "Cylindrical" +msgstr "" + +msgid "Click a solid FACE in the viewport" +msgstr "" + +msgid "Click a solid EDGE in the viewport" +msgstr "" + +msgid "An angled plane needs an edge to tilt about — pick Edge A" +msgstr "" + +msgid "A midplane needs two faces — pick Face A and Face B" +msgstr "" + +msgid "Face A and Face B are the same face — a midplane needs two different faces" +msgstr "" + +msgid "A tangent plane needs a cylindrical face — pick Face A" +msgstr "" + +msgid "This plane needs two edges — pick Edge A and Edge B" +msgstr "" + +msgid "Plane added — pick it as a sketch plane" +msgstr "" + +msgid "Axis added" +msgstr "" + +msgid "Coord Sys added" +msgstr "" + +msgid "Shell needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a solid body — add or import one first" +msgstr "" + +msgid "Draft needs a picked face — click a side face first" +msgstr "" + +msgid "" +"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." +msgstr "" + +msgid "No solid yet — select a sketch and right-click it to Extrude." +msgstr "" + +msgid "Could not restore the CAD model from this project" +msgstr "" + +msgid "Could not restore the CAD model: " +msgstr "" + +#, c-format +msgid "Body %zu — %s" +msgstr "" + +msgid "Section view on — hides half the model to see inside; PageUp / PageDown move the plane, Flip shows the other half" +msgstr "" + +msgid "Section view off" +msgstr "" + +#, c-format, boost-format +msgid "Section view — showing the %s half" +msgstr "" + +msgid "upper" +msgstr "" + +msgid "lower" +msgstr "" + +msgid "Boolean needs two bodies — create or import a second solid" +msgstr "" + +msgid "Select a body first — click it in the viewport or the Bodies list" +msgstr "" + +msgid "That body has no display mesh yet — recompute first" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)" +msgstr "" + +msgid "Drag the arrows to move, the rings to rotate — the numbers follow" +msgstr "" + +msgid "Select a body first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d colour set" +msgstr "" + +msgid "Click a face on the solid, then press F" +msgstr "" + +msgid "Placed on face — body laid flat on the bed" +msgstr "" + +msgid "Edit rejected: " +msgstr "" + +msgid "Erase all features and bodies and start a new design? This cannot be undone." +msgstr "" + +msgid "New Design" +msgstr "" + +msgid "This body has no feature to delete — use New Design to start over" +msgstr "" + +#, c-format, boost-format +msgid "feature %d" +msgstr "" + +#, c-format, boost-format +msgid "" +"Delete %s?\n" +"\n" +"That is the feature this body was made from. Features built on it may be removed or stop working." +msgstr "" + +msgid "Delete body" +msgstr "" + +msgid "Select the FEATURE that created this body (or use New Design)" +msgstr "" + +msgid "Select a feature in the tree first" +msgstr "" + +#, c-format, boost-format +msgid "Body %d shown" +msgstr "" + +#, c-format, boost-format +msgid "Body %d hidden" +msgstr "" + +msgid "Feature shown" +msgstr "" + +msgid "Feature hidden" +msgstr "" + +msgid "Draw a sketch first, then Constrain" +msgstr "" + +msgid "Select a sketch in the tree first" +msgstr "" + +msgid "Selected feature is not a sketch" +msgstr "" + +msgid "Pick 1-2 lines, then a constraint; right-click exits" +msgstr "" + +msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" +msgstr "" + +msgid "Pick an entity first" +msgstr "" + +msgid "Pick two entities first" +msgstr "" + +msgid "Horizontal and Vertical apply to a line" +msgstr "" + +msgid "Angle applies between two lines" +msgstr "" + +msgid "Collinear needs two lines" +msgstr "" + +msgid "Parallel, perpendicular and equal length apply to two lines" +msgstr "" + +msgid "Equal radius needs two circles or arcs" +msgstr "" + +msgid "Concentric needs two circles or arcs" +msgstr "" + +msgid "Tangent needs a line and a circle/arc, or two circles/arcs" +msgstr "" + +msgid "This constraint needs two entities with a point to join" +msgstr "" + +msgid "This dimension needs two entities with a point to measure between" +msgstr "" + +msgid "Midpoint needs a point and a line" +msgstr "" + +msgid "Symmetric needs two points or two lines + an axis" +msgstr "" + +msgid "Symmetric needs two points or two lines" +msgstr "" + +msgid "Symmetric: pick two entities, then an axis line" +msgstr "" + +msgid "Radius/Diameter needs a circle or arc" +msgstr "" + +msgid "Unsupported constraint" +msgstr "" + +msgid "Constraint rejected (over-constrained)" +msgstr "" + +msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" +msgstr "" + +#, c-format, boost-format +msgid "%s — %d selected. Press Esc for the Select tool, click one line, then Shift- or Ctrl-click the other." +msgstr "" + +msgid "Applied constraint" +msgstr "" + +#, c-format, boost-format +msgid "Fix %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock X %s" +msgstr "" + +#, c-format, boost-format +msgid "Lock Y %s" +msgstr "" + +msgid "Equal" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric %s — %s / %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about Y axis %s — %s" +msgstr "" + +#, c-format, boost-format +msgid "Symmetric about X axis %s — %s" +msgstr "" + +msgid "On line" +msgstr "" + +msgid "On edge" +msgstr "" + +msgid "Constraint" +msgstr "" + +#, c-format, boost-format +msgid "Constraints (%d)" +msgstr "" + +msgid "No constraints yet" +msgstr "" + +msgid "Delete constraint" +msgstr "" + +msgid "Constraint deleted" +msgstr "" + +msgid "Press Constrain on a sketch first" +msgstr "" + +msgid "Pick the entity, then a mirror-axis line" +msgstr "" + +msgid "Mirror axis must be a line" +msgstr "" + +msgid "Mirror produced nothing" +msgstr "" + +msgid "Offset distance (+left / -right of direction)" +msgstr "" + +msgid "Offset collapsed the entity" +msgstr "" + +msgid "Pick two lines to fillet" +msgstr "" + +msgid "Fillet needs two lines" +msgstr "" + +msgid "Fillet radius" +msgstr "" + +msgid "Fillet failed (parallel lines or radius too large)" +msgstr "" + +msgid "Pick two lines to chamfer" +msgstr "" + +msgid "Chamfer needs two lines" +msgstr "" + +msgid "Chamfer distance" +msgstr "" + +msgid "Chamfer failed (parallel lines or distance too large)" +msgstr "" + +msgid "Trim works on lines, arcs and circles" +msgstr "" + +msgid "Extend works on lines and arcs" +msgstr "" + +msgid "Pick the edge to trim/extend" +msgstr "" + +msgid "Nothing to trim at the pick" +msgstr "" + +msgid "No edge to extend to" +msgstr "" + +msgid "Array count (incl. original)" +msgstr "" + +msgid "Spacing (mm)" +msgstr "" + +msgid "Array produced nothing" +msgstr "" + +msgid "Move dX (mm)" +msgstr "" + +msgid "Move dY (mm)" +msgstr "" + +msgid "Move produced nothing" +msgstr "" + +msgid "Rotate angle (deg)" +msgstr "" + +msgid "Rotate produced nothing" +msgstr "" + +msgid "Scale factor" +msgstr "" + +msgid "Scale produced nothing" +msgstr "" + +msgid "Polar count (incl. original)" +msgstr "" + +msgid "Total sweep (deg)" +msgstr "" + +msgid "Polar array produced nothing" +msgstr "" + +msgid "Applied edit" +msgstr "" + +msgid " — type a value, press Enter (or Confirm)" +msgstr "" + +msgid "Pick a segment in the viewport first" +msgstr "" + +msgid "Applied Horizontal" +msgstr "" + +msgid "Applied Vertical" +msgstr "" + +msgid "Sketch: " +msgstr "" + +#, c-format, boost-format +msgid "On a face of Body %d" +msgstr "" + +msgid "On a stored face" +msgstr "" + +msgid "Editing sketch — drag a handle or click a quote to edit" +msgstr "" + +msgid "An imported solid has no parameters — use Transform to move or rotate it" +msgstr "" + +msgid "This feature type can't be edited yet" +msgstr "" + +msgid "Nothing to export — add a feature first" +msgstr "" + +msgid "Export STEP" +msgstr "" + +msgid "Exported STEP" +msgstr "" + +msgid "STEP export failed: " +msgstr "" + +msgid "Nothing to commit — add a feature first" +msgstr "" + +msgid "All bodies hidden — show one before committing" +msgstr "" + +msgid "Plane ready" +msgstr "" + +msgid "Axis ready" +msgstr "" + +msgid "Coord Sys ready" +msgstr "" + +msgid "Helix ready" +msgstr "" + +msgid "Project ready" +msgstr "" + +msgid "Sketch ready" +msgstr "" + +msgid "Mate needs at least two CoordSys features" +msgstr "" + +msgid "Mate: CS A and CS B must be different" +msgstr "" + +msgid "Mate ready" +msgstr "" + +msgid "Invalid: " +msgstr "" + +#, c-format +msgid "Preview — %zu triangles" +msgstr "" + +#, c-format, boost-format +msgid "Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°" +msgstr "" + +msgid "Profile: " +msgstr "" + +#, c-format, boost-format +msgid "Face %d (push/pull)" +msgstr "" + +msgid "Move cancelled" +msgstr "" + +msgid "Discard this sketch and everything drawn in it?" +msgstr "" + +msgid "Discard sketch" +msgstr "" + +msgid "Keep drawing" +msgstr "" + +msgid "Finish or cancel the current tool first (Esc)" +msgstr "" + +msgid "Nothing to redo" +msgstr "" + +msgid "Nothing to undo" +msgstr "" + +#, c-format +msgid "Redo (%zu more)" +msgstr "" + +#, c-format +msgid "Undo (%zu more)" +msgstr "" + +msgid "Variable name:" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Variable name must not contain spaces" +msgstr "" + +#, c-format, boost-format +msgid "Expression for '%s':" +msgstr "" + +msgid "Select a variable first" +msgstr "" + +msgid "Edit Variable" +msgstr "" + +#, c-format, boost-format +msgid "Variable '%s' could not be removed (likely still referenced by a feature expression): %s" +msgstr "" + +msgid "No binding for that field" +msgstr "" + +msgid "Primitive" +msgstr "" + +msgid "Empty mesh generated" +msgstr "" + +msgid "Pocket (Cut)" +msgstr "" + +msgid "Clear All" +msgstr "" + #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" @@ -22013,15 +24502,70 @@ msgstr "" "您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。" # AI Translated -#~ msgid "Select plugin" -#~ msgstr "選擇外掛" +#~ msgid "Open actions speed dial" +#~ 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 "Open actions speed dial" -#~ msgstr "開啟操作快捷選單" +#~ msgid "Select plugin" +#~ msgstr "選擇外掛" # AI Translated #~ msgid "" @@ -22043,6 +24587,13 @@ msgstr "" #~ "「向內」讓每個表面從較寬的外側曲線開始,可改善中心緊密曲線可能無法附著的列印板上的第一層附著。「向外」從中心開始,將多餘的材料推向邊緣。\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。" @@ -22095,9 +24646,6 @@ msgstr "" #~ msgid "Print order within a single layer." #~ msgstr "每一層的列印順序" -#~ msgid "Bottom" -#~ msgstr "底部" - #~ msgid "Front" #~ msgstr "前面" @@ -22110,9 +24658,6 @@ msgstr "" #~ msgid "Esc" #~ msgstr "Esc" -#~ msgid "Del" -#~ msgstr "刪除" - #~ msgid "Backspace" #~ msgstr "Backspace" @@ -22128,9 +24673,6 @@ msgstr "" #~ msgid "Arrow Right" #~ msgstr "右箭頭" -#~ msgid "End" -#~ msgstr "結束" - #~ msgid "Hotend" #~ msgstr "熱端" 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/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/profiles/Afinia.json b/resources/profiles/Afinia.json index 517d0148c3..e65ced0f68 100644 --- a/resources/profiles/Afinia.json +++ b/resources/profiles/Afinia.json @@ -1,6 +1,6 @@ { "name": "Afinia", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "Afinia configurations", "machine_model_list": [ 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 098b1df003..945378db9c 100644 --- a/resources/profiles/Anker.json +++ b/resources/profiles/Anker.json @@ -1,6 +1,6 @@ { "name": "Anker", - "version": "02.04.00.02", + "version": "02.04.00.04", "force_update": "0", "description": "Anker configurations", "machine_model_list": [ 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 7fade72381..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": "Generic PLA @Anker;Generic PLA+ @Anker;Generic PLA Silk @Anker;Generic TPU @Anker;Generic PETG @Anker" + "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 5c9839d1ff..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": "Generic PLA @Anker;Generic PLA+ @Anker;Generic PLA Silk @Anker;Generic TPU @Anker;Generic PETG @Anker" + "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.json b/resources/profiles/Anker/machine/Anker M5C.json index cf539851e5..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": "Generic PLA @Anker;Generic PLA+ @Anker;Generic PLA Silk @Anker;Generic TPU @Anker;Generic PETG @Anker" + "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 205fd359d8..85dce20a81 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -1,6 +1,6 @@ { "name": "Anycubic", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "Anycubic configurations", "machine_model_list": [ @@ -64,10 +64,10 @@ "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 S1 Max", + "sub_path": "machine/Anycubic Kobra S1 Max.json" + }, { "name": "Anycubic Kobra X", "sub_path": "machine/Anycubic Kobra X.json" @@ -90,6 +90,10 @@ "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" @@ -98,6 +102,14 @@ "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" @@ -106,6 +118,10 @@ "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" @@ -126,10 +142,22 @@ "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" @@ -162,6 +190,10 @@ "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" @@ -186,6 +218,10 @@ "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" @@ -194,6 +230,14 @@ "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" @@ -250,6 +294,10 @@ "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" @@ -294,6 +342,18 @@ "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" @@ -314,6 +374,10 @@ "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" @@ -362,14 +426,26 @@ "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" @@ -378,110 +454,30 @@ "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.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.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.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" - } - + { + "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": [ { @@ -536,6 +532,22 @@ "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" @@ -556,6 +568,22 @@ "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" @@ -564,6 +592,46 @@ "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" @@ -573,16 +641,56 @@ "sub_path": "filament/Generic PA-CF @Anycubic.json" }, { - "name": "Fiberon PA6-CF20 @Anycubic Kobra S1", - "sub_path": "filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.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": "Generic PETG @Anycubic", - "sub_path": "filament/Generic PETG @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", @@ -600,10 +708,46 @@ "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" @@ -612,14 +756,6 @@ "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": "Generic PLA @Anycubic", - "sub_path": "filament/Generic PLA @Anycubic.json" - }, - { - "name": "Generic PLA-CF @Anycubic", - "sub_path": "filament/Generic PLA-CF @Anycubic.json" - }, { "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle", "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json" @@ -636,6 +772,22 @@ "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" @@ -652,6 +804,18 @@ "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" @@ -664,6 +828,18 @@ "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" @@ -676,10 +852,26 @@ "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" @@ -688,10 +880,30 @@ "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" @@ -705,21 +917,53 @@ "sub_path": "filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json" }, { - "name": "Generic PVA @Anycubic", - "sub_path": "filament/Generic PVA @Anycubic.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 TPU @Anycubic", - "sub_path": "filament/Generic TPU @Anycubic.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" @@ -740,10 +984,26 @@ "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" @@ -796,6 +1056,18 @@ "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" @@ -816,302 +1088,22 @@ "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" - }, - { - "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": [ { @@ -1198,22 +1190,22 @@ "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 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" 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 99d8da0f4b..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 @@ -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 95d5884132..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 @@ -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 3a6e2c9073..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 @@ -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 f49664c14b..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 @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -180,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 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json index 790d365ee5..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 @@ -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 05d943ece7..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 @@ -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 2a43e7b355..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 @@ -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 1b038f7ba0..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 @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -180,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], 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 2d5c70f60b..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 @@ -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 PETG @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json index 213ee1ce70..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 @@ -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 fbab6ab82c..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 @@ -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 5966ceb3dd..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 @@ -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 13c1aae54f..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 @@ -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 85edb1eca9..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 @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -180,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 2 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json index 7faa84782c..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 @@ -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 583473ed30..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 @@ -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 8e531b88a4..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 @@ -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 01b3d45f23..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 @@ -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 2898403b36..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 @@ -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 a4e34756ec..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 @@ -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 af7e374dc7..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 @@ -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 5c8936316f..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 @@ -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 504a4b382c..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 @@ -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 df464f2fa9..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 @@ -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 4e60bf4527..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 @@ -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 80c120870e..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 @@ -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 43ec857824..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 @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -183,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 Glow @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json index 9cb1eef59f..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 @@ -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 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 5b069135b3..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 @@ -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 eb59d710e0..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 @@ -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 9b37a8911c..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 @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -180,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 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 03ea837c0c..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 @@ -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 474deb3deb..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 @@ -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 7dad057149..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 @@ -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 SE @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json index d7832ced4c..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 @@ -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 9aebb3860e..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 @@ -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 166e46e620..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 @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -180,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 Slik @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json index 0ea21e81ed..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 @@ -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.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json index 59fd701496..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 @@ -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 a80ab1d88f..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 @@ -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 d31d75f532..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 @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -180,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 @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json index 5141d90404..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 @@ -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 d6b5217879..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 @@ -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 a5f6e735b0..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 @@ -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 d17fd1217a..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 @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -180,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], 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 988340c1eb..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 @@ -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 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 a81795f7c0..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 @@ -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 TPU @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json index 369198b146..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 @@ -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/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 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 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Neo 0.4 nozzle.json index 41b6e7b3e1..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 @@ -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 25a16805e1..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": "Generic PLA @Anycubic" + "default_materials": "Generic PLA @Anycubic;Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle" } 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 Predator.json b/resources/profiles/Anycubic/machine/Anycubic Predator.json index a3b100c166..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": "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" + "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/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 66a3a05247..180622cf3a 100644 --- a/resources/profiles/Artillery.json +++ b/resources/profiles/Artillery.json @@ -1,6 +1,6 @@ { "name": "Artillery", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "Artillery configurations", "machine_model_list": [ 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 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 9641788cf7..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.24", + "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" @@ -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/addnorth/addnorth ABS rABS.json b/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json index ecc4aa62f4..5d6b376e47 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json @@ -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 3d4fbe9c88..703389a687 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json @@ -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 5486b65d44..beba3c51de 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json @@ -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 1881e454f5..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 @@ -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 e0696d14fe..5cb61738c8 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json @@ -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 d64bb0629e..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 @@ -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 6a4af4f908..eb1ffaf48c 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json @@ -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 ff647879dc..de07353b97 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json @@ -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 fdbaa361f2..f3df226774 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json @@ -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 12849a851d..08ad97161a 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json @@ -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 bdbecc7722..0948d9f9c7 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json @@ -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 a466f88b0a..0396c6578d 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json @@ -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 a5c78fe215..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 @@ -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 f32705ba65..3a35d16b29 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json @@ -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 fa2c0e9ae0..77a86797f0 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json @@ -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 1dc1796d4b..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 @@ -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 f64767d1e3..1487f567cd 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json @@ -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 1bbfb305b2..789d2bd096 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json @@ -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 99ec158160..aed77a1a1a 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json @@ -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 ffe91af773..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 @@ -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 073b96a224..d785327ee7 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json @@ -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 b6a2695235..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 @@ -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 7910e3c772..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 @@ -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 13604f5832..88258976f2 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json @@ -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 d8a9ca5ca3..afdcb43296 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json @@ -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 f4d1beac7d..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 @@ -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 61d6100a71..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 @@ -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/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 f8243c252d..f24bcb81da 100644 --- a/resources/profiles/Blocks.json +++ b/resources/profiles/Blocks.json @@ -1,6 +1,6 @@ { "name": "Blocks", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "Blocks configurations", "machine_model_list": [ diff --git a/resources/profiles/Blocks/machine/fdm_klipper_common.json b/resources/profiles/Blocks/machine/fdm_klipper_common.json index 1756ac178a..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", 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 efc7c78972..55845903b0 100644 --- a/resources/profiles/CONSTRUCT3D.json +++ b/resources/profiles/CONSTRUCT3D.json @@ -1,6 +1,6 @@ { "name": "CONSTRUCT3D", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Construct3D configurations", "machine_model_list": [ 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 f32b4f84ae..5434e13bb8 100644 --- a/resources/profiles/Chuanying.json +++ b/resources/profiles/Chuanying.json @@ -1,7 +1,7 @@ { "name": "Chuanying", "url": "", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "Chuanying configurations", "machine_model_list": [ @@ -89,14 +89,14 @@ "name": "Generic PETG @Chuanying X1 0.25 Nozzle", "sub_path": "filament/Generic PETG @Chuanying X1 0.25 Nozzle.json" }, - { - "name": "Generic PVA @Chuanying", - "sub_path": "filament/Generic PVA @Chuanying.json" - }, { "name": "Generic PLA @Chuanying X1 0.25 Nozzle", "sub_path": "filament/Generic PLA @Chuanying X1 0.25 Nozzle.json" }, + { + "name": "Generic PVA @Chuanying", + "sub_path": "filament/Generic PVA @Chuanying.json" + }, { "name": "Generic PLA-Silk @Chuanying X1 0.25 Nozzle", "sub_path": "filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json" diff --git a/resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json index f5cc9c8419..3196464cc2 100644 --- a/resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json +++ b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic ASA @Chuanying", - "inherits": "fdm_filament_asa", "renamed_from": "Chuanying Generic ASA", + "inherits": "fdm_filament_asa", "from": "system", "setting_id": "39OBrSE3RugtTPPR", "filament_id": "OFLPAxz3", @@ -10,9 +10,6 @@ "additional_cooling_fan_speed": [ "0" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": "0", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json b/resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json index 4d8edd7298..25910a1f55 100644 --- a/resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json +++ b/resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic HIPS @Chuanying", - "inherits": "Generic ABS @Chuanying", "renamed_from": "Chuanying Generic HIPS", + "inherits": "Generic ABS @Chuanying", "from": "system", "setting_id": "TV3UktlnP0aTLsOZ", "filament_id": "OFsFon5l", @@ -96,9 +96,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -171,9 +168,6 @@ "filament_type": [ "HIPS" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json index 8b0529814e..c209ab1022 100644 --- a/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json +++ b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json @@ -1,15 +1,12 @@ { "type": "filament", "name": "Generic HS PLA @Chuanying", - "inherits": "fdm_filament_pla", "renamed_from": "Chuanying Generic HS PLA", + "inherits": "fdm_filament_pla", "from": "system", "setting_id": "uw7SQpFnhFiO8i1N", "filament_id": "OFvxghTE", "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/Chuanying/filament/Generic PETG-CF10 @Chuanying.json b/resources/profiles/Chuanying/filament/Generic PETG-CF10 @Chuanying.json index 85d42dad84..e8c812c7d5 100644 --- a/resources/profiles/Chuanying/filament/Generic PETG-CF10 @Chuanying.json +++ b/resources/profiles/Chuanying/filament/Generic PETG-CF10 @Chuanying.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PETG-CF10 @Chuanying", - "inherits": "fdm_filament_pet", "renamed_from": "Chuanying Generic PETG-CF10", + "inherits": "fdm_filament_pet", "from": "system", "setting_id": "Pr70SnbXDjOF9EvU", "filament_id": "OFO5djrM", @@ -10,9 +10,6 @@ "additional_cooling_fan_speed": [ "100" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": "0", "close_fan_the_first_x_layers": [ "1" diff --git a/resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json b/resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json index c76c4de977..46be8ddf90 100644 --- a/resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json +++ b/resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA-CF10 @Chuanying", - "inherits": "fdm_filament_pla", "renamed_from": "Chuanying Generic PLA-CF10", + "inherits": "fdm_filament_pla", "from": "system", "setting_id": "I4FjaXNkWl8Mr4ie", "filament_id": "OFX2zcrM", @@ -10,9 +10,6 @@ "additional_cooling_fan_speed": [ "100" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": [ "0" ], @@ -87,9 +84,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -162,9 +156,6 @@ "filament_type": [ "PLA-CF" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json b/resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json index a38af95d65..0c6abd3c0f 100644 --- a/resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json +++ b/resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PVA @Chuanying", - "inherits": "Generic PLA @Chuanying", "renamed_from": "Chuanying Generic PVA", + "inherits": "Generic PLA @Chuanying", "from": "system", "setting_id": "UTutnObeQqlZxe0B", "filament_id": "OFDvXujf", @@ -96,9 +96,6 @@ "filament_is_support": [ "1" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -171,9 +168,6 @@ "filament_type": [ "PVA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json b/resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json index 9bea6c388d..b9a325ce8c 100644 --- a/resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json +++ b/resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic TPU @Chuanying", - "inherits": "fdm_filament_tpu", "renamed_from": "Chuanying Generic TPU", + "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "gYsq1HqkgyfmVpvz", "filament_id": "OFgbpcy9", @@ -10,9 +10,6 @@ "additional_cooling_fan_speed": [ "100" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": "0", "close_fan_the_first_x_layers": [ "1" diff --git a/resources/profiles/Chuanying/machine/Chuanying X1.json b/resources/profiles/Chuanying/machine/Chuanying X1.json index 9e9c3f015d..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": "Generic PETG @Chuanying;Generic PLA @Chuanying" + "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 41d7339cf0..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", diff --git a/resources/profiles/Chuanying/machine/fdm_klipper_common.json b/resources/profiles/Chuanying/machine/fdm_klipper_common.json index 16fb20b900..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", 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/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 e6f9fe967c..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.02", + "version": "02.04.00.03", "force_update": "0", "description": "CoPrint configurations", "machine_model_list": [ diff --git a/resources/profiles/Co Print/filament/Generic PLA @CoPrint.json b/resources/profiles/Co Print/filament/Generic PLA @CoPrint.json index 2a8510b3ab..5a6c5287c0 100644 --- a/resources/profiles/Co Print/filament/Generic PLA @CoPrint.json +++ b/resources/profiles/Co Print/filament/Generic PLA @CoPrint.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA @CoPrint", - "inherits": "fdm_filament_pla", "renamed_from": "CoPrint Generic PLA", + "inherits": "fdm_filament_pla", "from": "system", "setting_id": "9tNsM3FhIDgKJ05R", "filament_id": "OFDSrzZ8", @@ -10,12 +10,6 @@ "filament_vendor": [ "Generic" ], - "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", 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/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 d0c395b348..f27623c7bc 100644 --- a/resources/profiles/CoLiDo.json +++ b/resources/profiles/CoLiDo.json @@ -1,6 +1,6 @@ { "name": "CoLiDo", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "CoLiDo configurations", "machine_model_list": [ @@ -196,6 +196,10 @@ "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": "Generic PETG @CoLiDo DIY 4.0", "sub_path": "filament/Generic PETG @CoLiDo DIY 4.0.json" @@ -204,18 +208,6 @@ "name": "Generic PETG @CoLiDo X16", "sub_path": "filament/Generic PETG @CoLiDo X16.json" }, - { - "name": "CoLiDo PETG @CoLiDo SR1", - "sub_path": "filament/CoLiDo PETG @CoLiDo SR1.json" - }, - { - "name": "Generic PLA @CoLiDo DIY 4.0", - "sub_path": "filament/Generic PLA @CoLiDo DIY 4.0.json" - }, - { - "name": "Generic PLA @CoLiDo X16", - "sub_path": "filament/Generic PLA @CoLiDo X16.json" - }, { "name": "CoLiDo PLA @CoLiDo SR1", "sub_path": "filament/CoLiDo PLA @CoLiDo SR1.json" @@ -228,6 +220,14 @@ "name": "CoLiDo PLA+ @CoLiDo DIY 4.0 V2", "sub_path": "filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json" }, + { + "name": "Generic PLA @CoLiDo DIY 4.0", + "sub_path": "filament/Generic PLA @CoLiDo DIY 4.0.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" 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 8e9b4b34c5..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 @@ -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 DIY 4.0 0.4 nozzle.json b/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0 0.4 nozzle.json index bbecec1d48..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 @@ -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 X16 0.4 nozzle.json b/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json index 228580eece..4110cbe15d 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json @@ -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/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 d506431ce8..e3eb237518 100644 --- a/resources/profiles/Comgrow.json +++ b/resources/profiles/Comgrow.json @@ -1,6 +1,6 @@ { "name": "Comgrow", - "version": "02.04.00.04", + "version": "02.04.00.05", "force_update": "0", "description": "Comgrow configurations", "machine_model_list": [ diff --git a/resources/profiles/Comgrow/machine/fdm_comgrow_common.json b/resources/profiles/Comgrow/machine/fdm_comgrow_common.json index ef8ce3ba93..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", 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 23b8b3799b..a870a8d7d6 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.02.77", + "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": "Generic ABS @Creality Ender-5Max-all", - "sub_path": "filament/Generic ABS @Creality Ender-5Max-all.json" + "name": "fdm_filament_hips", + "sub_path": "filament/fdm_filament_hips.json" }, { - "name": "Generic ASA @Creality Ender-5Max-all", - "sub_path": "filament/Generic ASA @Creality Ender-5Max-all.json" + "name": "fdm_filament_petg", + "sub_path": "filament/fdm_filament_petg.json" }, { - "name": "Generic PA @Creality Ender-5Max-all", - "sub_path": "filament/Generic PA @Creality Ender-5Max-all.json" + "name": "fdm_filament_pp", + "sub_path": "filament/fdm_filament_pp.json" }, { - "name": "Generic PETG @Creality Ender-5Max-all", - "sub_path": "filament/Generic PETG @Creality Ender-5Max-all.json" - }, - { - "name": "Generic PLA @Creality Ender-5Max-all", - "sub_path": "filament/Generic PLA @Creality Ender-5Max-all.json" - }, - { - "name": "Generic TPU @Creality Ender-5Max-all", - "sub_path": "filament/Generic TPU @Creality 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": "Generic ABS @Creality", - "sub_path": "filament/Generic ABS @Creality.json" + "name": "Generic HIPS @K1 Max_CFS-C-all", + "sub_path": "filament/Generic HIPS @K1 Max_CFS-C-all.json" }, { - "name": "Generic ASA @Creality", - "sub_path": "filament/Generic ASA @Creality.json" + "name": "Generic HIPS @K1C-all", + "sub_path": "filament/Generic HIPS @K1C-all.json" }, { - "name": "Generic PA-CF @Creality", - "sub_path": "filament/Generic PA-CF @Creality.json" + "name": "Generic HIPS @K1C_CFS-C-all", + "sub_path": "filament/Generic HIPS @K1C_CFS-C-all.json" }, { - "name": "Generic PC @Creality", - "sub_path": "filament/Generic PC @Creality.json" + "name": "Generic HIPS @K1_CFS-C-all", + "sub_path": "filament/Generic HIPS @K1_CFS-C-all.json" }, { - "name": "Generic PETG @Creality", - "sub_path": "filament/Generic PETG @Creality.json" - }, - { - "name": "Generic PLA @Creality", - "sub_path": "filament/Generic PLA @Creality.json" - }, - { - "name": "Generic PLA-CF @Creality", - "sub_path": "filament/Generic PLA-CF @Creality.json" - }, - { - "name": "Generic PLA HF @Creality", - "sub_path": "filament/Generic PLA HF @Creality.json" - }, - { - "name": "Generic Speed PLA @Creality HF", - "sub_path": "filament/Generic Speed PLA @Creality HF.json" - }, - { - "name": "Generic TPU @Creality", - "sub_path": "filament/Generic TPU @Creality.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_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 faa9404b3b..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": "OFGwZmgS" -} \ 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 10c1cce09d..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": "OFGwZmgS" -} \ 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 12afdde3cd..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": "OFGwZmgS" -} \ 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 00340895f4..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": "OFGwZmgS" -} \ 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 d80c98423f..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": "OFGwZmgS" -} \ 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 f41b1bb940..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": "OFGwZmgS" -} \ 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 f91677ab31..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": "OFGwZmgS" -} \ 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 b83d103747..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": "OFGwZmgS" -} \ 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 d807936bfc..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": "OFGwZmgS" -} \ 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 b6334a93b6..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": "OFGwZmgS" -} \ 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 f49bf5dd93..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": "OFGwZmgS" -} \ 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 d0f92634b1..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": "OFGwZmgS" -} \ 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 bc9719ad07..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": "OFvLppPU" -} \ 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 bf9ce0c9e1..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": "OFvLppPU" -} \ 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 e2a7ef32fa..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": "OFvLppPU" -} \ 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 48747723f0..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": "OFvLppPU" -} \ 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 d665bb8d16..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": "OFvLppPU" -} \ 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 bfa6bd0bc7..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": "OF3WQaKK" -} \ 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 4b3ab33892..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": "OF3WQaKK" -} \ 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 bc597f92b3..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": "OF3WQaKK" -} \ 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 1c92de9916..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": "OF3WQaKK" -} \ 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 be3983b772..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": "OF3WQaKK" -} \ 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 2829598e5a..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": "OF3WQaKK" -} \ 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 a6ee2af473..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": "OF3WQaKK" -} \ 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 d05baf33af..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": "OF3WQaKK" -} \ 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 ead310f41c..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": "OF3WQaKK" -} \ 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 b73011595f..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": "OF3WQaKK" -} \ 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 2137f18ef6..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": "OF3WQaKK" -} \ 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 16bd7c7053..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": "OF3WQaKK" -} \ 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 befe270b95..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": "OF3WQaKK" -} \ 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 83548daafd..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": "OFp4ETDP" -} \ 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 0dc26b51ba..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": "OFp4ETDP" -} \ 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 84fb331f5b..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": "OFp4ETDP" -} \ 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 1f5d2b746a..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": "OFp4ETDP" -} \ 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 f8517e48b5..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": "OFp4ETDP" -} \ 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 092a18533d..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": "OFp4ETDP" -} \ 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 e564114150..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": "OFp4ETDP" -} \ 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 2796306e7f..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": "OFp4ETDP" -} \ 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 a175fcdb46..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": "OFp4ETDP" -} \ 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 b30c6e90fe..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": "OFp4ETDP" -} \ 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 4de70e5062..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": "OFp4ETDP" -} \ 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 26a62766b0..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": "OFp4ETDP" -} \ 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 ad5aad1c66..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": "OFp4ETDP" -} \ 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 cfc58c9cf8..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": "OFrM4hdm" -} \ 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 e6eaf070f8..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": "OFrM4hdm" -} \ 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 2e369e8a3c..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": "OFrM4hdm" -} \ 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 47bfd16093..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": "OFrM4hdm" -} \ 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 b7fb77695e..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": "OFrM4hdm" -} \ 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 ee3510a9cc..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": "OFgpQwkk" -} \ 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 22d113814a..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": "OFgpQwkk" -} \ 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 59bf2e48e6..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": "OFgpQwkk" -} \ 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 4a3a27bfb5..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": "OFgpQwkk" -} \ 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 5b3aaccd1f..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": "OFgpQwkk" -} \ 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 c2dbe07744..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": "OFgpQwkk" -} \ 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 98a41262c4..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": "OFgpQwkk" -} \ 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 759d5cbd88..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": "OFgpQwkk" -} \ 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 1ed05bed21..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": "OFM0xjBG" -} \ 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 80373199ad..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": "OFM0xjBG" -} \ 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 ac4a9fc0ff..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": "OFM0xjBG" -} \ 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 cd8ea92f5a..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": "OFM0xjBG" -} \ 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 1779ce9a54..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": "OFM0xjBG" -} \ 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 ebfe70bac1..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": "OFM0xjBG" -} \ 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 90436b9e4b..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": "OFM0xjBG" -} \ 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 b2bc9f1bc4..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": "OFM0xjBG" -} \ 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 5cf37492a4..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": "OFM0xjBG" -} \ 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 494d7245c9..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": "OF3OMgrI" -} \ 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 497ddcd169..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": "OF3OMgrI" -} \ 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 bffe643c8c..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": "OF3OMgrI" -} \ 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 39ba90b647..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": "OF3OMgrI" -} \ 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 33b0ddc999..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": "OF3OMgrI" -} \ 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 7ba2624bae..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": "OF3OMgrI" -} \ 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 ddbf57b5f2..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": "OF3OMgrI" -} \ 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 3e0e45cd87..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": "OF3OMgrI" -} \ 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 a2320f3f4e..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": "OF3OMgrI" -} \ 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 4c1f433c61..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": "OF3OMgrI" -} \ 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 9c1415001b..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": "OF3OMgrI" -} \ 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 97e5d7da31..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": "OF3OMgrI" -} \ 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 11a92b0357..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": "OF3OMgrI" -} \ 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 8ad140c757..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": "OFG2RkhN" -} \ 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 001f3c5e5c..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": "OFG2RkhN" -} \ 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 9d10ae7b5c..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": "OFG2RkhN" -} \ 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 5be19a6852..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": "OFG2RkhN" -} \ 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 b79e38758b..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": "OFG2RkhN" -} \ 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 e3ea591f17..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": "OFG2RkhN" -} \ 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 a336ca1e66..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": "OFG2RkhN" -} \ 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 3b6e8923eb..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": "OFG2RkhN" -} \ 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 2d59b01143..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": "OFGxC8gB" -} \ 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 20477f04a9..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": "OFGxC8gB" -} \ 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 95dc4f4c95..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": "OFGxC8gB" -} \ 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 e029b37f79..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": "OFGxC8gB" -} \ 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 aa7a1f5eee..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": "OFGxC8gB" -} \ 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 Hyper ABS @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Hyper ABS @Ender-5Max-all.json index cb50c6f7fb..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 @@ -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 6a71e56fff..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 @@ -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 d44e4d96bf..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 @@ -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 d8a060f9b5..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 @@ -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 a7c696718f..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": "OFks6esg" -} \ 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 c680265601..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": "OFks6esg" -} \ 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 50816aed69..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": "OFks6esg" -} \ 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 43728032ef..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": "OFks6esg" -} \ 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 25642697d9..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": "OFks6esg" -} \ 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 16a318a1e0..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": "OFks6esg" -} \ 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 e9693dabcc..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": "OFks6esg" -} \ 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 e19e06f40e..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": "OFks6esg" -} \ 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 3fd9b4ef24..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": "OFfSqS4R" -} \ 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 a27a828dfb..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": "OFfSqS4R" -} \ 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 4f831d47ab..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": "OFfSqS4R" -} \ 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 9c2fd90d30..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": "OFfSqS4R" -} \ 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 c96ff98d72..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": "OFfSqS4R" -} \ 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 711b1b22a7..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": "OFWao3Ic" -} \ 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 27ea82bdd3..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": "OFWao3Ic" -} \ 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 ed995443e3..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": "OFWao3Ic" -} \ 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 c220fa54ac..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": "OFWao3Ic" -} \ 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 2471ec31bb..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": "OFWao3Ic" -} \ 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 f10bf01177..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": "OFWao3Ic" -} \ 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 51b85450b3..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": "OFWao3Ic" -} \ 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 8e04e8fee9..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": "OFWao3Ic" -} \ 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 b26145bea9..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": "OFWao3Ic" -} \ 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 11a85cc128..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": "OFWao3Ic" -} \ 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-5Max-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-5Max-all.json index 5a6f7a93c9..f385b23057 100644 --- a/resources/profiles/Creality/filament/Generic ABS @Creality Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-5Max-all.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic ABS @Creality Ender-5Max-all", - "inherits": "fdm_filament_common", "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", @@ -44,7 +44,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": [ @@ -74,7 +73,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/Generic ABS @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic ABS @Ender-3 V4-all.json index d1f8662025..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": "OFY9muEs" -} \ 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 9f43259110..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": "OFY9muEs" -} \ 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 4d1de77b9e..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": "OFY9muEs" -} \ 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 974ca3a49a..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": "OFY9muEs" -} \ 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 8fa83c2dbf..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": "OFY9muEs" -} \ 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 0d8c23a2e7..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": "OFY9muEs" -} \ 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 888b283059..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": "OFY9muEs" -} \ 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 58d749dea3..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": "OFY9muEs" -} \ 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 425411f466..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": "OFY9muEs" -} \ 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 a03c0fbfcb..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": "OFY9muEs" -} \ 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 846dc3b748..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": "OFY9muEs" -} \ 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 0eefa273a9..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": "OFY9muEs" -} \ 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-5Max-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-5Max-all.json index 0fa424b522..66cb8a6eb8 100644 --- a/resources/profiles/Creality/filament/Generic ASA @Creality Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-5Max-all.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic ASA @Creality Ender-5Max-all", - "inherits": "fdm_filament_common", "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", @@ -44,7 +44,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": [ @@ -74,7 +73,6 @@ "filament_type": [ "ASA" ], - "filament_unload_time": "0", "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ 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 6f9ee6971e..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": "OFLPAxz3" -} \ 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 d5850749d2..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": "OFLPAxz3" -} \ 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 8894ee7af1..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": "OFLPAxz3" -} \ 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 2669b08f43..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": "OFLPAxz3" -} \ 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 0a5dc5d18a..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": "OFLPAxz3" -} \ 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 33cf5b2860..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": "OFLPAxz3" -} \ 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 f1bdbc1310..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": "OFLPAxz3" -} \ 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 346f7bfec6..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": "OFLPAxz3" -} \ 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 758d45606e..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": "OFLPAxz3" -} \ 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 68b9b71b9e..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": "OFLPAxz3" -} \ 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 @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic ASA-CF @K2 Plus-all.json index f98421ad49..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": "OF53eLVD" -} \ 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 33ac63d296..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": "OFo2UF2C" -} \ 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 e0cfdb7090..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": "OFo2UF2C" -} \ 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 9f2cbf4200..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": "OFo2UF2C" -} \ 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 e79e575992..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": "OFo2UF2C" -} \ 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 9bd399cbf0..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": "OFo2UF2C" -} \ 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 c525c695d7..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": "OFo2UF2C" -} \ 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 4d3492a70f..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": "OFo2UF2C" -} \ 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 1f8bea7aef..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": "OFo2UF2C" -} \ 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 9549195611..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": "OFsFon5l" -} \ 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 5016c1e5a5..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": "OFsFon5l" -} \ 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 33950552d8..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": "OFsFon5l" -} \ 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 7b1ab3190b..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": "OFsFon5l" -} \ 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 255e9e8b6e..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": "OFsFon5l" -} \ 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 index 500722f1e9..ce836188d0 100644 --- a/resources/profiles/Creality/filament/Generic PA @Creality Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic PA @Creality Ender-5Max-all.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PA @Creality Ender-5Max-all", - "inherits": "fdm_filament_common", "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", @@ -44,7 +44,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": [ @@ -74,7 +73,6 @@ "filament_type": [ "PA" ], - "filament_unload_time": "0", "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ 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 12c3698ca6..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": "OFg8ndtj" -} \ 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 310dfb7abd..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": "OFg8ndtj" -} \ 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 0d134ae474..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": "OFg8ndtj" -} \ 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 1396769307..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": "OFg8ndtj" -} \ 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 950b84e7f0..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": "OFg8ndtj" -} \ 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 c8ddd05024..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": "OFg8ndtj" -} \ 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 b98aac22a0..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": "OFg8ndtj" -} \ 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 @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K1 Max_CFS-C-all.json index c047fb7774..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": "OFQLcbps" -} \ 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 360ecbf35b..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": "OFQLcbps" -} \ 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 022474e6f1..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": "OFQLcbps" -} \ 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 40586091b0..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": "OFQLcbps" -} \ 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 0b0042c6c8..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": "OFQLcbps" -} \ 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 fb65088525..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": "OFM4iJlv" -} \ 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 04260f4d8e..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": [ - "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_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 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": "OFhTPf6L" -} \ 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 b141bc04ec..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": [ - "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_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 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": "OFhTPf6L" -} \ 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 6dd6902397..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": [ - "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_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 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": "OFhTPf6L" -} \ 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 9c70b899f0..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": [ - "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_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 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": "OFhTPf6L" -} \ 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 75cd58773a..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": [ - "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_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_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": "OFhTPf6L" -} \ 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 6388151090..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": [ - "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_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_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": "OFhTPf6L" -} \ 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 5919945b58..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": "OFh9u9c0" -} \ 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 d1decb74cc..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": "OF8eaY7j" -} \ 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 5ccb21724d..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": "OF8eaY7j" -} \ 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 3e007d79c6..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": "OFH7b12v" -} \ 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 dcc9738515..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": "OFH7b12v" -} \ 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 2f5ae88e9d..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": "OFH7b12v" -} \ 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 e7ffe11efa..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": "OFH7b12v" -} \ 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 8d4157e8cd..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": "OFH7b12v" -} \ 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 a013abb416..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": "OFH7b12v" -} \ 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 e8032a6b4c..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": "OFH7b12v" -} \ 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 @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PC @K1 Max_CFS-C-all.json index 67c0d17aa6..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": "OFLakOUI" -} \ 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 30bb957e88..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": "OFLakOUI" -} \ 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 450b46b2af..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": "OFLakOUI" -} \ 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 353610592a..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": "OFLakOUI" -} \ 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 e4a1d358f7..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": "OFLakOUI" -} \ 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 99c3232a10..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": "OFLakOUI" -} \ 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 c84c58a220..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": "OFu1evlr" -} \ 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 047bacd756..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": "OF6MOPWx" -} \ 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 ae435635dd..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": "OF6MOPWx" -} \ 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 93e9cd11f0..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": "OF6MOPWx" -} \ 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 4e860053d9..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": "OF6MOPWx" -} \ 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 cf56f3c9af..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": "OF6MOPWx" -} \ 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 4da77efe33..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": "OF6MOPWx" -} \ 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 ef761807b0..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": "OF6MOPWx" -} \ 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 4c9fadfbc6..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": "OFQdaVZS" -} \ 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 e98f8773a6..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": "OFQdaVZS" -} \ 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 36c9dc92a6..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": "OFQdaVZS" -} \ 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 c1955e0667..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": "OFQdaVZS" -} \ 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 44eb974cdf..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": "OFQdaVZS" -} \ 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 ddfb603d30..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": "OFQdaVZS" -} \ 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-5Max-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-5Max-all.json index df6509395f..e9a463bd1a 100644 --- a/resources/profiles/Creality/filament/Generic PETG @Creality Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-5Max-all.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PETG @Creality Ender-5Max-all", - "inherits": "fdm_filament_common", "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", @@ -44,7 +44,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": [ @@ -74,7 +73,6 @@ "filament_type": [ "PETG" ], - "filament_unload_time": "0", "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ 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 cbdc915a23..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": "OFYPdQJh" -} \ 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 32b171416b..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": "OFYPdQJh" -} \ 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 40fecf5d33..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": "OFYPdQJh" -} \ 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 e82036ef1c..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": "OFYPdQJh" -} \ 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 649d2057b3..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": "OFYPdQJh" -} \ 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 5d05e2a977..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": "OFYPdQJh" -} \ 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 7f7459382a..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": "OFYPdQJh" -} \ 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 568b5a1cf5..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": "OFYPdQJh" -} \ 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 6b10eac4c6..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": "OFYPdQJh" -} \ 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 5d007dfff3..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": "OFYPdQJh" -} \ 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 69af8255c5..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": "OFYPdQJh" -} \ 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 a8e2308613..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": "OFYPdQJh" -} \ 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 301fc96ef9..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": "OFYPdQJh" -} \ 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 @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K1 Max_CFS-C-all.json index 5f03c5b211..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": "OFoYSJKi" -} \ 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 4044297ea9..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": "OFoYSJKi" -} \ 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 5c22d3e902..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": "OFoYSJKi" -} \ 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 00f8180634..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": "OFoYSJKi" -} \ 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 5ed6aa15ea..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": "OFoYSJKi" -} \ 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 a801d09c9b..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": "OFoYSJKi" -} \ 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 a2b844f80f..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": "OFoYSJKi" -} \ 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 954782024a..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": "OFoYSJKi" -} \ 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 63dead723c..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": "OFyLWVF3" -} \ 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 5405f7dbcd..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": "OFyLWVF3" -} \ 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 7d52685214..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": [ - "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_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.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": "OFyLWVF3" -} \ 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-5Max-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-5Max-all.json index ff55c41e81..f4714b8acc 100644 --- a/resources/profiles/Creality/filament/Generic PLA @Creality Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-5Max-all.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA @Creality Ender-5Max-all", - "inherits": "fdm_filament_common", "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", @@ -44,7 +44,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": [ @@ -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/Generic PLA @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality Hi-all.json index 452c7854ae..9bdc93548b 100644 --- a/resources/profiles/Creality/filament/Generic PLA @Creality Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Creality Hi-all.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA @Creality Hi-all", - "inherits": "Generic PLA @Creality", "renamed_from": "Creality Generic PLA @Hi-all;Creality Generic PLA Hi-all", + "inherits": "Generic PLA @Creality", "from": "system", "setting_id": "6rwK4GqvNrgaw4kF", "instantiation": "true", @@ -45,9 +45,6 @@ "filament_cooling_moves": [ "4" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -57,9 +54,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], 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 ce8231d11a..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": "OFDSrzZ8" -} \ 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 43bb0786ea..25ca83f1c6 100644 --- a/resources/profiles/Creality/filament/Generic PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Hi-all.json @@ -1,142 +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.8 nozzle" - ], - "filament_id": "OFDSrzZ8" -} \ 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 315347fc4f..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": "OFDSrzZ8" -} \ 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 11bd5fd68a..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": "OFDSrzZ8" -} \ 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 167ef73d00..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": "OFDSrzZ8" -} \ 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 7cad23ed0e..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": "OFDSrzZ8" -} \ 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 50db3c5fb5..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": "OFDSrzZ8" -} \ 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 ddbc57ab8d..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": "OFDSrzZ8" -} \ 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 6514b99d50..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": "OFDSrzZ8" -} \ 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 96eafd022b..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": "OFDSrzZ8" -} \ 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 f8e0beaefe..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": "OFDSrzZ8" -} \ 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 ee71e52517..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": "OFDSrzZ8" -} \ 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 07d9aa02e0..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": "OFDSrzZ8" -} \ 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-CF @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Ender-3 V4-all.json index 3fd2827231..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": "OFWbdGsC" -} \ 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 698bdc2927..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": "OFWbdGsC" -} \ 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 57228d8b7f..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": "OFWbdGsC" -} \ 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 647819f8ea..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": "OFWbdGsC" -} \ 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 ae3aa14a7a..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": "OFWbdGsC" -} \ 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 7c1b681b1e..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": "OFWbdGsC" -} \ 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 ab73ebe1ba..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": "OFWbdGsC" -} \ 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 381f25f899..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": "OFWbdGsC" -} \ 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 f1ce0ce42d..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": "OFWbdGsC" -} \ 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 4dab8f0c8a..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": "OFWbdGsC" -} \ 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 111ac7470a..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": "OFWbdGsC" -} \ 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 4184a05737..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": "OFWbdGsC" -} \ 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 da5c1ba172..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": "OFi6PfUM" -} \ 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 a3dfac28d1..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": "OFi6PfUM" -} \ 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 c7ce2639ae..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": "OFi6PfUM" -} \ 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 418248ed71..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": "OFi6PfUM" -} \ 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 1ba33bf6dc..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": "OFi6PfUM" -} \ 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 f37ef16d31..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": "OFi6PfUM" -} \ 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 1b4298f035..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": "OFi6PfUM" -} \ 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 f81638a23f..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": "OFi6PfUM" -} \ 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 50f7dac4eb..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": "OFi6PfUM" -} \ 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 2c18b858e8..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": "OFi6PfUM" -} \ 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 8b7030ff73..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": "OFi6PfUM" -} \ 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 5826a18ba9..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": "OFi6PfUM" -} \ 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 e67d570ad4..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": "OFi6PfUM" -} \ 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 7aec44400e..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": "OF1UNk9P" -} \ 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 ad01f49d51..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": "OF1UNk9P" -} \ 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 fb56912bf1..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": "OF1UNk9P" -} \ 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 88acdf3d32..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": "OF1UNk9P" -} \ 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 e34d70a902..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": "OF1UNk9P" -} \ 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 e3167109d8..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": "OF1UNk9P" -} \ 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 8f0075422c..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": "OF1UNk9P" -} \ 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 e557ac36e4..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": "OFXkm8q1" -} \ 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 01f7c52bc9..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": "OFq9svOz" -} \ 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 39a3449351..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": "OFq9svOz" -} \ 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 af12995572..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": "OFq9svOz" -} \ 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 dd22fcf107..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": "OFq9svOz" -} \ 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 deff12cad5..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": "OFq9svOz" -} \ 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 f07eed6f9a..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": "OF6rdQ6M" -} \ 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 78f5a33e87..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": "OF6rdQ6M" -} \ 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 8975f9792c..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": "OF6rdQ6M" -} \ 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 11b1b3a155..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": "OF6rdQ6M" -} \ 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 3bbcf8f992..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": "OF6rdQ6M" -} \ 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 6fdad0ad0b..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": "OFDvXujf" -} \ 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 ba02942df2..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": "OFDvXujf" -} \ 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 34d0a7231d..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": "OFDvXujf" -} \ 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 607cf3b0dd..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": "OFDvXujf" -} \ 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 e5eff7fb64..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": "OFDvXujf" -} \ 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 a4499aa85d..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": "OFDvXujf" -} \ 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 9cf5bfd6bc..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": "OFDvXujf" -} \ 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 d69eab7457..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": "OFDvXujf" -} \ 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 Support for PA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic Support for PA @K2 Plus-all.json index a59be37173..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": "OFDtop41" -} \ 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 5135c5ee68..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": "OFin64Qg" -} \ 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 da1860ce3c..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": "OFF3cuzT" -} \ 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 54d1fd6680..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": "OFF3cuzT" -} \ 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-5Max-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-5Max-all.json index 62f4916a99..c90e9ddcd4 100644 --- a/resources/profiles/Creality/filament/Generic TPU @Creality Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-5Max-all.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic TPU @Creality Ender-5Max-all", - "inherits": "fdm_filament_common", "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", @@ -44,7 +44,6 @@ ], "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": [ @@ -74,7 +73,6 @@ "filament_type": [ "TPU" ], - "filament_unload_time": "0", "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ 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 18e8caacda..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": "OFgbpcy9" -} \ 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 0e093087d3..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": "OFgbpcy9" -} \ 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 12f548e797..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": "OFgbpcy9" -} \ 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 c7aa82e060..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": "OFgbpcy9" -} \ 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 4d77ed28a7..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": "OFgbpcy9" -} \ 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 4c29062659..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": "OFgbpcy9" -} \ 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 88523dd930..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": "OFgbpcy9" -} \ 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 a06cdec298..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": "OFgbpcy9" -} \ 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 07e97acb84..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": "OFgbpcy9" -} \ 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 8793fc167e..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": "OFgbpcy9" -} \ 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 03d44388f5..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": "OFgbpcy9" -} \ 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 c1d0268024..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": "OFgbpcy9" -} \ 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 e300daac38..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": "OFCJpR7a" -} \ 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 d437c91d60..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": "OFCJpR7a" -} \ 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 2c354d95bc..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": "OFCJpR7a" -} \ 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 db920a7f56..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": "OFCJpR7a" -} \ 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 8f912cf729..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": "OFCJpR7a" -} \ 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 16810d1886..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": "OFPHLnoe" -} \ 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 c720b4d1b0..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": "OFPHLnoe" -} \ 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 01a49e2392..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": "OFPHLnoe" -} \ 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 d3a45386ad..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": "OFPHLnoe" -} \ 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 1b97d61b93..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": "OFPHLnoe" -} \ 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 33a4406fdd..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": "OFPHLnoe" -} \ 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 f29ffdd702..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": "OFPHLnoe" -} \ 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 2d38575630..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": "OFPHLnoe" -} \ 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 9d7767c4d8..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": "OFGcMkEB" -} \ 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 c9b6766149..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": "OFGcMkEB" -} \ 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 079dfebfe2..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": "OFGcMkEB" -} \ 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 7e5935cdf7..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": "OFGcMkEB" -} \ 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 62184e78e3..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": "OFGcMkEB" -} \ 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 6762f0d2d4..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": "OFGcMkEB" -} \ 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 e7534ade92..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": "OFGcMkEB" -} \ 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 077936057a..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": "OFGcMkEB" -} \ 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 5b979963f0..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": "OFGcMkEB" -} \ 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 90201f7dcf..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": "OFGcMkEB" -} \ 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 b3779225c2..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": "OFGcMkEB" -} \ 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 3768b17547..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": "OFGcMkEB" -} \ 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 1d225ec253..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": "OFGcMkEB" -} \ 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 e4a50b5fec..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": "OF8GnyFU" -} \ 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 bb93a96d02..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": "OF8GnyFU" -} \ 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 9749f95e35..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": "OF8GnyFU" -} \ 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 a303e41640..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": "OF8GnyFU" -} \ 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 b4780cb82d..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": "OF8GnyFU" -} \ 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 1ae0bc6ddf..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": "OF8GnyFU" -} \ 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 03f8fbc354..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": "OF8GnyFU" -} \ 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 d6c76e777f..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": "OF8GnyFU" -} \ 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 7ecce97627..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": "OF8GnyFU" -} \ 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 de032398b5..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": "OF8GnyFU" -} \ 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 c3132a18b5..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": "OF8GnyFU" -} \ 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 63bf93483d..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": "OF8GnyFU" -} \ 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 d4deb0be89..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": "OF70zbGS" -} \ 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 182364977c..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": "OF70zbGS" -} \ 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 2bc12a6918..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": "OF70zbGS" -} \ 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 065b9ac77e..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": "OF70zbGS" -} \ 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 872eeca4dc..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": "OF70zbGS" -} \ 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 3685dbd854..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": "OF70zbGS" -} \ 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 718112bd7b..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": "OF70zbGS" -} \ 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 df0df361ad..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": "OF70zbGS" -} \ 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 cf2c873e77..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": "OF70zbGS" -} \ 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 9b06765831..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": "OF70zbGS" -} \ 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 4c39c1ac1a..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": "OFC1PzXz" -} \ 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 53ab1e078e..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": "OFC1PzXz" -} \ 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 9e267d07cf..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": "OFC1PzXz" -} \ 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 67c567791c..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": "OFC1PzXz" -} \ 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 b5182102e4..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": "OFC1PzXz" -} \ 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 9817bd9701..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": "OFC1PzXz" -} \ 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 614c8a9ac8..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": "OFLzx3J4" -} \ 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 1fdeb7e4d3..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": "OFLzx3J4" -} \ 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 3430271e86..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": "OFLzx3J4" -} \ 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 f92a629e09..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": "OFLzx3J4" -} \ 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 0443b606a1..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": "OFLzx3J4" -} \ 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 87c217d5db..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": "OFLzx3J4" -} \ 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 90047e7778..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": "OFLzx3J4" -} \ 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 a0bc0bbfbc..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": "OFLzx3J4" -} \ 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 09eb2487d3..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": "OFLzx3J4" -} \ 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 746332ab6a..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": "OFLzx3J4" -} \ 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 d5d494f3f4..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": "OFn2GlhY" -} \ 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 97f41d5746..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": "OFn2GlhY" -} \ 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 658908446c..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": "OFhkN0a7" -} \ 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 40870d5cd3..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": "OFhkN0a7" -} \ 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 915b8b67d9..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": "OF4APyxe" -} \ 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 3529603ba6..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": "OF4APyxe" -} \ 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 a2c841f463..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": "OF4APyxe" -} \ 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 c597cd9c95..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": "OF4APyxe" -} \ 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 67d0b403cc..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": "OF4APyxe" -} \ 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 f7e37afe69..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": "OF4APyxe" -} \ 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 1f97108309..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": "OF4APyxe" -} \ 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 85d5d66252..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": "OFUF7oA4" -} \ 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 7592b6dbcf..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": "OFUF7oA4" -} \ 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 a333d63f3d..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": "OFujZSdh" -} \ 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 5998e1e8bd..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": "OFujZSdh" -} \ 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 6bd1f3afea..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": "OFujZSdh" -} \ 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 058dfe5bd6..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": "OFujZSdh" -} \ 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 f1ceb825e9..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": "OFujZSdh" -} \ 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 175aa8099c..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": "OFujZSdh" -} \ 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 be8e2c58f5..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": "OFujZSdh" -} \ 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 9bf2512abe..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": "OFujZSdh" -} \ 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 983556224b..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": "OFujZSdh" -} \ 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 32a8fae98b..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": "OFujZSdh" -} \ 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 cc058c4511..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": "OFujZSdh" -} \ 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 9bbf24c47f..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": "OFujZSdh" -} \ 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 d8db7fd923..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": "OFujZSdh" -} \ 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 69662a0296..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": "OFusbWjj" -} \ 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 1005d22d7f..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": "OFusbWjj" -} \ 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 e9008aede1..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": "OFusbWjj" -} \ 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 2358ec054e..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": "OFusbWjj" -} \ 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 252b6dad9c..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": "OFusbWjj" -} \ 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 1962c54912..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": "OFusbWjj" -} \ 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 68ae2439d7..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": "OFusbWjj" -} \ 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 a3ab600254..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": "OFusbWjj" -} \ 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 9fdfe1559b..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": "OFLgwqp2" -} \ 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 820b021b9e..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": "OFLgwqp2" -} \ 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 3129330404..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": "OFLgwqp2" -} \ 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 eafa06d339..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": "OFLgwqp2" -} \ 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 8fbc885c07..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": "OFCZsqXg" -} \ 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 c5297f78ed..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": "OFCZsqXg" -} \ 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 be08cd5bb4..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": "OFCZsqXg" -} \ 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 2d764065a5..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": "OFCZsqXg" -} \ 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 0c80515aaa..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": "OFCZsqXg" -} \ 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 4b3f6b5a60..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": "OFCZsqXg" -} \ 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 f0513b112b..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": "OFCZsqXg" -} \ 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 c4175d3ead..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": "OFCZsqXg" -} \ 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 193bf2dee6..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": "OFCZsqXg" -} \ 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 3d8a1cbdd6..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": "OFCZsqXg" -} \ 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 34f98b70ae..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": "OFCZsqXg" -} \ 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 f47ea8a5d8..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": "OFCZsqXg" -} \ 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 00afa33b11..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": "OFCZsqXg" -} \ 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 fb92e57672..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": "OFTnWzBs" -} \ 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 e63ee3717d..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": "OFTnWzBs" -} \ 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 d1a9cb3a38..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": "OFTnWzBs" -} \ 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 368b104901..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": "OFTnWzBs" -} \ 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 215a01e8a7..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": "OFTnWzBs" -} \ 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 d6d269db66..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": "OFTnWzBs" -} \ 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 5ed8fbe15f..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": "OFTnWzBs" -} \ 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 fe506e1147..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": "OFTnWzBs" -} \ 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 f9267d07e8..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": "OFTnWzBs" -} \ 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 9c465b0d30..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": "OFTnWzBs" -} \ 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 94ac06f8bb..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": "OFTnWzBs" -} \ 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 d0344132b6..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": "OFTnWzBs" -} \ 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 53b640d939..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": "OFTnWzBs" -} \ 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 c817224955..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": "OFNvBIL0" -} \ 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 4f7d4ddf2f..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": "OFNvBIL0" -} \ 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 02756e4af3..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": "OFXnToSX" -} \ 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 0af9505f19..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": "OFXnToSX" -} \ 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 7afa71cd4c..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": "OFXnToSX" -} \ 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 058d4439ea..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": "OFXnToSX" -} \ 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 f90af90902..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": "OFXnToSX" -} \ 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 7580e9f4e9..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": "OFXnToSX" -} \ 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 1e307464b1..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": "OFXnToSX" -} \ 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 9134285053..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": "OFXnToSX" -} \ 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 154376069e..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": "OFXnToSX" -} \ 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 43ccb7898c..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": "OFXnToSX" -} \ 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 62f308a71b..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": "OFrOh600" -} \ 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 5d7f4818bd..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": "OFPkCJKE" -} \ 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 20bd0700ab..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": "OF66KUAN" -} \ 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 acd8558abe..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": "OFKbdiiJ" -} \ 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 Ultra PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @Ender-3 V4-all.json index b159f9141b..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": "OF02UAVh" -} \ 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 163ed96d8a..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": "OF02UAVh" -} \ 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 5612fad4d2..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": "OF02UAVh" -} \ 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 f975e2b6c4..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": "OF02UAVh" -} \ 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 9f4c2d9029..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": "OF02UAVh" -} \ 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 0c7bd485be..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": "OF02UAVh" -} \ 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 06b1fc8729..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": "OF02UAVh" -} \ 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 37702f76c0..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": "OF02UAVh" -} \ 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 7ff723f655..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": "OF02UAVh" -} \ 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 2d68106751..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": "OF02UAVh" -} \ 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 9bad5351c2..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": "OF02UAVh" -} \ 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 77f2c6a6bf..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": "OFTXduCM" -} \ 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 1afd5f1511..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": "OFUmS5z5" -} \ 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 08ab12e2c9..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": "OFHaYaB1" -} \ 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 PLA+ @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA+ @K2 Plus-all.json index d4f35de9be..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": "OFqINlYj" -} \ 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-LW @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-LW @K2 Plus-all.json index 2e4b7703a0..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": "OFi5RSve" -} \ 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 d5f4324da1..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": "OFhbolij" -} \ 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 bca728ae00..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": "OFDETOM6" -} \ 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 fa57453069..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": "OFIRUqWi" -} \ 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 Ender-3 V3 KE.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json index 1911d1f0d0..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": "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" + "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 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-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 9c10f97f05..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;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" + "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 Hi 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Hi 0.2 nozzle.json index 57dcd7e949..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", @@ -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 0372431a1e..613089a72c 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json @@ -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 f7bcd5884d..95d55f0a56 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json @@ -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 23e19a2a66..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", @@ -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 279daf531c..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": "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" + "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 4cde2d1f5e..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": [ - "Generic PLA HF @Creality" + "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 afaa516e7e..fdb83b032e 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json @@ -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 417c088cb7..8cb8e6f169 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json @@ -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 c3978a05eb..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 @@ -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 2ebe0a97c2..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 @@ -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 b59c1f54a4..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 @@ -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_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json index 992ae60a0f..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", @@ -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 012ad881ea..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": "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" + "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 95db217016..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 @@ -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 b78cf80658..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", @@ -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 175ff1da66..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", @@ -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 1cb9769e0e..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": "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" + "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 510e17ecf5..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", @@ -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 835c133338..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": "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" + "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 K1C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json index 5d8154c1f1..ac6fd03393 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json @@ -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 73328c69f4..58e7fa841f 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json @@ -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 2c59727abf..82edb57d82 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json @@ -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_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json index b3221b0dd5..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", @@ -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 6e80f1fbd4..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": "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" + "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 04cb946b94..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", @@ -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 c5986ae635..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": "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" + "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 c75b9d04f1..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", @@ -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 1c28315013..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", @@ -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 8eb0c83877..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", @@ -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 1281d5934d..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", @@ -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 Pro 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Pro 0.4 nozzle.json index e55e947fac..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 @@ -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 9ca340c779..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 @@ -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 4cadba6946..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 @@ -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 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 SE 0.4 nozzle.json index 4b0e4754fc..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", @@ -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 5b7ec27ea0..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": "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" + "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 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/fdm_creality_common.json b/resources/profiles/Creality/machine/fdm_creality_common.json index 1818e8b54b..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", 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 ffb363c807..f70517a0b1 100644 --- a/resources/profiles/Cubicon.json +++ b/resources/profiles/Cubicon.json @@ -1,6 +1,6 @@ { "name": "Cubicon", - "version": "02.04.00.04", + "version": "02.04.00.05", "force_update": "0", "description": "Cubicon configurations", "machine_model_list": [ 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 2844a543a4..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 @@ -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 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini 0.4 nozzle.json index 85bd7be03f..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 @@ -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 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json index 9c38452bf5..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 @@ -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/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 a8cef36ca5..aceecc557a 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.04.00.04", + "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 9aec5f168f..8fbc18b513 100644 --- a/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PC @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 PETG @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json index 685482342e..faba4cf7cb 100644 --- a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PETG @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 PLA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json index 0913752501..5f20b83ec5 100644 --- a/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA @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 PLA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json index 6e17b6e4c0..ccfc71ebb7 100644 --- a/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA-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 PVA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json index a70aeffe29..67a46e0129 100644 --- a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PVA @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/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 c7209bdf2b..6ef943d248 100755 --- a/resources/profiles/DeltaMaker.json +++ b/resources/profiles/DeltaMaker.json @@ -1,7 +1,7 @@ { "name": "DeltaMaker", "url": "", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "DeltaMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json index ecfe431ef6..653ec60927 100755 --- a/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json +++ b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json @@ -117,7 +117,6 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "1", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ 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 71f13d0dc8..3d804f6a1b 100644 --- a/resources/profiles/Dremel.json +++ b/resources/profiles/Dremel.json @@ -1,6 +1,6 @@ { "name": "Dremel", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Dremel configurations", "machine_model_list": [ diff --git a/resources/profiles/Dremel/machine/fdm_dremel_common.json b/resources/profiles/Dremel/machine/fdm_dremel_common.json index 0dae7eb9ea..d032e63646 100644 --- a/resources/profiles/Dremel/machine/fdm_dremel_common.json +++ b/resources/profiles/Dremel/machine/fdm_dremel_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/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 f85e19bb76..b2e2c21f14 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1,2546 +1,2546 @@ { - "name": "Elegoo", - "version": "02.04.00.07", - "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 95A @base", - "sub_path": "filament/BASE/Elegoo TPU 95A @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-CF @base", - "sub_path": "filament/BASE/Elegoo PAHT-CF @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 @base", - "sub_path": "filament/BASE/Elegoo PETG PRO @base.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 @base", - "sub_path": "filament/BASE/Elegoo PLA Matte @base.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 @base", - "sub_path": "filament/BASE/Elegoo PLA PRO @base.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 @base", - "sub_path": "filament/BASE/Elegoo PLA Silk @base.json" - }, - { - "name": "Elegoo PLA Silk @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json" - }, - { - "name": "Elegoo PLA+ @base", - "sub_path": "filament/BASE/Elegoo PLA+ @base.json" - }, - { - "name": "Elegoo PLA+ @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json" - }, - { - "name": "Elegoo Rapid PLA+ @base", - "sub_path": "filament/BASE/Elegoo Rapid PLA+ @base.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 @base", - "sub_path": "filament/BASE/Elegoo Rapid PETG @base.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 @base", - "sub_path": "filament/BASE/Elegoo PC-FR @base.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 @base", - "sub_path": "filament/BASE/Elegoo PLA Basic @base.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 @base", - "sub_path": "filament/BASE/Elegoo PETG Translucent @base.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 @base", - "sub_path": "filament/BASE/Elegoo PLA-CF @base.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 @base", - "sub_path": "filament/BASE/Elegoo PLA Galaxy @base.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 @base", - "sub_path": "filament/BASE/Elegoo PLA Marble @base.json" - }, - { - "name": "Elegoo PLA Marble @ECC", - "sub_path": "filament/ECC/Elegoo PLA Marble @ECC.json" - }, - { - "name": "Elegoo PLA Sparkle @base", - "sub_path": "filament/BASE/Elegoo PLA Sparkle @base.json" - }, - { - "name": "Elegoo PLA Sparkle @ECC", - "sub_path": "filament/ECC/Elegoo PLA Sparkle @ECC.json" - }, - { - "name": "Elegoo PLA Wood @base", - "sub_path": "filament/BASE/Elegoo PLA Wood @base.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 @base", - "sub_path": "filament/BASE/Elegoo PETG-CF @base.json" - }, - { - "name": "Elegoo PETG-CF @ECC", - "sub_path": "filament/ECC/Elegoo PETG-CF @ECC.json" - }, - { - "name": "Elegoo PETG-GF @base", - "sub_path": "filament/BASE/Elegoo PETG-GF @base.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 @base", - "sub_path": "filament/BASE/Elegoo Rapid TPU 95A @base.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 @base", - "sub_path": "filament/BASE/Elegoo ASA-CF @base.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 @base", - "sub_path": "filament/BASE/Elegoo PET-CF @base.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 @base", - "sub_path": "filament/BASE/Elegoo PETG HF @base.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 @base", - "sub_path": "filament/BASE/Elegoo PLA Glow @base.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 @base", - "sub_path": "filament/BASE/Elegoo PLA Translucent2 @base.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/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 488ba18337..1ee1f88ed8 100644 --- a/resources/profiles/Eryone.json +++ b/resources/profiles/Eryone.json @@ -1,6 +1,6 @@ { "name": "Eryone", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "Eryone configurations", "machine_model_list": [ 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/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 1e0c76d458..36d0129015 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,6 +1,6 @@ { "name": "FLSun", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "FLSun configurations", "machine_model_list": [ @@ -244,26 +244,10 @@ "name": "Generic PLA @FLSun S1", "sub_path": "filament/Generic PLA @FLSun S1.json" }, - { - "name": "Generic PLA High Speed @FLSun S1", - "sub_path": "filament/Generic PLA High Speed @FLSun S1.json" - }, - { - "name": "Generic PLA Silk @FLSun S1", - "sub_path": "filament/Generic PLA Silk @FLSun S1.json" - }, { "name": "Generic PLA @FLSun T1", "sub_path": "filament/Generic PLA @FLSun T1.json" }, - { - "name": "Generic PLA High Speed @FLSun T1", - "sub_path": "filament/Generic PLA High Speed @FLSun T1.json" - }, - { - "name": "Generic PLA Silk @FLSun T1", - "sub_path": "filament/Generic PLA Silk @FLSun T1.json" - }, { "name": "Generic TPU @FLSun S1", "sub_path": "filament/Generic TPU @FLSun S1.json" @@ -271,6 +255,22 @@ { "name": "Generic TPU @FLSun T1", "sub_path": "filament/Generic TPU @FLSun T1.json" + }, + { + "name": "Generic PLA High Speed @FLSun S1", + "sub_path": "filament/Generic PLA High Speed @FLSun S1.json" + }, + { + "name": "Generic PLA High Speed @FLSun T1", + "sub_path": "filament/Generic PLA High Speed @FLSun T1.json" + }, + { + "name": "Generic PLA Silk @FLSun S1", + "sub_path": "filament/Generic PLA Silk @FLSun S1.json" + }, + { + "name": "Generic PLA Silk @FLSun T1", + "sub_path": "filament/Generic PLA Silk @FLSun T1.json" } ], "machine_list": [ 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 f348a4f329..5bccaf9dfb 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.04.00.06", + "version": "02.04.00.08", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ @@ -439,22 +439,6 @@ "name": "0.14mm Standard @FF AD5X 0.25 nozzle", "sub_path": "process/0.14mm Standard @FF AD5X 0.25 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.14mm Standard @Flashforge AD5M 0.25 Nozzle", "sub_path": "process/0.14mm Standard @Flashforge AD5M 0.25 Nozzle.json" @@ -527,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" @@ -573,26 +573,30 @@ "name": "Generic ASA @Flashforge", "sub_path": "filament/Generic ASA @Flashforge.json" }, - { - "name": "Generic PETG @Flashforge", - "sub_path": "filament/Generic PETG @Flashforge.json" - }, - { - "name": "Generic PETG-CF10 @Flashforge", - "sub_path": "filament/Generic PETG-CF10 @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 PLA", + "sub_path": "filament/Flashforge/Flashforge PLA @FF AD3.json" + }, { "name": "Generic HS PLA @Flashforge", "sub_path": "filament/Generic HS PLA @Flashforge.json" @@ -609,10 +613,6 @@ "name": "Generic PLA-Silk @Flashforge", "sub_path": "filament/Generic PLA-Silk @Flashforge.json" }, - { - "name": "Flashforge PLA", - "sub_path": "filament/Flashforge/Flashforge PLA @FF AD3.json" - }, { "name": "SUNLU PLA Marble @base", "sub_path": "filament/SUNLU/SUNLU PLA Marble @base.json" @@ -709,6 +709,10 @@ "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" @@ -729,10 +733,6 @@ "name": "Generic HIPS @Flashforge G3U 0.6 Nozzle", "sub_path": "filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json" }, - { - "name": "Generic ABS @Flashforge AD4", - "sub_path": "filament/Generic ABS @Flashforge AD4.json" - }, { "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", "sub_path": "filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json" @@ -745,41 +745,13 @@ "name": "Generic ASA @FF AD5M 0.25 Nozzle", "sub_path": "filament/Generic ASA @FF AD5M 0.25 Nozzle.json" }, - { - "name": "Generic ASA @Flashforge G3U 0.6 Nozzle", - "sub_path": "filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json" - }, { "name": "Generic ASA @Flashforge AD4", "sub_path": "filament/Generic ASA @Flashforge AD4.json" }, { - "name": "Generic PETG @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Generic PETG @FF AD5M 0.25 Nozzle.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": "Generic ASA @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json" }, { "name": "Flashforge HS PETG", @@ -905,10 +877,38 @@ "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" @@ -945,10 +945,6 @@ "name": "SUNLU PETG @FF AD5M 0.8 Nozzle", "sub_path": "filament/SUNLU/SUNLU PETG @FF AD5M 0.8 nozzle.json" }, - { - "name": "Generic HS PLA @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json" - }, { "name": "Flashforge HIPS @FF G4", "sub_path": "filament/Flashforge HIPS @FF G4.json" @@ -1049,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": "Generic PLA @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Generic PLA @FF AD5M 0.25 Nozzle.json" - }, - { - "name": "Generic PLA @Flashforge G3U", - "sub_path": "filament/Generic PLA @Flashforge G3U.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": "Flashforge HS PLA", "sub_path": "filament/Flashforge HS PLA.json" @@ -1233,10 +1201,42 @@ "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": "Generic PLA @Flashforge G3U", + "sub_path": "filament/Generic PLA @Flashforge G3U.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" @@ -1297,10 +1297,6 @@ "name": "Generic PLA-CF10 @Flashforge AD4", "sub_path": "filament/Generic PLA-CF10 @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": "Flashforge PLA Silk", "sub_path": "filament/Flashforge PLA Silk.json" @@ -1325,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" @@ -1709,102 +1709,6 @@ "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 G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4 0.6 nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4 0.6 nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4 0.8 HF nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4P 0.6 nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4P 0.8 HF nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4 0.6 nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4 0.8 HF nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4P 0.6 nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4P 0.8 HF nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4 0.6 nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4 0.8 HF nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4P 0.6 nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json" - }, - { - "name": "Flashforge TPU 65D @FF G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge TPU 65D @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge TPU 95A @FF G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge TPU 95A @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG-CF @FF G4 0.6 nozzle", - "sub_path": "filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG-CF @FF G4P 0.6 nozzle", - "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" @@ -2045,6 +1949,254 @@ "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" + }, + { + "name": "Flashforge HS PETG @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "Flashforge TPU 65D @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge TPU 65D @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge TPU 95A @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge TPU 95A @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG-CF @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG-CF @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PETG-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 HS PLA @FF G4 0.6 HF nozzle", "sub_path": "filament/Flashforge HS PLA @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" @@ -2601,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" @@ -2657,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" 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 c1d48bf1ff..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 @@ -15,9 +15,6 @@ "during_print_exhaust_fan_speed": [ "40" ], - "filament_load_time": [ - "29" - ], "filament_max_volumetric_speed": [ "12" ], @@ -33,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/FusRock NexPA-CF25.json b/resources/profiles/Flashforge/filament/FusRock/FusRock NexPA-CF25.json index 249060ab5c..f228bdd769 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock NexPA-CF25.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock NexPA-CF25.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "FusRock NexPA-CF25", - "inherits": "Generic PETG @Flashforge", "renamed_from": "FusRock Generic NexPA-CF25", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "sVoga8454H2oKuKI", "filament_id": "OFjt8dDO", @@ -95,9 +95,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -170,9 +167,6 @@ "filament_type": [ "PA-CF" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json index d47b7f865c..3666353817 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "FusRock PAHT-CF", - "inherits": "Generic PETG @Flashforge", "renamed_from": "FusRock Generic PAHT-CF", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "OGhhxVvR4O4VYuCK", "filament_id": "OFKW5hEW", @@ -96,9 +96,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -171,9 +168,6 @@ "filament_type": [ "PAHT-CF" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json index 4dee20a476..5de8912224 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "FusRock PET-CF", - "inherits": "Generic PETG @Flashforge", "renamed_from": "FusRock Generic PET-CF", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "nGtsrswmS2Fj4Uev", "filament_id": "OFDu1qE7", @@ -96,9 +96,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -171,9 +168,6 @@ "filament_type": [ "PET-CF" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json index 895d10aa12..e6f32aace1 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "FusRock S-Multi", - "inherits": "Generic PETG @Flashforge", "renamed_from": "FusRock Generic S-Multi", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "zAqGdmTsz4Z0qbaa", "filament_id": "OF0AquDh", @@ -95,9 +95,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -170,9 +167,6 @@ "filament_type": [ "PA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json index 792b12c949..ebe48dc6dd 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "FusRock S-PAHT", - "inherits": "Generic PETG @Flashforge", "renamed_from": "FusRock Generic S-PAHT", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "mBQzgKKsV8Qo3gAr", "filament_id": "OFCn83wF", @@ -95,9 +95,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -170,9 +167,6 @@ "filament_type": [ "PAHT" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json index 8422875984..a429c5be48 100644 --- a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic ABS @Flashforge G3U", - "inherits": "Generic ABS @Flashforge", "renamed_from": "Flashforge Generic ABS @G3U;Flashforge Generic ABS G3U", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "dxCNYDhcaJqAfDpR", "filament_id": "OFY9muEs", @@ -96,9 +96,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -171,9 +168,6 @@ "filament_type": [ "ABS" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json index 42f9b00a60..07aae7b634 100644 --- a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json @@ -10,9 +10,6 @@ "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.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U.json index 20a3e61da2..cfb156dd52 100644 --- a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic ASA @Flashforge G3U", - "inherits": "Generic ABS @Flashforge", "renamed_from": "Flashforge Generic ASA @G3U;Flashforge Generic ASA G3U", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "N1vm5hhMHdSNvUwk", "filament_id": "OFLPAxz3", @@ -96,9 +96,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -171,9 +168,6 @@ "filament_type": [ "ASA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json index b80ad322c3..cc73a2a479 100644 --- a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic ASA @Flashforge", - "inherits": "fdm_filament_asa", "renamed_from": "Flashforge Generic ASA", + "inherits": "fdm_filament_asa", "from": "system", "setting_id": "tzs0HcyEZow99A2J", "filament_id": "OFLPAxz3", @@ -10,9 +10,6 @@ "additional_cooling_fan_speed": [ "0" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": "0", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json index 3012161923..54badf52ae 100644 --- a/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json +++ b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic HIPS @Flashforge", - "inherits": "Generic ABS @Flashforge", "renamed_from": "Flashforge Generic HIPS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "zMQa7Squ3p3jKYwB", "filament_id": "OFsFon5l", @@ -96,9 +96,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -171,9 +168,6 @@ "filament_type": [ "HIPS" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json b/resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json index b6b4f26221..7fabff8e93 100644 --- a/resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json +++ b/resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json @@ -1,15 +1,12 @@ { "type": "filament", "name": "Generic HS PLA @Flashforge", - "inherits": "fdm_filament_pla", "renamed_from": "Flashforge Generic HS PLA", + "inherits": "fdm_filament_pla", "from": "system", "setting_id": "GTqLzBcGP2Rmmc9X", "filament_id": "OFvxghTE", "instantiation": "true", - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": [ "0" ], @@ -90,9 +87,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -165,9 +159,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json index 119b9e3349..9c37ea85a7 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PETG @Flashforge G3U", - "inherits": "Generic PETG @Flashforge", "renamed_from": "Flashforge Generic PETG @G3U;Flashforge Generic PETG G3U", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "umrO2bL7ihLROx0B", "filament_id": "OFYPdQJh", @@ -95,9 +95,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -170,9 +167,6 @@ "filament_type": [ "PETG" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json index d298fa5b12..2464363ce9 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PETG-CF @Flashforge G3U", - "inherits": "Generic PETG @Flashforge", "renamed_from": "Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG-CF G3U", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "XXoNSerT8aqG5dlL", "filament_id": "OFoYSJKi", @@ -95,9 +95,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -170,9 +167,6 @@ "filament_type": [ "PETG-CF" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], 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 bcf3f0926c..b310bf8d5b 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json @@ -9,9 +9,6 @@ "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 index ca45c4fe25..8908c41081 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PETG-CF10 @Flashforge", - "inherits": "fdm_filament_pet", "renamed_from": "Flashforge Generic PETG-CF10", + "inherits": "fdm_filament_pet", "from": "system", "setting_id": "0oCfWHsyqpBCbD62", "filament_id": "OFO5djrM", @@ -10,9 +10,6 @@ "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 PLA @Flashforge G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json index b0c0ce9597..20f0ba7403 100644 --- 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 @@ -3,7 +3,8 @@ "name": "Generic PLA @Flashforge G3U 0.6 Nozzle", "inherits": "Generic PLA @Flashforge", "from": "system", - "instantiation": "false", + "setting_id": "YSbpdZWmgTvjJmZZ", + "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" ], 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 index 49aa73c7eb..6a9af67be1 100644 --- 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 @@ -3,7 +3,8 @@ "name": "Generic PLA @Flashforge G3U 0.8 Nozzle", "inherits": "Generic PLA @Flashforge", "from": "system", - "instantiation": "false", + "setting_id": "CsPPXQWXhwz5fUww", + "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json index 48b66814ca..630c4c723b 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA @Flashforge G3U", - "inherits": "Generic PLA @Flashforge", "renamed_from": "Flashforge Generic PLA @G3U;Flashforge Generic PLA G3U", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "8ZlELnZzCa3UsztB", "filament_id": "OFDSrzZ8", @@ -24,8 +24,6 @@ ], "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": "", @@ -97,9 +95,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -172,9 +167,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], 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 85741e007d..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 @@ -6,9 +6,6 @@ "setting_id": "B4EWBUa9G36lZUd7", "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-CF @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U.json index 7f79c0753e..595ca9e63d 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA-CF @Flashforge G3U", - "inherits": "Generic PLA @Flashforge", "renamed_from": "Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA-CF G3U", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "J2zu45Q3zu7Tor3W", "filament_id": "OFWbdGsC", @@ -95,9 +95,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -170,9 +167,6 @@ "filament_type": [ "PLA-CF" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], 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 c03c616a0e..d1c860e830 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json @@ -9,9 +9,6 @@ "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 index 8b2e1efb14..06307637e7 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA-CF10 @Flashforge", - "inherits": "fdm_filament_pla", "renamed_from": "Flashforge Generic PLA-CF10", + "inherits": "fdm_filament_pla", "from": "system", "setting_id": "cckB4CXjFwZKC0l0", "filament_id": "OFX2zcrM", @@ -10,9 +10,6 @@ "additional_cooling_fan_speed": [ "100" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": [ "0" ], @@ -90,9 +87,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -165,9 +159,6 @@ "filament_type": [ "PLA-CF" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json b/resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json index 6c76493158..92c2a5e54a 100644 --- a/resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json +++ b/resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PVA @Flashforge", - "inherits": "Generic PLA @Flashforge", "renamed_from": "Flashforge Generic PVA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "yiCXuEb87vNMhytL", "filament_id": "OFDvXujf", @@ -97,9 +97,6 @@ "filament_is_support": [ "1" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -172,9 +169,6 @@ "filament_type": [ "PVA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "35" ], diff --git a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json index 610777d347..4fb3c96b08 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json @@ -9,9 +9,6 @@ "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 index 45a6b2e6f9..5ebb19eb68 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge.json +++ b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic TPU @Flashforge", - "inherits": "fdm_filament_tpu", "renamed_from": "Flashforge Generic TPU", + "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "luh9xN4STlD0sTyt", "filament_id": "OFgbpcy9", @@ -10,9 +10,6 @@ "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/Polymaker/Polymaker CoPA.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker CoPA.json index 533af6688b..77a59b4bbf 100644 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker CoPA.json +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker CoPA.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Polymaker CoPA", - "inherits": "Generic PLA @Flashforge", "renamed_from": "Polymaker Generic CoPA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "5Dt1APJ8qd5pzmzK", "filament_id": "OFQyyO0l", @@ -95,9 +95,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -170,9 +167,6 @@ "filament_type": [ "PA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "30" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json index c7eb2fb58c..91e636a3d4 100644 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Polymaker S1", - "inherits": "Generic PLA @Flashforge", "renamed_from": "Polymaker Generic S1", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "auChFegT1xViXxGe", "filament_id": "OFaDsTE0", @@ -95,9 +95,6 @@ "filament_is_support": [ "1" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -170,9 +167,6 @@ "filament_type": [ "PA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "30" ], 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 50a7d88ff5..6d03066d38 100644 --- a/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json @@ -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 9dcd0f86dd..682594f99a 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json @@ -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 a88cbb9e80..ff7251562e 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json @@ -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 47ac21c2ec..806e5cda1f 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json @@ -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 42cfac7967..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": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge" + "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 476d036a95..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": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge" + "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 b69dc12126..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": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge" + "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 22e9963a24..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", 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 index 54be573cf7..c3cb7aa570 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.25 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.25 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.12mm Standard @FF C5 0.25 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.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.4 nozzle.json index 5ffbd6a7fc..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 @@ -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 ce7727209f..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 @@ -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 e747961d1e..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 @@ -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 index 3eea1c58cf..911c09f29c 100644 --- 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 @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.12mm Standard @FF C5 0.25 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.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.4 nozzle.json index 620fb3dec3..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 @@ -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 43c07989c6..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 @@ -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 71d101c355..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 @@ -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 4ef02628d1..c33735a4bb 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json @@ -8,5 +8,5 @@ "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 7ef9c172c0..358cd4aaee 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5.json @@ -8,5 +8,5 @@ "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 3 Ultra 0.4 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json index dcde8504e9..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 @@ -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.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json index a830f2db98..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": "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-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" + "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 b7a7d5f6ba..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": [ - "Generic PLA @Flashforge" + "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 f13d0aa125..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": [ - "Generic PLA @Flashforge 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 22148f62db..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": [ - "Generic PLA @Flashforge" + "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 4eb27093aa..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": [ - "Generic PLA @Flashforge 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 56a63623fd..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": [ - "Generic PLA @Flashforge 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 64853e95fa..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": [ - "Generic PLA @Flashforge 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 4fbf0d684e..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": [ - "Generic PLA @Flashforge" + "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 9c0b57c05c..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": [ - "Generic PLA @Flashforge 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 58daabb444..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": [ - "Generic PLA @Flashforge" + "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 49756682ba..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": [ - "Generic PLA @Flashforge 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 8c1a60781b..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": [ - "Generic PLA @Flashforge 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 1140b773e3..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": [ - "Generic PLA @Flashforge 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 4bcdc78d4a..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": "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" + "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 0cd89727d1..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": "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" + "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_flashforge_common.json b/resources/profiles/Flashforge/machine/fdm_flashforge_common.json index 7e2e700885..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", diff --git a/resources/profiles/Flashforge/machine/fdm_klipper_common.json b/resources/profiles/Flashforge/machine/fdm_klipper_common.json index 3126f70c76..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", 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.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.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 5be5a8d4a3..8c09e115e2 100644 --- a/resources/profiles/FlyingBear.json +++ b/resources/profiles/FlyingBear.json @@ -1,6 +1,6 @@ { "name": "FlyingBear", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "1", "description": "FlyingBear configurations", "machine_model_list": [ 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 795743dc1f..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": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear" + "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 53ca3accb9..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": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear" + "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 d9170b7fec..f70809115f 100644 --- a/resources/profiles/FlyingBear/machine/fdm_klipper_common.json +++ b/resources/profiles/FlyingBear/machine/fdm_klipper_common.json @@ -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 9b3574e7de..c6309bb273 100644 --- a/resources/profiles/FlyingBear/machine/fdm_machine_common.json +++ b/resources/profiles/FlyingBear/machine/fdm_machine_common.json @@ -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 a20dc8992e..24f68067e7 100644 --- a/resources/profiles/Folgertech.json +++ b/resources/profiles/Folgertech.json @@ -1,6 +1,6 @@ { "name": "Folgertech", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Folgertech configurations", "machine_model_list": [ 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 249c3e9906..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.04", + "version": "02.04.00.05", "force_update": "1", "description": "Ginger configuration", "machine_model_list": [ diff --git a/resources/profiles/Ginger Additive/filament/fdm_filament_common.json b/resources/profiles/Ginger Additive/filament/fdm_filament_common.json index 71e447d01e..d6603a932e 100644 --- a/resources/profiles/Ginger Additive/filament/fdm_filament_common.json +++ b/resources/profiles/Ginger Additive/filament/fdm_filament_common.json @@ -93,9 +93,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -165,9 +162,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], 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 06d0629ffc..78c54e0b4d 100644 --- a/resources/profiles/InfiMech.json +++ b/resources/profiles/InfiMech.json @@ -1,6 +1,6 @@ { "name": "InfiMech", - "version": "02.04.00.03", + "version": "02.04.00.06", "force_update": "1", "description": "InfiMech configurations", "machine_model_list": [ @@ -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/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 8b8fd4e586..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": "Generic ABS @InfiMech;Generic PA-CF @InfiMech;Generic PC @InfiMech;Generic PETG @InfiMech;Generic PLA @InfiMech;Generic TPU @InfiMech" + "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 a95fea09c0..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": [ - "Generic PLA @InfiMech" - ], - "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 35501555bb..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": [ - "Generic PLA @InfiMech" - ], - "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/fdm_klipper_common.json b/resources/profiles/InfiMech/machine/fdm_klipper_common.json index bbcd27a966..457c3b1d9d 100644 --- a/resources/profiles/InfiMech/machine/fdm_klipper_common.json +++ b/resources/profiles/InfiMech/machine/fdm_klipper_common.json @@ -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 c329e930cb..c6847d7db3 100644 --- a/resources/profiles/InfiMech/machine/fdm_machine_common.json +++ b/resources/profiles/InfiMech/machine/fdm_machine_common.json @@ -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 99a7049fa5..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.03", + "version": "02.04.00.05", "force_update": "0", "description": "LH 3D Printer Configuration", "machine_model_list": [ 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 dbf3cc3277..b4d6c3a1fb 100644 --- a/resources/profiles/LONGER.json +++ b/resources/profiles/LONGER.json @@ -1,6 +1,6 @@ { "name": "LONGER", - "version": "02.04.00.02", + "version": "02.04.00.04", "force_update": "0", "description": "LONGER configurations", "machine_model_list": [ 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 1d8e31dc93..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.02", + "version": "02.04.00.04", "force_update": "0", "description": "Lulzbot configurations", "machine_model_list": [ 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 cfb4c10ac2..08e5774547 100644 --- a/resources/profiles/MagicMaker.json +++ b/resources/profiles/MagicMaker.json @@ -1,6 +1,6 @@ { "name": "MagicMaker", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "MagicMaker configurations", "machine_model_list": [ 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/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 866b720b78..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.03", + "version": "02.04.00.05", "force_update": "0", "description": "Orca Arena configuration files", "machine_model_list": [ diff --git a/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json b/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json index e375904da2..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": "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;" + "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 c7b203d5f1..3ce35d2623 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -1,6 +1,6 @@ { "name": "OrcaFilamentLibrary", - "version": "02.04.00.05", + "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" @@ -588,10 +336,6 @@ "name": "Generic PE-CF @base", "sub_path": "filament/Generic PE-CF @base.json" }, - { - "name": "Generic PE-CF @System", - "sub_path": "filament/Generic PE-CF @System.json" - }, { "name": "AliZ PETG @base", "sub_path": "filament/AliZ/AliZ PETG @base.json" @@ -672,6 +416,10 @@ "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" @@ -680,22 +428,18 @@ "name": "Generic PETG HF @base", "sub_path": "filament/Generic PETG HF @base.json" }, - { - "name": "Generic PETG HF @System", - "sub_path": "filament/Generic PETG HF @System.json" - }, { "name": "Generic PETG-CF @base", "sub_path": "filament/Generic PETG-CF @base.json" }, - { - "name": "Generic PETG-CF @System", - "sub_path": "filament/Generic PETG-CF @System.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" @@ -868,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" @@ -880,14 +632,18 @@ "name": "Generic PLA Matte @base", "sub_path": "filament/Generic PLA Matte @base.json" }, - { - "name": "Generic PLA Matte @System", - "sub_path": "filament/Generic PLA Matte @System.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" @@ -1092,18 +848,10 @@ "name": "Generic PP-CF @base", "sub_path": "filament/Generic PP-CF @base.json" }, - { - "name": "Generic PP-CF @System", - "sub_path": "filament/Generic PP-CF @System.json" - }, { "name": "Generic PP-GF @base", "sub_path": "filament/Generic PP-GF @base.json" }, - { - "name": "Generic PP-GF @System", - "sub_path": "filament/Generic PP-GF @System.json" - }, { "name": "Bambu PPA-CF @base", "sub_path": "filament/Bambu/Bambu PPA-CF @base.json" @@ -1292,10 +1040,6 @@ "name": "Elegoo ASA-CF @base", "sub_path": "filament/Elegoo/Elegoo ASA-CF @base.json" }, - { - "name": "Elegoo ASA-CF @System", - "sub_path": "filament/Elegoo/Elegoo ASA-CF @System.json" - }, { "name": "Overture ASA @System", "sub_path": "filament/Overture/Overture ASA @System.json" @@ -1388,14 +1132,14 @@ "name": "Elegoo PC-FR @base", "sub_path": "filament/Elegoo/Elegoo PC-FR @base.json" }, - { - "name": "Elegoo PC-FR @System", - "sub_path": "filament/Elegoo/Elegoo PC-FR @System.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" @@ -1448,10 +1192,6 @@ "name": "Elegoo PET-CF @base", "sub_path": "filament/Elegoo/Elegoo PET-CF @base.json" }, - { - "name": "Elegoo PET-CF @System", - "sub_path": "filament/Elegoo/Elegoo PET-CF @System.json" - }, { "name": "Elegoo PETG @System", "sub_path": "filament/Elegoo/Elegoo PETG @System.json" @@ -1460,50 +1200,26 @@ "name": "Elegoo PETG HF @base", "sub_path": "filament/Elegoo/Elegoo PETG HF @base.json" }, - { - "name": "Elegoo PETG HF @System", - "sub_path": "filament/Elegoo/Elegoo PETG HF @System.json" - }, { "name": "Elegoo PETG PRO @base", "sub_path": "filament/Elegoo/Elegoo PETG PRO @base.json" }, - { - "name": "Elegoo PETG PRO @System", - "sub_path": "filament/Elegoo/Elegoo PETG PRO @System.json" - }, { "name": "Elegoo PETG Translucent @base", "sub_path": "filament/Elegoo/Elegoo PETG Translucent @base.json" }, - { - "name": "Elegoo PETG Translucent @System", - "sub_path": "filament/Elegoo/Elegoo PETG Translucent @System.json" - }, { "name": "Elegoo PETG-CF @base", "sub_path": "filament/Elegoo/Elegoo PETG-CF @base.json" }, - { - "name": "Elegoo PETG-CF @System", - "sub_path": "filament/Elegoo/Elegoo PETG-CF @System.json" - }, { "name": "Elegoo PETG-GF @base", "sub_path": "filament/Elegoo/Elegoo PETG-GF @base.json" }, - { - "name": "Elegoo PETG-GF @System", - "sub_path": "filament/Elegoo/Elegoo PETG-GF @System.json" - }, { "name": "Elegoo Rapid PETG @base", "sub_path": "filament/Elegoo/Elegoo Rapid PETG @base.json" }, - { - "name": "Elegoo Rapid PETG @System", - "sub_path": "filament/Elegoo/Elegoo Rapid PETG @System.json" - }, { "name": "FDplast PETG @System", "sub_path": "filament/FDplast/FDplast PETG @System.json" @@ -1528,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" @@ -1656,106 +1452,54 @@ "name": "Elegoo PLA Basic @base", "sub_path": "filament/Elegoo/Elegoo PLA Basic @base.json" }, - { - "name": "Elegoo PLA Basic @System", - "sub_path": "filament/Elegoo/Elegoo PLA Basic @System.json" - }, { "name": "Elegoo PLA Galaxy @base", "sub_path": "filament/Elegoo/Elegoo PLA Galaxy @base.json" }, - { - "name": "Elegoo PLA Galaxy @System", - "sub_path": "filament/Elegoo/Elegoo PLA Galaxy @System.json" - }, { "name": "Elegoo PLA Glow @base", "sub_path": "filament/Elegoo/Elegoo PLA Glow @base.json" }, - { - "name": "Elegoo PLA Glow @System", - "sub_path": "filament/Elegoo/Elegoo PLA Glow @System.json" - }, { "name": "Elegoo PLA Marble @base", "sub_path": "filament/Elegoo/Elegoo PLA Marble @base.json" }, - { - "name": "Elegoo PLA Marble @System", - "sub_path": "filament/Elegoo/Elegoo PLA Marble @System.json" - }, { "name": "Elegoo PLA Matte @base", "sub_path": "filament/Elegoo/Elegoo PLA Matte @base.json" }, - { - "name": "Elegoo PLA Matte @System", - "sub_path": "filament/Elegoo/Elegoo PLA Matte @System.json" - }, { "name": "Elegoo PLA PRO @base", "sub_path": "filament/Elegoo/Elegoo PLA PRO @base.json" }, - { - "name": "Elegoo PLA PRO @System", - "sub_path": "filament/Elegoo/Elegoo PLA PRO @System.json" - }, { "name": "Elegoo PLA Silk @base", "sub_path": "filament/Elegoo/Elegoo PLA Silk @base.json" }, - { - "name": "Elegoo PLA Silk @System", - "sub_path": "filament/Elegoo/Elegoo PLA Silk @System.json" - }, { "name": "Elegoo PLA Sparkle @base", "sub_path": "filament/Elegoo/Elegoo PLA Sparkle @base.json" }, - { - "name": "Elegoo PLA Sparkle @System", - "sub_path": "filament/Elegoo/Elegoo PLA Sparkle @System.json" - }, { "name": "Elegoo PLA Translucent2 @base", "sub_path": "filament/Elegoo/Elegoo PLA Translucent2 @base.json" }, - { - "name": "Elegoo PLA Translucent2 @System", - "sub_path": "filament/Elegoo/Elegoo PLA Translucent2 @System.json" - }, { "name": "Elegoo PLA Wood @base", "sub_path": "filament/Elegoo/Elegoo PLA Wood @base.json" }, - { - "name": "Elegoo PLA Wood @System", - "sub_path": "filament/Elegoo/Elegoo PLA Wood @System.json" - }, { "name": "Elegoo PLA+ @base", "sub_path": "filament/Elegoo/Elegoo PLA+ @base.json" }, - { - "name": "Elegoo PLA+ @System", - "sub_path": "filament/Elegoo/Elegoo PLA+ @System.json" - }, { "name": "Elegoo PLA-CF @base", "sub_path": "filament/Elegoo/Elegoo PLA-CF @base.json" }, - { - "name": "Elegoo PLA-CF @System", - "sub_path": "filament/Elegoo/Elegoo PLA-CF @System.json" - }, { "name": "Elegoo Rapid PLA+ @base", "sub_path": "filament/Elegoo/Elegoo Rapid PLA+ @base.json" }, - { - "name": "Elegoo Rapid PLA+ @System", - "sub_path": "filament/Elegoo/Elegoo Rapid PLA+ @System.json" - }, { "name": "FDplast PLA @System", "sub_path": "filament/FDplast/FDplast PLA @System.json" @@ -1768,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" @@ -1876,10 +1840,6 @@ "name": "PolyLite Dual PLA @base", "sub_path": "filament/Polymaker/PolyLite Dual PLA @base.json" }, - { - "name": "PolyLite Dual PLA @System", - "sub_path": "filament/Polymaker/PolyLite Dual PLA @System.json" - }, { "name": "PolyLite PLA @System", "sub_path": "filament/Polymaker/PolyLite PLA @System.json" @@ -1976,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" @@ -2024,10 +1992,6 @@ "name": "Elegoo Rapid TPU 95A @base", "sub_path": "filament/Elegoo/Elegoo Rapid TPU 95A @base.json" }, - { - "name": "Elegoo Rapid TPU 95A @System", - "sub_path": "filament/Elegoo/Elegoo Rapid TPU 95A @System.json" - }, { "name": "Elegoo TPU 95A @System", "sub_path": "filament/Elegoo/Elegoo TPU 95A @System.json" @@ -2040,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" @@ -2048,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/COEX/COEX ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json index c234e34567..36849ed63d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json @@ -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 7e965bc256..833356e37a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json @@ -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 1bc1230eae..207c17790d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json @@ -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 c023668f4a..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 @@ -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 15de223500..504c6dde2b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json @@ -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 9fce322405..f15437f295 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json @@ -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 9f22293450..39afcd6759 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json @@ -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 a0b2f76888..cc9b7f8e54 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json @@ -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 a9a5e83c0b..b2cc99d390 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json @@ -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 f06642c432..d5c9a7a87d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json @@ -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 5c715dea33..35e3c75bc3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json @@ -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 81d5d81f1c..b6f622635f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json @@ -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 b2e0aab688..d1c1d2963f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json @@ -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 027ff45226..0338bb2929 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json @@ -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/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/Elegoo/filament/fdm_filament_paht.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA Classic @base.json similarity index 67% rename from resources/profiles/Elegoo/filament/fdm_filament_paht.json rename to resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA Classic @base.json index 058469ff71..8c3406ca66 100644 --- a/resources/profiles/Elegoo/filament/fdm_filament_paht.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA Classic @base.json @@ -1,91 +1,89 @@ { "type": "filament", - "name": "fdm_filament_paht", - "inherits": "fdm_filament_common", + "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" ], - "filament_type": [ - "PAHT" + "nozzle_temperature": [ + "210" ], - "filament_density": [ - "1.24" + "nozzle_temperature_initial_layer": [ + "210" ], - "filament_cost": [ - "0" + "nozzle_temperature_range_high": [ + "260" ], "cool_plate_temp": [ "35" ], - "eng_plate_temp": [ - "0" - ], - "textured_plate_temp": [ - "60" - ], "cool_plate_temp_initial_layer": [ "35" ], + "eng_plate_temp": [ + "55" + ], "eng_plate_temp_initial_layer": [ - "0" + "55" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp": [ + "55" ], "textured_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "overhang_fan_threshold": [ - "50%" + "55" ], "close_fan_the_first_x_layers": [ "1" ], - "nozzle_temperature": [ - "220" + "fan_cooling_layer_time": [ + "100" ], - "temperature_vitrification": [ - "45" + "fan_min_speed": [ + "60" ], - "nozzle_temperature_range_low": [ - "190" + "fan_max_speed": [ + "100" ], - "nozzle_temperature_range_high": [ - "240" + "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" ], - "additional_cooling_fan_speed": [ - "0" + "filament_retraction_length": [ + "1" ], - "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" + "nozzle_temperature_range_low": [ + "200" ] } diff --git a/resources/profiles/Peopoly.json b/resources/profiles/Peopoly.json index 2a73d251f1..9b95c24bb3 100644 --- a/resources/profiles/Peopoly.json +++ b/resources/profiles/Peopoly.json @@ -1,6 +1,6 @@ { "name": "Peopoly", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Peopoly configurations", "machine_model_list": [ diff --git a/resources/profiles/Peopoly/machine/fdm_klipper_common.json b/resources/profiles/Peopoly/machine/fdm_klipper_common.json index e9a5185767..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", 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 0c711816c1..f07568bb29 100644 --- a/resources/profiles/Phrozen.json +++ b/resources/profiles/Phrozen.json @@ -1,6 +1,6 @@ { "name": "Phrozen", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "Phrozen configurations", "machine_model_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 index d909765bad..c53abee956 100644 --- 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 @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA @Phrozen Arco 0.4 nozzle", - "inherits": "Generic PLA @System", "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", @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -180,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], 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 c34d188507..963b3b4727 100644 --- a/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json +++ b/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json @@ -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/_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 ecbbe179e7..723874f67d 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "02.04.00.04", + "version": "02.04.00.06", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ @@ -1448,34 +1448,10 @@ "name": "fdm_filament_tpu", "sub_path": "filament/fdm_filament_tpu.json" }, - { - "name": "Generic ABS @Prusa base", - "sub_path": "filament/Generic ABS @Prusa base.json" - }, - { - "name": "Generic ABS @Prusa", - "sub_path": "filament/Generic ABS @Prusa.json" - }, { "name": "Generic ABS @Prusa CORE One", "sub_path": "filament/Generic ABS @Prusa CORE One.json" }, - { - "name": "Generic ABS @Prusa MINIIS", - "sub_path": "filament/Generic ABS @Prusa MINIIS.json" - }, - { - "name": "Generic ABS @Prusa MINIIS 0.25", - "sub_path": "filament/Generic ABS @Prusa MINIIS 0.25.json" - }, - { - "name": "Generic ABS @Prusa MINIIS 0.6", - "sub_path": "filament/Generic ABS @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic ABS @Prusa MINIIS 0.8", - "sub_path": "filament/Generic ABS @Prusa MINIIS 0.8.json" - }, { "name": "Generic ABS @Prusa MK3.5", "sub_path": "filament/Generic ABS @Prusa MK3.5.json" @@ -1492,37 +1468,13 @@ "name": "Generic ABS @Prusa MK3.5 0.8", "sub_path": "filament/Generic ABS @Prusa MK3.5 0.8.json" }, - { - "name": "Generic ABS @Prusa MK4", - "sub_path": "filament/Generic ABS @Prusa MK4.json" - }, { "name": "Generic ABS @Prusa MK4S", "sub_path": "filament/Generic ABS @Prusa MK4S.json" }, { - "name": "Generic ABS @Prusa XL", - "sub_path": "filament/Generic ABS @Prusa XL.json" - }, - { - "name": "Generic ABS @Prusa XL 5T", - "sub_path": "filament/Generic ABS @Prusa XL 5T.json" - }, - { - "name": "Generic ABS HF @Prusa base", - "sub_path": "filament/Generic ABS HF @Prusa base.json" - }, - { - "name": "Generic ABS HF @Prusa MINIIS", - "sub_path": "filament/Generic ABS HF @Prusa MINIIS.json" - }, - { - "name": "Generic ABS HF @Prusa MINIIS 0.6", - "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic ABS HF @Prusa MINIIS 0.8", - "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.8.json" + "name": "Generic ABS @Prusa base", + "sub_path": "filament/Generic ABS @Prusa base.json" }, { "name": "Generic ABS HF @Prusa MK3.5", @@ -1536,6 +1488,10 @@ "name": "Generic ABS HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic ABS HF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic ABS HF @Prusa base", + "sub_path": "filament/Generic ABS HF @Prusa base.json" + }, { "name": "Generic ASA @Prusa", "sub_path": "filament/Generic ASA @Prusa.json" @@ -1584,22 +1540,6 @@ "name": "Generic ASA @Prusa MK4S", "sub_path": "filament/Generic ASA @Prusa MK4S.json" }, - { - "name": "Generic ASA HF @Prusa base", - "sub_path": "filament/Generic ASA HF @Prusa base.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": "Generic ASA HF @Prusa MK3.5", "sub_path": "filament/Generic ASA HF @Prusa MK3.5.json" @@ -1612,6 +1552,10 @@ "name": "Generic ASA HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic ASA HF @Prusa 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", "sub_path": "filament/Prusament ASA @CORE One.json" @@ -1636,30 +1580,6 @@ "name": "Generic TPU @Prusa CORE One", "sub_path": "filament/Generic TPU @Prusa CORE One.json" }, - { - "name": "Generic PA @Prusa base", - "sub_path": "filament/Generic PA @Prusa base.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 @Prusa MK3.5", "sub_path": "filament/Generic PA @Prusa MK3.5.json" @@ -1677,28 +1597,8 @@ "sub_path": "filament/Generic PA @Prusa MK3.5 0.8.json" }, { - "name": "Generic PA-CF @Prusa base", - "sub_path": "filament/Generic PA-CF @Prusa base.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": "Generic PA @Prusa base", + "sub_path": "filament/Generic PA @Prusa base.json" }, { "name": "Generic PA-CF @Prusa MK3.5", @@ -1716,6 +1616,10 @@ "name": "Generic PA-CF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PA-CF @Prusa 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", "sub_path": "filament/Prusament PA-CF @CORE One.json" @@ -1764,22 +1668,6 @@ "name": "Generic PC @Prusa MK3.5 0.8", "sub_path": "filament/Generic PC @Prusa MK3.5 0.8.json" }, - { - "name": "Generic PC HF @Prusa base", - "sub_path": "filament/Generic PC HF @Prusa base.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": "Generic PC HF @Prusa MK3.5", "sub_path": "filament/Generic PC HF @Prusa MK3.5.json" @@ -1792,6 +1680,10 @@ "name": "Generic PC HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PC HF @Prusa 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", "sub_path": "filament/Prusament PC Blend @CORE One.json" @@ -1816,34 +1708,10 @@ "name": "Prusament PC-CF @XL 5T", "sub_path": "filament/Prusament PC-CF @XL 5T.json" }, - { - "name": "Generic PETG @Prusa base", - "sub_path": "filament/Generic PETG @Prusa base.json" - }, - { - "name": "Generic PETG @Prusa", - "sub_path": "filament/Generic PETG @Prusa.json" - }, { "name": "Generic PETG @Prusa CORE One", "sub_path": "filament/Generic PETG @Prusa CORE One.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 MK3.5", "sub_path": "filament/Generic PETG @Prusa MK3.5.json" @@ -1860,37 +1728,13 @@ "name": "Generic PETG @Prusa MK3.5 0.8", "sub_path": "filament/Generic PETG @Prusa MK3.5 0.8.json" }, - { - "name": "Generic PETG @Prusa MK4", - "sub_path": "filament/Generic PETG @Prusa MK4.json" - }, { "name": "Generic PETG @Prusa MK4S", "sub_path": "filament/Generic PETG @Prusa MK4S.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 base", - "sub_path": "filament/Generic PETG HF @Prusa base.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": "Generic PETG @Prusa base", + "sub_path": "filament/Generic PETG @Prusa base.json" }, { "name": "Generic PETG HF @Prusa MK3.5", @@ -1904,6 +1748,10 @@ "name": "Generic PETG HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PETG HF @Prusa 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" @@ -1912,42 +1760,10 @@ "name": "Prusament PETG @base", "sub_path": "filament/Prusament PETG @base.json" }, - { - "name": "Prusament PETG @XL", - "sub_path": "filament/Prusament PETG @XL.json" - }, - { - "name": "Prusament PETG @XL 5T", - "sub_path": "filament/Prusament PETG @XL 5T.json" - }, - { - "name": "Generic PLA @Prusa base", - "sub_path": "filament/Generic PLA @Prusa base.json" - }, - { - "name": "Generic PLA @Prusa", - "sub_path": "filament/Generic PLA @Prusa.json" - }, { "name": "Generic PLA @Prusa CORE One", "sub_path": "filament/Generic PLA @Prusa CORE One.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 MK3.5", "sub_path": "filament/Generic PLA @Prusa MK3.5.json" @@ -1964,37 +1780,13 @@ "name": "Generic PLA @Prusa MK3.5 0.8", "sub_path": "filament/Generic PLA @Prusa MK3.5 0.8.json" }, - { - "name": "Generic PLA @Prusa MK4", - "sub_path": "filament/Generic PLA @Prusa MK4.json" - }, { "name": "Generic PLA @Prusa MK4S", "sub_path": "filament/Generic PLA @Prusa MK4S.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 base", - "sub_path": "filament/Generic PLA HF @Prusa base.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 @Prusa base", + "sub_path": "filament/Generic PLA @Prusa base.json" }, { "name": "Generic PLA HF @Prusa MK3.5", @@ -2008,34 +1800,14 @@ "name": "Generic PLA HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PLA HF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic PLA HF @Prusa base", + "sub_path": "filament/Generic PLA HF @Prusa base.json" + }, { "name": "Generic PLA Silk @Prusa CORE One", "sub_path": "filament/Generic PLA Silk @Prusa CORE One.json" }, - { - "name": "Generic PLA-CF @Prusa base", - "sub_path": "filament/Generic PLA-CF @Prusa base.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": "Generic PLA-CF @Prusa MK3.5", "sub_path": "filament/Generic PLA-CF @Prusa MK3.5.json" @@ -2052,6 +1824,10 @@ "name": "Generic PLA-CF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PLA-CF @Prusa 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" @@ -2060,14 +1836,6 @@ "name": "Prusament PLA @base", "sub_path": "filament/Prusament PLA @base.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", "sub_path": "filament/Prusament rPLA @CORE One.json" @@ -2076,38 +1844,6 @@ "name": "Prusament rPLA @base", "sub_path": "filament/Prusament rPLA @base.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 base", - "sub_path": "filament/Generic PVA @Prusa base.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 @Prusa MK3.5", "sub_path": "filament/Generic PVA @Prusa MK3.5.json" @@ -2125,20 +1861,8 @@ "sub_path": "filament/Generic PVA @Prusa MK3.5 0.8.json" }, { - "name": "Generic PVA HF @Prusa base", - "sub_path": "filament/Generic PVA HF @Prusa base.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": "Generic PVA @Prusa base", + "sub_path": "filament/Generic PVA @Prusa base.json" }, { "name": "Generic PVA HF @Prusa MK3.5", @@ -2152,6 +1876,10 @@ "name": "Generic PVA HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PVA HF @Prusa 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", "sub_path": "filament/Prusament PVB @CORE One.json" @@ -2164,42 +1892,26 @@ "name": "Prusament PVB @XL 5T", "sub_path": "filament/Prusament PVB @XL 5T.json" }, - { - "name": "Generic TPU @Prusa base", - "sub_path": "filament/Generic TPU @Prusa base.json" - }, - { - "name": "Generic TPU @Prusa", - "sub_path": "filament/Generic TPU @Prusa.json" - }, - { - "name": "Generic TPU @Prusa MINIIS", - "sub_path": "filament/Generic TPU @Prusa MINIIS.json" - }, { "name": "Generic TPU @Prusa MK3.5", "sub_path": "filament/Generic TPU @Prusa MK3.5.json" }, - { - "name": "Generic TPU @Prusa MK4", - "sub_path": "filament/Generic TPU @Prusa MK4.json" - }, { "name": "Generic TPU @Prusa MK4S", "sub_path": "filament/Generic TPU @Prusa MK4S.json" }, { - "name": "Generic TPU HF @Prusa base", - "sub_path": "filament/Generic TPU HF @Prusa base.json" - }, - { - "name": "Generic TPU HF @Prusa MINIIS", - "sub_path": "filament/Generic TPU HF @Prusa MINIIS.json" + "name": "Generic TPU @Prusa base", + "sub_path": "filament/Generic TPU @Prusa base.json" }, { "name": "Generic TPU HF @Prusa MK3.5", "sub_path": "filament/Generic TPU HF @Prusa MK3.5.json" }, + { + "name": "Generic TPU HF @Prusa base", + "sub_path": "filament/Generic TPU HF @Prusa base.json" + }, { "name": "Generic ABS @Prusa CORE One 0.6", "sub_path": "filament/Generic ABS @Prusa CORE One 0.6.json" @@ -2236,6 +1948,50 @@ "name": "Generic ABS @Prusa MK4S HF0.4", "sub_path": "filament/Generic ABS @Prusa MK4S HF0.4.json" }, + { + "name": "Generic ABS @Prusa", + "sub_path": "filament/Generic ABS @Prusa.json" + }, + { + "name": "Generic ABS @Prusa MINIIS", + "sub_path": "filament/Generic ABS @Prusa MINIIS.json" + }, + { + "name": "Generic ABS @Prusa MINIIS 0.25", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic ABS @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic ABS @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic ABS @Prusa MK4", + "sub_path": "filament/Generic ABS @Prusa MK4.json" + }, + { + "name": "Generic ABS @Prusa XL", + "sub_path": "filament/Generic ABS @Prusa XL.json" + }, + { + "name": "Generic ABS @Prusa XL 5T", + "sub_path": "filament/Generic ABS @Prusa XL 5T.json" + }, + { + "name": "Generic ABS HF @Prusa MINIIS", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS.json" + }, + { + "name": "Generic ABS HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.6.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" @@ -2272,6 +2028,18 @@ "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", "sub_path": "filament/Prusament ASA @CORE One 0.6.json" @@ -2304,6 +2072,46 @@ "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", "sub_path": "filament/Prusament PA-CF @CORE One 0.6.json" @@ -2312,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" @@ -2380,6 +2200,50 @@ "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", "sub_path": "filament/Prusament PETG @CORE One 0.6.json" @@ -2404,6 +2268,14 @@ "name": "Prusament PETG @CORE One HF 0.8", "sub_path": "filament/Prusament PETG @CORE One HF 0.8.json" }, + { + "name": "Prusament PETG @XL", + "sub_path": "filament/Prusament PETG @XL.json" + }, + { + "name": "Prusament PETG @XL 5T", + "sub_path": "filament/Prusament PETG @XL 5T.json" + }, { "name": "Generic PLA @Prusa CORE One 0.6", "sub_path": "filament/Generic PLA @Prusa CORE One 0.6.json" @@ -2444,6 +2316,50 @@ "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" @@ -2452,6 +2368,26 @@ "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", "sub_path": "filament/Prusament PLA @CORE One 0.6.json" @@ -2476,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" @@ -2484,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" @@ -2500,6 +2484,22 @@ "name": "Generic TPU @Prusa MK4S 0.8", "sub_path": "filament/Generic TPU @Prusa MK4S 0.8.json" }, + { + "name": "Generic TPU @Prusa", + "sub_path": "filament/Generic TPU @Prusa.json" + }, + { + "name": "Generic TPU @Prusa MINIIS", + "sub_path": "filament/Generic TPU @Prusa MINIIS.json" + }, + { + "name": "Generic TPU @Prusa MK4", + "sub_path": "filament/Generic TPU @Prusa MK4.json" + }, + { + "name": "Generic TPU HF @Prusa MINIIS", + "sub_path": "filament/Generic TPU HF @Prusa MINIIS.json" + }, { "name": "Generic ABS @Prusa MK4S HF0.5", "sub_path": "filament/Generic ABS @Prusa MK4S HF0.5.json" diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json index 7d53f66645..ee328ff399 100644 --- a/resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic ABS @Prusa XL 5T", - "inherits": "Generic ABS @Prusa base", "renamed_from": "Prusa Generic ABS @XL 5T;Prusa Generic ABS XL 5T", + "inherits": "Generic ABS @Prusa base", "from": "system", "setting_id": "XfavDzEzzrXDQVUC", "instantiation": "true", @@ -36,8 +36,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/Generic ABS @Prusa XL.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL.json index abf7986c12..f6a0a45d88 100644 --- a/resources/profiles/Prusa/filament/Generic ABS @Prusa XL.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic ABS @Prusa XL", - "inherits": "Generic ABS @Prusa base", "renamed_from": "Prusa Generic ABS @XL;Prusa Generic ABS XL", + "inherits": "Generic ABS @Prusa base", "from": "system", "setting_id": "HYHkGEjr6Kid2Xg2", "instantiation": "true", @@ -36,8 +36,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/Generic FLEX @Prusa XL 5T.json b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL 5T.json index c0501006d2..9be4ea1ba0 100644 --- a/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL 5T.json +++ b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL 5T.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic FLEX @Prusa XL 5T", - "inherits": "fdm_filament_flex", "renamed_from": "Prusa Generic FLEX @XL 5T;Prusa Generic FLEX XL 5T", + "inherits": "fdm_filament_flex", "from": "system", "setting_id": "ef8fSryRYselyr4G", "filament_id": "OFbPuPKY", @@ -11,8 +11,6 @@ "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", diff --git a/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json index ea56f3a8b5..24f34f49ab 100644 --- a/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json +++ b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic FLEX @Prusa XL", - "inherits": "fdm_filament_flex", "renamed_from": "Prusa Generic FLEX @XL;Prusa Generic FLEX XL", + "inherits": "fdm_filament_flex", "from": "system", "setting_id": "qrFWrwgQSXgU7oCb", "filament_id": "OFbPuPKY", @@ -11,8 +11,6 @@ "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", diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json index 9f70295142..52e208e7c9 100644 --- a/resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PETG @Prusa XL 5T", - "inherits": "Generic PETG @Prusa base", "renamed_from": "Prusa Generic PETG @XL 5T;Prusa Generic PETG XL 5T", + "inherits": "Generic PETG @Prusa base", "from": "system", "setting_id": "DNJECSjW6zKYALxE", "instantiation": "true", @@ -37,8 +37,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/Generic PETG @Prusa XL.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL.json index 0cdcbfc1c4..78a3e589b2 100644 --- a/resources/profiles/Prusa/filament/Generic PETG @Prusa XL.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PETG @Prusa XL", - "inherits": "Generic PETG @Prusa base", "renamed_from": "Prusa Generic PETG @XL;Prusa Generic PETG XL", + "inherits": "Generic PETG @Prusa base", "from": "system", "setting_id": "8vcNv4b4H7aYA01G", "instantiation": "true", @@ -37,8 +37,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/Generic PLA @Prusa XL 5T.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL 5T.json index 6dbefec6be..532ccba57a 100644 --- a/resources/profiles/Prusa/filament/Generic PLA @Prusa XL 5T.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL 5T.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA @Prusa XL 5T", - "inherits": "Generic PLA @Prusa base", "renamed_from": "Prusa Generic PLA @XL 5T;Prusa Generic PLA XL 5T", + "inherits": "Generic PLA @Prusa base", "from": "system", "setting_id": "wDxtZLt5J2JODMBq", "instantiation": "true", @@ -34,8 +34,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/Generic PLA @Prusa XL.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL.json index ff8f343b41..4e560f4bac 100644 --- a/resources/profiles/Prusa/filament/Generic PLA @Prusa XL.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL.json @@ -1,8 +1,8 @@ { "type": "filament", "name": "Generic PLA @Prusa XL", - "inherits": "Generic PLA @Prusa base", "renamed_from": "Prusa Generic PLA @XL;Prusa Generic PLA XL", + "inherits": "Generic PLA @Prusa base", "from": "system", "setting_id": "27u5AiklUhmExsys", "instantiation": "true", @@ -34,8 +34,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 ASA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json index fdb63e2e68..43aed0f993 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json @@ -6,7 +6,9 @@ "setting_id": "IQu91UAWOJOQcUq9", "filament_id": "OFmFwUWM", "instantiation": "true", - "filament_vendor": ["Prusa Polymers"], + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "260", "nozzle_temperature": "260", "hot_plate_temp_initial_layer": "100", @@ -39,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 c07021a9c3..d118538809 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @XL.json @@ -6,7 +6,9 @@ "setting_id": "RaEoFoZdXkkOz9yh", "filament_id": "OFmFwUWM", "instantiation": "true", - "filament_vendor": ["Prusa Polymers"], + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "260", "nozzle_temperature": "260", "hot_plate_temp_initial_layer": "100", @@ -39,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 5T.json b/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json index af306fd2a7..80a9653148 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json @@ -6,7 +6,9 @@ "setting_id": "FYerOcjToJ3ABpu1", "filament_id": "OF54SvEe", "instantiation": "true", - "filament_vendor": ["Prusa Polymers"], + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", @@ -39,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 f843be92a0..957a27f8cc 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json @@ -6,7 +6,9 @@ "setting_id": "IrL4iU2kkMBHIw3e", "filament_id": "OF54SvEe", "instantiation": "true", - "filament_vendor": ["Prusa Polymers"], + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", @@ -39,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 5T.json b/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json index 922492ce7c..ff60e677cb 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json @@ -41,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 2ea273902c..d3fdac3873 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json @@ -41,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 5T.json b/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json index 0c6d1a3cdb..7ef720791d 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json @@ -6,7 +6,9 @@ "setting_id": "m1YND6uz3GWeVIBG", "filament_id": "OFjz0a3m", "instantiation": "true", - "filament_vendor": ["Prusa Polymers"], + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "285", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", @@ -39,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 572b970d02..44abf2918e 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json @@ -6,7 +6,9 @@ "setting_id": "Eq5x2CcEUUAZ5aof", "filament_id": "OFjz0a3m", "instantiation": "true", - "filament_vendor": ["Prusa Polymers"], + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "285", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", @@ -39,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 @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json index e0db59fde9..95e9ecc79b 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json @@ -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 f26140a0eb..56c2fa7a2b 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @XL.json @@ -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 PLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json index efda9cf4e3..ae302e09eb 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json @@ -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 9d02a67491..b5d006dc46 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @XL.json @@ -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 PVB @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json index 366c6043cd..2c689937cf 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json @@ -6,7 +6,9 @@ "setting_id": "DIrPylH6rmu6YA43", "filament_id": "OFh7mvPO", "instantiation": "true", - "filament_vendor": ["Prusa Polymers"], + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "215", "nozzle_temperature": "215", "hot_plate_temp_initial_layer": "75", @@ -40,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 4a9a858c06..01df675ba1 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @XL.json @@ -6,7 +6,9 @@ "setting_id": "RF55nfxQwqUqe00Q", "filament_id": "OFh7mvPO", "instantiation": "true", - "filament_vendor": ["Prusa Polymers"], + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "215", "nozzle_temperature": "215", "hot_plate_temp_initial_layer": "75", @@ -40,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 @XL 5T.json b/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json index 8bfc482af6..1b847cb1c8 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json @@ -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 9ed3d9af74..97c4f6d108 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @XL.json @@ -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/machine/Prusa CORE One HF.json b/resources/profiles/Prusa/machine/Prusa CORE One HF.json index 027ef3e2d0..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": "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", + "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 57287f0380..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": "Generic PLA @Prusa 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 87bc587830..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": "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", + "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 b9907aca2e..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": "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", + "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 MK4S HF.json b/resources/profiles/Prusa/machine/Prusa MK4S HF.json index 088715b835..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": "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", + "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.json b/resources/profiles/Prusa/machine/Prusa MK4S.json index 2f6bd3e45f..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": "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", + "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/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 f49413601a..25ffa10171 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.04.00.12", + "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": "Generic ABS @Qidi", - "sub_path": "filament/Generic ABS @Qidi.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": "Generic ASA @Qidi", - "sub_path": "filament/Generic ASA @Qidi.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", @@ -1816,14 +2052,6 @@ "name": "QIDI UltraPA-CF25", "sub_path": "filament/QIDI UltraPA-CF25.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": "Generic PC @Qidi", "sub_path": "filament/Generic PC @Qidi.json" @@ -1832,6 +2060,14 @@ "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": "Generic PETG @Qidi", - "sub_path": "filament/Generic PETG @Qidi.json" - }, - { - "name": "Generic PETG-CF @Qidi", - "sub_path": "filament/Generic PETG-CF @Qidi.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,22 +2160,6 @@ "name": "QIDI WOOD Rapido", "sub_path": "filament/QIDI WOOD Rapido.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": "Qidi PLA-CF", "sub_path": "filament/Qidi PLA-CF.json" @@ -1940,6 +2168,14 @@ "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", "sub_path": "filament/QIDI PEBA 95A.json" @@ -1952,14 +2188,6 @@ "name": "QIDI TPU-GF", "sub_path": "filament/QIDI TPU-GF.json" }, - { - "name": "Generic TPU @Qidi", - "sub_path": "filament/Generic TPU @Qidi.json" - }, - { - "name": "Generic TPU 95A @Qidi", - "sub_path": "filament/Generic TPU 95A @Qidi.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": "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": "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": "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 PA-Ultra @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json" @@ -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": "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": "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": "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": "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": "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": "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": "Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json" @@ -6103,998 +7095,6 @@ { "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" - }, - { - "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" } ], "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/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-Max 3.json b/resources/profiles/Qidi/machine/Qidi X-Max 3.json index 99888a8acf..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;Generic ASA @Qidi;Generic ABS @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi" + "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-Plus 3.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3.json index 84df7f37be..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;Generic ASA @Qidi;Generic ABS @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi" + "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.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4.json index ac34a73e34..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;Generic PETG @Qidi" + "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-Smart 3.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3.json index 75b3d2e252..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;Generic ASA @Qidi;Generic ABS @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi" + "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 38b39c4591..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": "", 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 4cb9ab573e..dbf9500ca0 100644 --- a/resources/profiles/RH3D.json +++ b/resources/profiles/RH3D.json @@ -1,6 +1,6 @@ { "name": "RH3D", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "RH3D - printer profiles", "machine_model_list": [ 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 dbe4c3cc56..743333f9aa 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ @@ -276,26 +276,22 @@ } ], "filament_list": [ - { - "name": "Generic ABS BigNozzle @RatRig", - "sub_path": "filament/Generic ABS BigNozzle @RatRig.json" - }, { "name": "Generic ABS @RatRig", "sub_path": "filament/Generic ABS @RatRig.json" }, { - "name": "RatRig PunkFil ABS", - "sub_path": "filament/RatRig PunkFil ABS.json" - }, - { - "name": "Generic ASA BigNozzle @RatRig", - "sub_path": "filament/Generic ASA BigNozzle @RatRig.json" + "name": "Generic ABS BigNozzle @RatRig", + "sub_path": "filament/Generic ABS BigNozzle @RatRig.json" }, { "name": "Generic ASA @RatRig", "sub_path": "filament/Generic ASA @RatRig.json" }, + { + "name": "Generic ASA BigNozzle @RatRig", + "sub_path": "filament/Generic ASA BigNozzle @RatRig.json" + }, { "name": "Generic PA @RatRig", "sub_path": "filament/Generic PA @RatRig.json" @@ -308,38 +304,30 @@ "name": "Generic PC @RatRig", "sub_path": "filament/Generic PC @RatRig.json" }, - { - "name": "Generic PCTG BigNozzle @RatRig", - "sub_path": "filament/Generic PCTG BigNozzle @RatRig.json" - }, - { - "name": "Generic PETG BigNozzle @RatRig", - "sub_path": "filament/Generic PETG BigNozzle @RatRig.json" - }, { "name": "Generic PCTG @RatRig", "sub_path": "filament/Generic PCTG @RatRig.json" }, + { + "name": "Generic PCTG BigNozzle @RatRig", + "sub_path": "filament/Generic PCTG BigNozzle @RatRig.json" + }, { "name": "Generic PETG @RatRig", "sub_path": "filament/Generic PETG @RatRig.json" }, { - "name": "RatRig PunkFil PETG", - "sub_path": "filament/RatRig PunkFil PETG.json" - }, - { - "name": "RatRig PunkFil PETG CF", - "sub_path": "filament/RatRig PunkFil PETG CF.json" - }, - { - "name": "Generic PLA BigNozzle @RatRig", - "sub_path": "filament/Generic PLA BigNozzle @RatRig.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" @@ -348,13 +336,25 @@ "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": "Generic TPU @RatRig", - "sub_path": "filament/Generic TPU @RatRig.json" + "name": "RatRig PunkFil ABS", + "sub_path": "filament/RatRig PunkFil ABS.json" + }, + { + "name": "RatRig PunkFil PETG", + "sub_path": "filament/RatRig PunkFil PETG.json" + }, + { + "name": "RatRig PunkFil PETG CF", + "sub_path": "filament/RatRig PunkFil PETG CF.json" } ], "machine_list": [ 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 3b43d60a23..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": "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" + "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 71eb9724f9..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": "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" + "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 47cd8fba2f..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": "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" + "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 4731e90901..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": "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" + "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 86963d7e73..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": "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" + "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 7b61ebe531..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": "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" + "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 f2831e5919..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": "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" + "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 a14770104f..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": "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" + "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 1a477fb750..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": "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" + "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 327c56d036..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": "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" + "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 2e72109e25..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": "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" + "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 e6c7405f9a..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": "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" + "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 bc27a53e94..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": "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" + "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 3518748830..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": "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" + "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 59ff011a82..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": "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" + "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/fdm_klipper_common.json b/resources/profiles/Ratrig/machine/fdm_klipper_common.json index 28ad9ce02c..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", 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 42ac381eb6..91804bff0a 100644 --- a/resources/profiles/SecKit.json +++ b/resources/profiles/SecKit.json @@ -1,6 +1,6 @@ { "name": "SecKit", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "SecKit configurations", "machine_model_list": [ diff --git a/resources/profiles/SecKit/machine/fdm_klipper_common.json b/resources/profiles/SecKit/machine/fdm_klipper_common.json index 4bb08f7367..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", 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 4bc30dee93..21db5e4e3e 100644 --- a/resources/profiles/SeeMeCNC.json +++ b/resources/profiles/SeeMeCNC.json @@ -1,6 +1,6 @@ { "name": "SeeMeCNC", - "version": "2.4.0.03", + "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_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_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_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_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_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 393271d0e5..06acef0b0e 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.04.00.13", + "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" @@ -1572,6 +1744,22 @@ "name": "Snapmaker PLA Silk @0.2 nozzle", "sub_path": "filament/Snapmaker PLA Silk @0.2 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-CF", "sub_path": "filament/Snapmaker PLA-CF.json" @@ -1612,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" @@ -1712,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" @@ -1745,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": [ @@ -2050,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" @@ -2062,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" @@ -2325,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/Snapmaker ABS @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json index 48740f94bc..af8c929c82 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json @@ -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 ASA @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json index b75f8d84d3..409bbdd793 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json @@ -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 @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 2629e15051..478a0195bd 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json @@ -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 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 7f54df76bb..fe567e1744 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json @@ -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 bdb539a065..46644cc06a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json @@ -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 5390ffe222..de2e0c9765 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json @@ -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 84cd37dfe7..4a93202495 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json @@ -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 ea5c61eb3b..12b546ebb1 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json @@ -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 5e8a40a8af..8e9a3b5f12 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json @@ -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 1d8a6fe9ba..dff0922c5c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json @@ -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 0f880ac980..86540058c8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json @@ -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 6838983e1b..9daad839c2 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json @@ -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 7080dddad1..3cb49e16e7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json @@ -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 f2024f8ddf..1272b220a1 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json @@ -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 d9b45b5f79..768a85d0db 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json @@ -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 d9bc0f80ed..2fd81db581 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json @@ -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 @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json index 903ea5c744..327f146f45 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json @@ -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 J1 ABS Benchy.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json index 3d3e47b701..83a7666218 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json @@ -54,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 PA-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json index 62b54feb70..b402e7f76a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json @@ -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 PET @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json index 2dae11ec36..0741102696 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json @@ -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 PETG @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json index ce0e7c8122..d081c6f9d8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json @@ -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-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json index 47869c9779..076dc7e2b9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json @@ -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 PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json index 5611cb34f3..3f41d5579e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json @@ -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 Basic @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json index d6e7e209c6..e29003f72c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json @@ -25,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 c305704269..67e0d74b2e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json @@ -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 Glow @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json index e69ca63254..97d2a7ea61 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json @@ -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 21384a0567..9f4ff4b7f9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json @@ -22,12 +22,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 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json index d8b3ebef60..31607ed7c6 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json @@ -22,12 +22,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 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json index 109dbc19e7..6c56447e5a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json @@ -25,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 Metal @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json index 1db2d82548..87c26fdb09 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json @@ -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 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json index 37bc90db26..5f0ca9ed36 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json @@ -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 SnapSpeed @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json index b87c48cbe5..5391a85078 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json @@ -22,12 +22,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 Translucent @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json index 1ed79183c9..4b67d00391 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json @@ -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-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json index 962c6fcccb..cfdfe78b74 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json @@ -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 PVA @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json index 206f024091..f2b2033dd9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json @@ -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 @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json index 6ad1de856e..7a43d5715a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json @@ -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/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_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 a38645abc2..7f08417ed7 100644 --- a/resources/profiles/Sovol.json +++ b/resources/profiles/Sovol.json @@ -1,7 +1,7 @@ { "name": "Sovol", "url": "", - "version": "02.04.00.02", + "version": "02.04.00.04", "force_update": "0", "description": "Sovol configurations", "machine_model_list": [ @@ -201,82 +201,66 @@ } ], "filament_list": [ - { - "name": "Generic ABS @Sovol SV08 MAX", - "sub_path": "filament/Generic ABS @Sovol SV08 MAX.json" - }, - { - "name": "Generic PC @Sovol SV08 MAX", - "sub_path": "filament/Generic PC @Sovol SV08 MAX.json" - }, - { - "name": "Generic PETG @Sovol SV08 MAX", - "sub_path": "filament/Generic PETG @Sovol SV08 MAX.json" - }, - { - "name": "Generic PLA @Sovol SV08 MAX", - "sub_path": "filament/Generic PLA @Sovol SV08 MAX.json" - }, - { - "name": "Generic PLA Silk @Sovol SV08 MAX", - "sub_path": "filament/Generic PLA Silk @Sovol SV08 MAX.json" - }, - { - "name": "Generic TPU @Sovol SV08 MAX", - "sub_path": "filament/Generic TPU @Sovol SV08 MAX.json" - }, - { - "name": "Polymaker PETG @Sovol SV08 MAX", - "sub_path": "filament/Polymaker PETG @Sovol SV08 MAX.json" - }, - { - "name": "SUNLU PETG @Sovol SV08 MAX", - "sub_path": "filament/SUNLU PETG @Sovol SV08 MAX.json" - }, { "name": "Generic ABS @Sovol SV06 ACE", "sub_path": "filament/Generic ABS @Sovol SV06 ACE.json" }, - { - "name": "Generic PETG @Sovol SV06 ACE", - "sub_path": "filament/Generic PETG @Sovol SV06 ACE.json" - }, - { - "name": "Generic PLA @Sovol SV06 ACE", - "sub_path": "filament/Generic PLA @Sovol SV06 ACE.json" - }, - { - "name": "Generic TPU @Sovol SV06 ACE", - "sub_path": "filament/Generic TPU @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 TPU @Sovol SV06 Plus ACE", - "sub_path": "filament/Generic TPU @Sovol SV06 Plus ACE.json" - }, { "name": "Generic PLA @Sovol SV07", "sub_path": "filament/Generic PLA @Sovol SV07.json" }, - { - "name": "Generic ABS @Sovol SV08", - "sub_path": "filament/Generic ABS @Sovol SV08.json" - }, - { - "name": "Generic PETG @Sovol SV08", - "sub_path": "filament/Generic PETG @Sovol SV08.json" - }, { "name": "Generic PLA @Sovol SV08", "sub_path": "filament/Generic PLA @Sovol SV08.json" @@ -286,44 +270,60 @@ "sub_path": "filament/Generic PLA @Sovol SV08 0.2 nozzle.json" }, { - "name": "Generic TPU @Sovol SV08", - "sub_path": "filament/Generic TPU @Sovol SV08.json" - }, - { - "name": "Generic ABS @Sovol Zero", - "sub_path": "filament/Generic ABS @Sovol Zero.json" - }, - { - "name": "Generic PC @Sovol Zero", - "sub_path": "filament/Generic PC @Sovol Zero.json" - }, - { - "name": "Generic PETG @Sovol Zero", - "sub_path": "filament/Generic PETG @Sovol Zero.json" - }, - { - "name": "Sovol Zero PETG HS Nozzle", - "sub_path": "filament/Sovol Zero PETG HS 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": "Sovol Zero PLA Basic HS Nozzle", - "sub_path": "filament/Sovol Zero PLA Basic HS Nozzle.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": "Sovol Zero PLA Silk HS Nozzle", - "sub_path": "filament/Sovol Zero PLA Silk HS Nozzle.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" + }, + { + "name": "SUNLU PETG @Sovol SV08 MAX", + "sub_path": "filament/SUNLU PETG @Sovol SV08 MAX.json" + }, + { + "name": "Sovol Zero PETG HS Nozzle", + "sub_path": "filament/Sovol Zero PETG HS Nozzle.json" + }, + { + "name": "Sovol Zero PLA Basic HS Nozzle", + "sub_path": "filament/Sovol Zero PLA Basic HS Nozzle.json" + }, + { + "name": "Sovol Zero PLA Silk HS Nozzle", + "sub_path": "filament/Sovol Zero PLA Silk HS Nozzle.json" } ], "machine_list": [ 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/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 8134d621df..a7efecf420 100644 --- a/resources/profiles/Tiertime.json +++ b/resources/profiles/Tiertime.json @@ -1,6 +1,6 @@ { "name": "Tiertime", - "version": "02.04.00.02", + "version": "02.04.00.04", "force_update": "0", "description": "Tiertime configurations", "machine_model_list": [ @@ -360,14 +360,6 @@ "name": "fdm_filament_tpu", "sub_path": "filament/fdm_filament_tpu.json" }, - { - "name": "Tiertime ABS", - "sub_path": "filament/Tiertime ABS.json" - }, - { - "name": "Tiertime ABS@300HS", - "sub_path": "filament/Tiertime ABS@300HS.json" - }, { "name": "Generic ABS @Tiertime", "sub_path": "filament/Generic ABS @Tiertime.json" @@ -377,12 +369,12 @@ "sub_path": "filament/Generic ABS @Tiertime 300HS.json" }, { - "name": "Tiertime ASA", - "sub_path": "filament/Tiertime ASA.json" + "name": "Tiertime ABS", + "sub_path": "filament/Tiertime ABS.json" }, { - "name": "Tiertime ASA@300HS", - "sub_path": "filament/Tiertime ASA@300HS.json" + "name": "Tiertime ABS@300HS", + "sub_path": "filament/Tiertime ABS@300HS.json" }, { "name": "Generic ASA @Tiertime", @@ -392,6 +384,14 @@ "name": "Generic ASA @Tiertime 300HS", "sub_path": "filament/Generic ASA @Tiertime 300HS.json" }, + { + "name": "Tiertime ASA", + "sub_path": "filament/Tiertime ASA.json" + }, + { + "name": "Tiertime ASA@300HS", + "sub_path": "filament/Tiertime ASA@300HS.json" + }, { "name": "Generic BVOH @Tiertime", "sub_path": "filament/Generic BVOH @Tiertime.json" @@ -420,6 +420,10 @@ "name": "Generic PA @Tiertime", "sub_path": "filament/Generic PA @Tiertime.json" }, + { + "name": "Generic PA @Tiertime 300HS", + "sub_path": "filament/Generic PA @Tiertime 300HS.json" + }, { "name": "Generic PA-CF @Tiertime", "sub_path": "filament/Generic PA-CF @Tiertime.json" @@ -428,10 +432,6 @@ "name": "Generic PA-CF @Tiertime 300HS", "sub_path": "filament/Generic PA-CF @Tiertime 300HS.json" }, - { - "name": "Generic PA @Tiertime 300HS", - "sub_path": "filament/Generic PA @Tiertime 300HS.json" - }, { "name": "Tiertime PA6-CF", "sub_path": "filament/Tiertime PA6-CF.json" @@ -468,6 +468,10 @@ "name": "Generic PE @Tiertime", "sub_path": "filament/Generic PE @Tiertime.json" }, + { + "name": "Generic PE @Tiertime 300HS", + "sub_path": "filament/Generic PE @Tiertime 300HS.json" + }, { "name": "Generic PE-CF @Tiertime", "sub_path": "filament/Generic PE-CF @Tiertime.json" @@ -476,14 +480,14 @@ "name": "Generic PE-CF @Tiertime 300HS", "sub_path": "filament/Generic PE-CF @Tiertime 300HS.json" }, - { - "name": "Generic PE @Tiertime 300HS", - "sub_path": "filament/Generic PE @Tiertime 300HS.json" - }, { "name": "Generic PETG @Tiertime", "sub_path": "filament/Generic PETG @Tiertime.json" }, + { + "name": "Generic PETG @Tiertime 300HS", + "sub_path": "filament/Generic PETG @Tiertime 300HS.json" + }, { "name": "Generic PETG-CF @Tiertime", "sub_path": "filament/Generic PETG-CF @Tiertime.json" @@ -492,10 +496,6 @@ "name": "Generic PETG-CF @Tiertime 300HS", "sub_path": "filament/Generic PETG-CF @Tiertime 300HS.json" }, - { - "name": "Generic PETG @Tiertime 300HS", - "sub_path": "filament/Generic PETG @Tiertime 300HS.json" - }, { "name": "Tiertime PET-CF", "sub_path": "filament/Tiertime PET-CF.json" @@ -524,6 +524,10 @@ "name": "Generic PLA @Tiertime", "sub_path": "filament/Generic PLA @Tiertime.json" }, + { + "name": "Generic PLA @Tiertime 300HS", + "sub_path": "filament/Generic PLA @Tiertime 300HS.json" + }, { "name": "Generic PLA High Speed @Tiertime", "sub_path": "filament/Generic PLA High Speed @Tiertime.json" @@ -548,10 +552,6 @@ "name": "Generic PLA-CF @Tiertime 300HS", "sub_path": "filament/Generic PLA-CF @Tiertime 300HS.json" }, - { - "name": "Generic PLA @Tiertime 300HS", - "sub_path": "filament/Generic PLA @Tiertime 300HS.json" - }, { "name": "Tiertime PLA", "sub_path": "filament/Tiertime PLA.json" @@ -572,6 +572,10 @@ "name": "Generic PP @Tiertime", "sub_path": "filament/Generic PP @Tiertime.json" }, + { + "name": "Generic PP @Tiertime 300HS", + "sub_path": "filament/Generic PP @Tiertime 300HS.json" + }, { "name": "Generic PP-CF @Tiertime", "sub_path": "filament/Generic PP-CF @Tiertime.json" @@ -588,10 +592,6 @@ "name": "Generic PP-GF @Tiertime 300HS", "sub_path": "filament/Generic PP-GF @Tiertime 300HS.json" }, - { - "name": "Generic PP @Tiertime 300HS", - "sub_path": "filament/Generic PP @Tiertime 300HS.json" - }, { "name": "Generic PPA-CF @Tiertime", "sub_path": "filament/Generic PPA-CF @Tiertime.json" @@ -612,6 +612,10 @@ "name": "Generic PPS @Tiertime", "sub_path": "filament/Generic PPS @Tiertime.json" }, + { + "name": "Generic PPS @Tiertime 300HS", + "sub_path": "filament/Generic PPS @Tiertime 300HS.json" + }, { "name": "Generic PPS-CF @Tiertime", "sub_path": "filament/Generic PPS-CF @Tiertime.json" @@ -620,10 +624,6 @@ "name": "Generic PPS-CF @Tiertime 300HS", "sub_path": "filament/Generic PPS-CF @Tiertime 300HS.json" }, - { - "name": "Generic PPS @Tiertime 300HS", - "sub_path": "filament/Generic PPS @Tiertime 300HS.json" - }, { "name": "Generic PVA @Tiertime", "sub_path": "filament/Generic PVA @Tiertime.json" 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 3cd77c911b..5d97581ffc 100644 --- a/resources/profiles/TwoTrees.json +++ b/resources/profiles/TwoTrees.json @@ -1,6 +1,6 @@ { "name": "TwoTrees", - "version": "02.04.00.02", + "version": "02.04.00.04", "force_update": "1", "description": "TwoTrees configurations", "machine_model_list": [ @@ -80,13 +80,13 @@ } ], "filament_list": [ - { - "name": "Generic TPU 95A @TwoTrees SK1", - "sub_path": "filament/Generic TPU 95A @TwoTrees SK1.json" - }, { "name": "Generic HS PLA @TwoTrees SK1", "sub_path": "filament/Generic HS PLA @TwoTrees 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/machine/TwoTrees SK1.json b/resources/profiles/TwoTrees/machine/TwoTrees SK1.json index 5674e7c408..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": "Generic TPU 95A @TwoTrees SK1;TwoTrees Generic PETG @SK1;Generic HS PLA @TwoTrees 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 af7aa294bc..7923f2d92f 100644 --- a/resources/profiles/Volumic.json +++ b/resources/profiles/Volumic.json @@ -1,6 +1,6 @@ { "name": "Volumic", - "version": "02.04.00.02", + "version": "02.04.00.04", "force_update": "1", "description": "VOLUMIC configurations", "machine_model_list": [ 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 bcefdaf26c..a64b4807e8 100644 --- a/resources/profiles/Vzbot.json +++ b/resources/profiles/Vzbot.json @@ -1,6 +1,6 @@ { "name": "Vzbot", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Vzbot configurations", "machine_model_list": [ diff --git a/resources/profiles/Vzbot/machine/fdm_klipper_common.json b/resources/profiles/Vzbot/machine/fdm_klipper_common.json index 97e546f272..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", 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 ce18d5c5d0..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.03", + "version": "02.04.00.05", "force_update": "0", "description": "Wanhao France D12 configurations", "machine_model_list": [ diff --git a/resources/profiles/Wanhao France/filament/YUMI PETG.json b/resources/profiles/Wanhao France/filament/YUMI PETG.json index 9d1bf0288a..7495416e39 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PETG.json +++ b/resources/profiles/Wanhao France/filament/YUMI PETG.json @@ -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/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 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 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 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 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/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 0eeffdb045..35a1b5c8fa 100755 --- a/resources/profiles/WonderMaker.json +++ b/resources/profiles/WonderMaker.json @@ -1,7 +1,7 @@ { "name": "WonderMaker", "url": "", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "WonderMaker configurations", "machine_model_list": [ 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 aa092cc8b2..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.02", + "version": "02.04.00.03", "force_update": "0", "description": "Z-Bolt configurations", "machine_model_list": [ 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 050a0a2eb2..1148b112f3 100644 --- a/resources/profiles/iQ.json +++ b/resources/profiles/iQ.json @@ -1,6 +1,6 @@ { "name": "innovatiQ", - "version": "02.04.00.02", + "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/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 7a66cb4ce1..da34373d47 100644 --- a/resources/profiles/re3D.json +++ b/resources/profiles/re3D.json @@ -1,199 +1,199 @@ { - "name": "re3D", - "url": "", - "version": "03.00.10", - "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 @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/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/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/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/check_profile.ps1 b/scripts/check_profile.ps1 index 66ed33c31d..1aa5a11bd7 100644 --- a/scripts/check_profile.ps1 +++ b/scripts/check_profile.ps1 @@ -9,12 +9,17 @@ 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. - extra_json_check scripts/orca_extra_profile_check.py + 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. @@ -33,15 +38,14 @@ under emulation on ARM64. .PARAMETER ProfilesDir - Profile tree to validate (default: resources\profiles). extra_json_check always looks at the - tree next to the script, so this only redirects the validator checks. + 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. extra_json_check keeps - its two cross-vendor checks (setting_id and filament_id) tree-wide, so a scoped run can still + 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 @@ -110,7 +114,7 @@ $HostArch = switch ($HostArch) { default { 'x86' } } -$AllChecks = @('extra_json_check', 'validate_system', 'validate_slice', 'validate_filament_subtypes', 'validate_custom') +$AllChecks = @('profile_tool', 'validate_system', 'validate_slice', 'validate_filament_subtypes', 'validate_custom') $script:LogWriter = $null $script:Python = '' @@ -203,7 +207,7 @@ if ($Vendor) { } } -# The validator's -v and orca_extra_profile_check.py's --vendor both take that stem; an unscoped +# 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 { @() } @@ -434,8 +438,8 @@ function Expand-VendorPresets([string] $Zip, [string] $Tree, [string] $Prefix) { $CheckBodies = @{ - extra_json_check = { - Invoke-Tool -Exe (Resolve-Python) -Arguments (@((Join-Path $RepoRoot 'scripts\orca_extra_profile_check.py')) + $VendorPyArgs) + profile_tool = { + Invoke-Tool -Exe (Resolve-Python) -Arguments (@((Join-Path $RepoRoot 'scripts\orca_profile_tool.py'), 'check', '--profiles', $ProfilesDir) + $VendorPyArgs) } validate_system = { @@ -571,7 +575,7 @@ $CheckBodies = @{ # Heading CI puts above this check's log in the PR comment. $CommentHeadings = @{ - extra_json_check = '### Extra JSON Check Failed' + 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' @@ -618,7 +622,7 @@ try { [Console]::OutputEncoding = New-Object Text.UTF8Encoding($false) Push-UserPresets - if ($Checks | Where-Object { $_ -ne 'extra_json_check' }) { $Validator = Resolve-Validator } + 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); @@ -673,7 +677,7 @@ try { '' } '---' - '*Please fix the above errors and push a new commit.*' + '*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) diff --git a/scripts/check_profile.sh b/scripts/check_profile.sh index 51c8599b60..42e72b93f7 100755 --- a/scripts/check_profile.sh +++ b/scripts/check_profile.sh @@ -38,7 +38,7 @@ 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_extra_profile_check.py's --vendor take an empty value to mean. +# 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="" @@ -46,7 +46,7 @@ LOG_LEVEL=2 PREFER_DOWNLOAD=0 REFRESH=0 -ALL_CHECKS=(extra_json_check validate_system validate_slice validate_filament_subtypes validate_custom) +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) @@ -60,7 +60,7 @@ Run the profile checks from .github/workflows/check_profiles.yml locally. Usage: scripts/check_profile.sh [OPTION]... [CHECK]... Checks (default: all, in this order): - extra_json_check scripts/orca_extra_profile_check.py + 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 @@ -79,14 +79,16 @@ Options: -l, --log-level N validator log level (default: ${LOG_LEVEL}, as in CI) -h, --help show this help -Note: extra_json_check always looks at the tree next to the script -(/resources/profiles); --profiles only redirects the validator checks. +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. -extra_json_check 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. +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 } @@ -361,8 +363,8 @@ resolve_validator() { # ---------------------------------------------------------------------------- checks -check_extra_json_check() { - python3 "${REPO_ROOT}/scripts/orca_extra_profile_check.py" --vendor "${VENDOR}" +check_profile_tool() { + python3 "${REPO_ROOT}/scripts/orca_profile_tool.py" check --profiles "${PROFILES_DIR}" --vendor "${VENDOR}" } check_validate_system() { @@ -548,7 +550,7 @@ EOF # Heading CI puts above this check's log in the PR comment. comment_heading() { case "$1" in - extra_json_check) echo "### Extra JSON Check Failed" ;; + profile_tool) echo "### Profile Check Failed (orca_profile_tool.py)" ;; validate_system) echo "### System Profile Validation Failed" ;; validate_slice) echo "### Slice Validation Failed (custom g-code expansion)" ;; validate_filament_subtypes) echo "### Filament Subtype Validation Failed" ;; @@ -638,7 +640,9 @@ fi ${RESULTS} INNER echo "---" - echo "*Please fix the above errors and push a new commit.*" + # Single-quoted on purpose: the backticks below are markdown, not command substitution. + # shellcheck disable=SC2016 + 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.*' } > "${WORK_DIR}/pr_comment.md" printf '\n%sOne or more profile checks failed.%s Logs: %s\n' "${C_RED}" "${C_RESET}" "${LOG_DIR}" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json deleted file mode 100644 index 5b45e5ca7e..0000000000 --- a/scripts/filament_id_snapshot.json +++ /dev/null @@ -1,7783 +0,0 @@ -{ - "ids": { - "OF02UAVh": { - "filaments": [ - "Creality/Soleyin Ultra PLA" - ], - "name": "Soleyin Ultra PLA", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OF03RK6r": { - "filaments": [ - "BBL/BETA PLA Metal" - ], - "name": "BETA PLA Metal", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OF0AquDh": { - "filaments": [ - "Flashforge/FusRock S-Multi" - ], - "name": "FusRock S-Multi", - "filament_type": "PA", - "filament_vendor": "FusRock" - }, - "OF0EYBWQ": { - "filaments": [ - "BBL/addnorth PETG Flame v0" - ], - "name": "addnorth PETG Flame v0", - "filament_type": "PETG", - "filament_vendor": "addnorth" - }, - "OF0FfcAG": { - "filaments": [ - "Anycubic/Anycubic TPU for ACE" - ], - "name": "Anycubic TPU for ACE", - "filament_type": "TPU", - "filament_vendor": "Anycubic" - }, - "OF0NgY1y": { - "filaments": [ - "BBL/COEX NYLEX PA6-CF", - "OrcaFilamentLibrary/COEX NYLEX PA6-CF" - ], - "name": "COEX NYLEX PA6-CF", - "filament_type": "PA-CF", - "filament_vendor": "COEX 3D" - }, - "OF0R5Wc7": { - "filaments": [ - "Artillery/Artillery PLA Tough" - ], - "name": "Artillery PLA Tough", - "filament_type": "PLA Tough", - "filament_vendor": "Artillery" - }, - "OF0UJcb6": { - "filaments": [ - "BBL/PolyLite PETG", - "OrcaFilamentLibrary/PolyLite PETG", - "Snapmaker/PolyLite PETG" - ], - "name": "PolyLite PETG", - "filament_type": "PETG", - "filament_vendor": "Polymaker" - }, - "OF0VpkBM": { - "filaments": [ - "Snapmaker/PolyLite PETG Translucent" - ], - "name": "PolyLite PETG Translucent", - "filament_type": "PETG", - "filament_vendor": "Polymaker" - }, - "OF0Vtzaw": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante" - ], - "name": "FilAr PETG Amarillo Radiante", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OF0b7M1z": { - "filaments": [ - "SeeMeCNC/SeeMeCNC PA-CF" - ], - "name": "SeeMeCNC PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "SeeMeCNC" - }, - "OF0c7mnL": { - "filaments": [ - "InfiMech/InfiMech ABS" - ], - "name": "InfiMech ABS", - "filament_type": "ABS", - "filament_vendor": "InfiMech" - }, - "OF0gGRWk": { - "filaments": [ - "BBL/Panchroma PLA Glow", - "OrcaFilamentLibrary/Panchroma PLA Glow", - "Snapmaker/Panchroma PLA Glow" - ], - "name": "Panchroma PLA Glow", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF0kCNDK": { - "filaments": [ - "BBL/Panchroma PLA Luminous", - "OrcaFilamentLibrary/Panchroma PLA Luminous", - "Snapmaker/Panchroma PLA Luminous" - ], - "name": "Panchroma PLA Luminous", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF0omtEb": { - "filaments": [ - "Snapmaker/Fiberon ASA-CF08" - ], - "name": "Fiberon ASA-CF08", - "filament_type": "ASA", - "filament_vendor": "Polymaker" - }, - "OF0pzFLc": { - "filaments": [ - "BBL/COEX PLA+Silk", - "OrcaFilamentLibrary/COEX PLA+Silk" - ], - "name": "COEX PLA+Silk", - "filament_type": "PLA", - "filament_vendor": "COEX 3D" - }, - "OF0w7OpJ": { - "filaments": [ - "Qidi/QIDI ABS Rapido 0.8 nozzle" - ], - "name": "QIDI ABS Rapido 0.8 nozzle", - "filament_type": "ABS", - "filament_vendor": "QIDI" - }, - "OF0wBGNx": { - "filaments": [ - "BBL/Bambu ASA-CF", - "OrcaFilamentLibrary/Bambu ASA-CF" - ], - "name": "Bambu ASA-CF", - "filament_type": "ASA-CF", - "filament_vendor": "Bambu Lab" - }, - "OF0wz84w": { - "filaments": [ - "Qidi/QIDI ABS Rapido 0.6 nozzle" - ], - "name": "QIDI ABS Rapido 0.6 nozzle", - "filament_type": "ABS", - "filament_vendor": "QIDI" - }, - "OF0yFLkY": { - "filaments": [ - "Anycubic/Anycubic ASA" - ], - "name": "Anycubic ASA", - "filament_type": "ASA", - "filament_vendor": "Anycubic" - }, - "OF112FvY": { - "filaments": [ - "Anycubic/Generic PETG Basic" - ], - "name": "Generic PETG Basic", - "filament_type": "PETG", - "filament_vendor": "Generic" - }, - "OF1ID4N1": { - "filaments": [ - "BBL/addnorth PA6 Addlantis" - ], - "name": "addnorth PA6 Addlantis", - "filament_type": "PA6", - "filament_vendor": "addnorth" - }, - "OF1N1qMK": { - "filaments": [ - "BBL/Panchroma PLA UV Shift", - "OrcaFilamentLibrary/Panchroma PLA UV Shift", - "Snapmaker/Panchroma PLA UV Shift" - ], - "name": "Panchroma PLA UV Shift", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF1Pke8t": { - "filaments": [ - "BBL/Overture Easy PLA", - "OrcaFilamentLibrary/Overture Easy PLA" - ], - "name": "Overture Easy PLA", - "filament_type": "PLA", - "filament_vendor": "Overture" - }, - "OF1UNk9P": { - "filaments": [ - "BBL/Generic PP", - "Creality/Generic PP", - "OrcaFilamentLibrary/Generic PP", - "Tiertime/Generic PP" - ], - "name": "Generic PP", - "filament_type": "PP", - "filament_vendor": "Generic" - }, - "OF1W7c76": { - "filaments": [ - "Qidi/QIDI ASA-CF" - ], - "name": "QIDI ASA-CF", - "filament_type": "ASA-CF", - "filament_vendor": "QIDI" - }, - "OF1d7c3A": { - "filaments": [ - "Snapmaker/Snapmaker ASA" - ], - "name": "Snapmaker ASA", - "filament_type": "ASA", - "filament_vendor": "Snapmaker" - }, - "OF1dpPrW": { - "filaments": [ - "Qidi/Bambu PLA" - ], - "name": "Bambu PLA", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OF1hznGB": { - "filaments": [ - "Elegoo/Elegoo PLA PRO", - "OrcaFilamentLibrary/Elegoo PLA PRO" - ], - "name": "Elegoo PLA PRO", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OF20kXr5": { - "filaments": [ - "Elegoo/Elegoo PAHT-CF", - "OrcaFilamentLibrary/Elegoo PAHT-CF" - ], - "name": "Elegoo PAHT-CF", - "filament_type": "PA", - "filament_vendor": "Elegoo" - }, - "OF223rZv": { - "filaments": [ - "Anycubic/Anycubic ABS" - ], - "name": "Anycubic ABS", - "filament_type": "ABS", - "filament_vendor": "Anycubic" - }, - "OF2EB9Iz": { - "filaments": [ - "Volumic/Volumic ASA Ultra" - ], - "name": "Volumic ASA Ultra", - "filament_type": "ASA", - "filament_vendor": "Volumic" - }, - "OF2EK9F1": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Violeta" - ], - "name": "FilAr PLA-mate Violeta", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OF2GCW1l": { - "filaments": [ - "BBL/SUNLU PETG", - "Flashforge/SUNLU PETG", - "OrcaFilamentLibrary/SUNLU PETG", - "Sovol/SUNLU PETG" - ], - "name": "SUNLU PETG", - "filament_type": "PETG", - "filament_vendor": "SUNLU" - }, - "OF2TQpOO": { - "filaments": [ - "Qidi/QIDI PLA Silk" - ], - "name": "QIDI PLA Silk", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OF2VFe4J": { - "filaments": [ - "BBL/Bambu PAHT-CF", - "OrcaFilamentLibrary/Bambu PAHT-CF" - ], - "name": "Bambu PAHT-CF", - "filament_type": "PA-CF", - "filament_vendor": "Bambu Lab" - }, - "OF2Z1nT5": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Azul Imperial" - ], - "name": "FilAr PETG Azul Imperial", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OF2hfMcG": { - "filaments": [ - "OrcaArena/Arena PLA-CF" - ], - "name": "Arena PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Orca Arena" - }, - "OF2pj5l5": { - "filaments": [ - "BBL/Overture Super PLA+", - "OrcaFilamentLibrary/Overture Super PLA+" - ], - "name": "Overture Super PLA+", - "filament_type": "PLA", - "filament_vendor": "Overture" - }, - "OF2xccEe": { - "filaments": [], - "name": "DREMC ASA GF", - "filament_type": "ASA", - "filament_vendor": "DREMC" - }, - "OF30Ftju": { - "filaments": [ - "Elegoo/Elegoo Rapid TPU 95A", - "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" - ], - "name": "Elegoo Rapid TPU 95A", - "filament_type": "TPU", - "filament_vendor": "Elegoo" - }, - "OF342jVN": { - "filaments": [ - "BBL/Bambu PLA Tough+" - ], - "name": "Bambu PLA Tough+", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OF3F63OE": { - "filaments": [ - "re3D/re3D PETG" - ], - "name": "re3D PETG", - "filament_type": "PETG", - "filament_vendor": "re3D" - }, - "OF3IKafc": { - "filaments": [ - "Qidi/QIDI PLA Rapido Matte" - ], - "name": "QIDI PLA Rapido Matte", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OF3OMgrI": { - "filaments": [ - "Creality/CR-Silk" - ], - "name": "CR-Silk", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OF3PDEw3": { - "filaments": [ - "BBL/BETA PLA High Speed" - ], - "name": "BETA PLA High Speed", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OF3WQaKK": { - "filaments": [ - "Creality/CR-PETG" - ], - "name": "CR-PETG", - "filament_type": "PETG", - "filament_vendor": "Creality" - }, - "OF3dJf4E": { - "filaments": [ - "Volumic/Volumic PLA Ultra (Performance)" - ], - "name": "Volumic PLA Ultra (Performance)", - "filament_type": "PLA", - "filament_vendor": "Volumic" - }, - "OF3fwO8b": { - "filaments": [ - "FlyingBear/FlyingBear PLA Basic" - ], - "name": "FlyingBear PLA Basic", - "filament_type": "PLA", - "filament_vendor": "FlyingBear" - }, - "OF3kBrdA": { - "filaments": [ - "Creality/eSUN PETG", - "OrcaFilamentLibrary/eSUN PETG" - ], - "name": "eSUN PETG", - "filament_type": "PETG", - "filament_vendor": "eSUN" - }, - "OF3msXEa": { - "filaments": [ - "Snapmaker/Snapmaker Dual PETG-CF" - ], - "name": "Snapmaker Dual PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Snapmaker" - }, - "OF3ydJTT": { - "filaments": [ - "InfiMech/InfiMech PLA Hyper" - ], - "name": "InfiMech PLA Hyper", - "filament_type": "PLA", - "filament_vendor": "InfiMech" - }, - "OF43Raws": { - "filaments": [ - "Snapmaker/PolyTerra J1 PLA" - ], - "name": "PolyTerra J1 PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF44ERDr": { - "filaments": [ - "Snapmaker/Polymaker General PLA Family" - ], - "name": "Polymaker General PLA Family", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF44VYzK": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Azul Francia" - ], - "name": "FilAr PETG Azul Francia", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OF4APyxe": { - "filaments": [ - "Creality/Hyper PAHT-CF" - ], - "name": "Hyper PAHT-CF", - "filament_type": "PA-CF", - "filament_vendor": "Creality" - }, - "OF4GM5qX": { - "filaments": [ - "Ratrig/Generic ASA BigNozzle" - ], - "name": "Generic ASA BigNozzle", - "filament_type": "ASA", - "filament_vendor": "Generic" - }, - "OF4KsW72": { - "filaments": [], - "name": "FilAr PLA", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OF4Nhggz": { - "filaments": [ - "Artillery/Artillery PLA Basic+" - ], - "name": "Artillery PLA Basic+", - "filament_type": "PLA Basic+", - "filament_vendor": "Artillery" - }, - "OF4PKvem": { - "filaments": [ - "BBL/BETA PLA Fluorescence" - ], - "name": "BETA PLA Fluorescence", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OF4QZANi": { - "filaments": [ - "BBL/BETA TPU Matte" - ], - "name": "BETA TPU Matte", - "filament_type": "TPU", - "filament_vendor": "BETA" - }, - "OF4RvVuU": { - "filaments": [ - "BBL/Bambu PPS-CF" - ], - "name": "Bambu PPS-CF", - "filament_type": "PPS-CF", - "filament_vendor": "Bambu Lab" - }, - "OF4S3To3": { - "filaments": [ - "Qidi/QIDI PETG Rapido" - ], - "name": "QIDI PETG Rapido", - "filament_type": "PETG", - "filament_vendor": "QIDI" - }, - "OF4WB37S": { - "filaments": [ - "Snapmaker/Snapmaker PETG" - ], - "name": "Snapmaker PETG", - "filament_type": "PETG", - "filament_vendor": "Snapmaker" - }, - "OF4XTfoI": { - "filaments": [ - "BBL/BETA PETG Marble" - ], - "name": "BETA PETG Marble", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OF4f8vVp": { - "filaments": [ - "WonderMaker/WonderMaker PET-CF" - ], - "name": "WonderMaker PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "WonderMaker" - }, - "OF4iWKrE": { - "filaments": [ - "Qidi/QIDI PETG-CF" - ], - "name": "QIDI PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "QIDI" - }, - "OF4nQ62r": { - "filaments": [ - "Qidi/QIDI PLA Basic" - ], - "name": "QIDI PLA Basic", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OF4ulo9Y": { - "filaments": [ - "WonderMaker/WonderMaker PVA" - ], - "name": "WonderMaker PVA", - "filament_type": "PVA", - "filament_vendor": "WonderMaker" - }, - "OF53eLVD": { - "filaments": [ - "Blocks/Generic ASA-CF", - "Creality/Generic ASA-CF", - "Elegoo/Generic ASA-CF" - ], - "name": "Generic ASA-CF", - "filament_type": "ASA-CF", - "filament_vendor": "Generic" - }, - "OF54B0S0": { - "filaments": [ - "BBL/Bambu PPA-CF", - "OrcaFilamentLibrary/Bambu PPA-CF" - ], - "name": "Bambu PPA-CF", - "filament_type": "PPA-CF", - "filament_vendor": "Bambu Lab" - }, - "OF54SvEe": { - "filaments": [ - "Prusa/Prusament PA-CF" - ], - "name": "Prusament PA-CF", - "filament_type": "PA11-CF", - "filament_vendor": "Prusa Polymers" - }, - "OF55jHAJ": { - "filaments": [ - "Prusa/Generic ABS HF" - ], - "name": "Generic ABS HF", - "filament_type": "ABS", - "filament_vendor": "Generic" - }, - "OF5B9sUc": { - "filaments": [ - "BBL/Fiberon PA6-GF25" - ], - "name": "Fiberon PA6-GF25", - "filament_type": "PA-GF", - "filament_vendor": "Polymaker" - }, - "OF5BN24W": { - "filaments": [ - "Flashforge/Flashforge PPA-GF" - ], - "name": "Flashforge PPA-GF", - "filament_type": "PPA-GF", - "filament_vendor": "Flashforge" - }, - "OF5BXhHF": { - "filaments": [ - "BBL/BETA PLA High Temp" - ], - "name": "BETA PLA High Temp", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OF5CgdDq": { - "filaments": [ - "BBL/PolyLite PLA", - "OrcaArena/PolyLite PLA", - "OrcaFilamentLibrary/PolyLite PLA", - "Qidi/PolyLite PLA", - "Snapmaker/PolyLite PLA" - ], - "name": "PolyLite PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF5LAnla": { - "filaments": [ - "BBL/BETA PLA Gradient" - ], - "name": "BETA PLA Gradient", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OF5NqBfC": { - "filaments": [ - "Wanhao France/YUMI PETG" - ], - "name": "YUMI PETG", - "filament_type": "PETG", - "filament_vendor": "Yumi" - }, - "OF5P4jgA": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Dorado" - ], - "name": "FilAr PLA Dorado", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OF5PtjTp": { - "filaments": [ - "Anycubic/Anycubic PLA Glow" - ], - "name": "Anycubic PLA Glow", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OF5SJ3jz": { - "filaments": [ - "Flashforge/Flashforge ABS" - ], - "name": "Flashforge ABS", - "filament_type": "ABS", - "filament_vendor": "Flashforge" - }, - "OF5YVJXH": { - "filaments": [ - "Artillery/Artillery ASA" - ], - "name": "Artillery ASA", - "filament_type": "ASA", - "filament_vendor": "Artillery" - }, - "OF5c6nq3": { - "filaments": [ - "Flashforge/Generic TPU-64D" - ], - "name": "Generic TPU-64D", - "filament_type": "TPU-64D", - "filament_vendor": "Generic" - }, - "OF5lGPup": { - "filaments": [ - "WonderMaker/WonderMaker PETG Basic" - ], - "name": "WonderMaker PETG Basic", - "filament_type": "PETG", - "filament_vendor": "WonderMaker" - }, - "OF5nlfKY": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Oro" - ], - "name": "FilAr PLA Oro", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OF5oNRED": { - "filaments": [ - "Eryone/Eryone PP" - ], - "name": "Eryone PP", - "filament_type": "PP", - "filament_vendor": "Eryone" - }, - "OF5oXk4M": { - "filaments": [ - "Anycubic/Polymaker PLA Pro", - "Snapmaker/Polymaker PLA Pro" - ], - "name": "Polymaker PLA Pro", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF5rnhjh": { - "filaments": [], - "name": "FilAr PETG", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OF5tX6va": { - "filaments": [ - "Ratrig/Generic TPU BigNozzle" - ], - "name": "Generic TPU BigNozzle", - "filament_type": "TPU", - "filament_vendor": "Generic" - }, - "OF5umxxT": { - "filaments": [ - "BBL/PolyLite PLA Glow", - "Snapmaker/PolyLite PLA Glow" - ], - "name": "PolyLite PLA Glow", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF5vgi2G": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Azul" - ], - "name": "FilAr PLA-mate Azul", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OF65InrS": { - "filaments": [ - "Snapmaker/Snapmaker TPU" - ], - "name": "Snapmaker TPU", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OF66KUAN": { - "filaments": [ - "Creality/PolySonic PLA" - ], - "name": "PolySonic PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF6ATsCF": { - "filaments": [ - "Snapmaker/Snapmaker Dual PLA-CF" - ], - "name": "Snapmaker Dual PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Snapmaker" - }, - "OF6H51Xx": { - "filaments": [ - "Snapmaker/Polymaker PETG", - "Sovol/Polymaker PETG" - ], - "name": "Polymaker PETG", - "filament_type": "PETG", - "filament_vendor": "Polymaker" - }, - "OF6Ll8lK": { - "filaments": [ - "Elegoo/Elegoo PETG Translucent", - "OrcaFilamentLibrary/Elegoo PETG Translucent" - ], - "name": "Elegoo PETG Translucent", - "filament_type": "PETG", - "filament_vendor": "Elegoo" - }, - "OF6MOPWx": { - "filaments": [ - "Creality/Generic PET", - "Elegoo/Generic PET", - "Flashforge/Generic PET" - ], - "name": "Generic PET", - "filament_type": "PET", - "filament_vendor": "Generic" - }, - "OF6TuVAg": { - "filaments": [ - "Snapmaker/Snapmaker J1 PVA" - ], - "name": "Snapmaker J1 PVA", - "filament_type": "PVA", - "filament_vendor": "Snapmaker" - }, - "OF6Yn69v": { - "filaments": [ - "BBL/BETA TPU 90A" - ], - "name": "BETA TPU 90A", - "filament_type": "TPU", - "filament_vendor": "BETA" - }, - "OF6kj4jI": { - "filaments": [ - "iQ/Fiberthree PACF Pro P2" - ], - "name": "Fiberthree PACF Pro P2", - "filament_type": "PACF Pro", - "filament_vendor": "iQ Materials" - }, - "OF6qAuyi": { - "filaments": [ - "Flashforge/Flashforge PLA Matte" - ], - "name": "Flashforge PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OF6qw3Wb": { - "filaments": [ - "BBL/BETA PAHT-CF" - ], - "name": "BETA PAHT-CF", - "filament_type": "PA-CF", - "filament_vendor": "BETA" - }, - "OF6rdQ6M": { - "filaments": [ - "BBL/Generic PPS-CF", - "Creality/Generic PPS-CF", - "Tiertime/Generic PPS-CF" - ], - "name": "Generic PPS-CF", - "filament_type": "PPS-CF", - "filament_vendor": "Generic" - }, - "OF70zbGS": { - "filaments": [ - "Creality/Hyper L-W PLA" - ], - "name": "Hyper L-W PLA", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OF71b7qO": { - "filaments": [ - "BBL/addnorth PLA E-PLA" - ], - "name": "addnorth PLA E-PLA", - "filament_type": "PLA", - "filament_vendor": "addnorth" - }, - "OF72YYTd": { - "filaments": [ - "Snapmaker/Snapmaker ABS" - ], - "name": "Snapmaker ABS", - "filament_type": "ABS", - "filament_vendor": "Snapmaker" - }, - "OF74KeQR": { - "filaments": [ - "BBL/Generic PHA", - "OrcaFilamentLibrary/Generic PHA", - "Tiertime/Generic PHA" - ], - "name": "Generic PHA", - "filament_type": "PHA", - "filament_vendor": "Generic" - }, - "OF7H3VJM": { - "filaments": [ - "OrcaFilamentLibrary/eSUN PLA-Marble" - ], - "name": "eSUN PLA-Marble", - "filament_type": "PLA", - "filament_vendor": "eSUN" - }, - "OF7OqDp3": { - "filaments": [ - "Tiertime/Tiertime PLA-CF" - ], - "name": "Tiertime PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Tiertime" - }, - "OF7SliVn": { - "filaments": [ - "Snapmaker/PolyLite J1 PLA" - ], - "name": "PolyLite J1 PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OF7c9fln": { - "filaments": [ - "Anycubic/Anycubic PLA Translucent" - ], - "name": "Anycubic PLA Translucent", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OF7lOgYF": { - "filaments": [ - "BBL/Generic PETG HF", - "OrcaFilamentLibrary/Generic PETG HF", - "Prusa/Generic PETG HF" - ], - "name": "Generic PETG HF", - "filament_type": "PETG", - "filament_vendor": "Generic" - }, - "OF7lwj52": { - "filaments": [ - "CoLiDo/CoLiDo PETG" - ], - "name": "CoLiDo PETG", - "filament_type": "PETG", - "filament_vendor": "CoLiDo" - }, - "OF7nBAd3": { - "filaments": [ - "Eryone/Eryone Silk PLA" - ], - "name": "Eryone Silk PLA", - "filament_type": "PLA Silk", - "filament_vendor": "Eryone" - }, - "OF7pjCsO": { - "filaments": [ - "Flashforge/FusRock PAHT" - ], - "name": "FusRock PAHT", - "filament_type": "PAHT", - "filament_vendor": "FusRock" - }, - "OF7tt7DO": { - "filaments": [ - "Cubicon/Cubicon PLA+" - ], - "name": "Cubicon PLA+", - "filament_type": "PLA", - "filament_vendor": "Cubicon" - }, - "OF8GnyFU": { - "filaments": [ - "Creality/Hyper ABS" - ], - "name": "Hyper ABS", - "filament_type": "ABS", - "filament_vendor": "Creality" - }, - "OF8GtyKJ": { - "filaments": [ - "Flashforge/Flashforge TPU-64D" - ], - "name": "Flashforge TPU-64D", - "filament_type": "TPU-64D", - "filament_vendor": "Flashforge" - }, - "OF8Jl6NT": { - "filaments": [ - "Snapmaker/Snapmaker J1 PET" - ], - "name": "Snapmaker J1 PET", - "filament_type": "PET", - "filament_vendor": "Snapmaker" - }, - "OF8O09RG": { - "filaments": [ - "Flashforge/Flashforge HS PLA Burnt Ti" - ], - "name": "Flashforge HS PLA Burnt Ti", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OF8QdQwS": { - "filaments": [ - "BBL/BETA PLA Silk+" - ], - "name": "BETA PLA Silk+", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OF8Tlg47": { - "filaments": [ - "BBL/Generic PPA-GF", - "OrcaFilamentLibrary/Generic PPA-GF", - "Tiertime/Generic PPA-GF" - ], - "name": "Generic PPA-GF", - "filament_type": "PPA-GF", - "filament_vendor": "Generic" - }, - "OF8aFWfQ": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio" - ], - "name": "FilAr PLA Amarillo Lirio", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OF8dCquh": { - "filaments": [ - "Snapmaker/Snapmaker J1 ABS Benchy" - ], - "name": "Snapmaker J1 ABS Benchy", - "filament_type": "ABS", - "filament_vendor": "Snapmaker" - }, - "OF8eaY7j": { - "filaments": [ - "Creality/Generic PA612-CF" - ], - "name": "Generic PA612-CF", - "filament_type": "PA-CF", - "filament_vendor": "Generic" - }, - "OF8jh0Lk": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Marron" - ], - "name": "FilAr PLA-mate Marron", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OF8kJys9": { - "filaments": [ - "Eryone/Eryone PETG" - ], - "name": "Eryone PETG", - "filament_type": "PETG", - "filament_vendor": "Eryone" - }, - "OF8tPByX": { - "filaments": [ - "BBL/Generic PPA-CF", - "OrcaFilamentLibrary/Generic PPA-CF", - "Tiertime/Generic PPA-CF" - ], - "name": "Generic PPA-CF", - "filament_type": "PPA-CF", - "filament_vendor": "Generic" - }, - "OF8wE5l7": { - "filaments": [ - "Artillery/Artillery PETG Basic" - ], - "name": "Artillery PETG Basic", - "filament_type": "PETG Basic", - "filament_vendor": "Artillery" - }, - "OF99UMPq": { - "filaments": [ - "BBL/COEX ABS", - "OrcaFilamentLibrary/COEX ABS" - ], - "name": "COEX ABS", - "filament_type": "ABS", - "filament_vendor": "COEX 3D" - }, - "OF99vXPs": { - "filaments": [], - "name": "DREMC ABS+", - "filament_type": "ABS", - "filament_vendor": "DREMC" - }, - "OF9EHUKK": { - "filaments": [ - "Qidi/QIDI TPU-GF" - ], - "name": "QIDI TPU-GF", - "filament_type": "TPU-GF", - "filament_vendor": "QIDI" - }, - "OF9HCdyQ": { - "filaments": [ - "Afinia/Afinia PLA" - ], - "name": "Afinia PLA", - "filament_type": "PLA", - "filament_vendor": "Afinia" - }, - "OF9OlTWH": { - "filaments": [ - "BBL/Bambu PLA Marble", - "OrcaFilamentLibrary/Bambu PLA Marble" - ], - "name": "Bambu PLA Marble", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OF9PELEb": { - "filaments": [ - "Qidi/QIDI UltraPA-CF25" - ], - "name": "QIDI UltraPA-CF25", - "filament_type": "UltraPA-CF25", - "filament_vendor": "QIDI" - }, - "OF9UJOGF": { - "filaments": [ - "Anycubic/Anycubic PETG-CF" - ], - "name": "Anycubic PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Anycubic" - }, - "OF9cAwMK": { - "filaments": [ - "Flashforge/Flashforge PLA-CF" - ], - "name": "Flashforge PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Flashforge" - }, - "OF9emAI9": { - "filaments": [ - "Ratrig/RatRig PunkFil PETG" - ], - "name": "RatRig PunkFil PETG", - "filament_type": "PETG", - "filament_vendor": "RatRig" - }, - "OFA026vt": { - "filaments": [ - "OrcaArena/Arena PA-CF" - ], - "name": "Arena PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Orca Arena" - }, - "OFAC7Wyu": { - "filaments": [ - "Artillery/Artillery PLA Matte" - ], - "name": "Artillery PLA Matte", - "filament_type": "PLA Matte", - "filament_vendor": "Artillery" - }, - "OFAIBCLJ": { - "filaments": [ - "Elegoo/Generic ABS-CF" - ], - "name": "Generic ABS-CF", - "filament_type": "ABS-CF", - "filament_vendor": "Generic" - }, - "OFAIrQXu": { - "filaments": [ - "Creality/Creality Hyper PLA" - ], - "name": "Creality Hyper PLA", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFANFm4x": { - "filaments": [ - "Qidi/QIDI PLA Rapido Metal" - ], - "name": "QIDI PLA Rapido Metal", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OFAO9A7J": { - "filaments": [ - "Sovol/Sovol Zero PLA Silk HS Nozzle" - ], - "name": "Sovol Zero PLA Silk HS Nozzle", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFAZllAN": { - "filaments": [ - "Artillery/Artillery PLA-CF" - ], - "name": "Artillery PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Artillery" - }, - "OFAc0Pr3": { - "filaments": [ - "BBL/Fiberon PET-CF17" - ], - "name": "Fiberon PET-CF17", - "filament_type": "PET-CF", - "filament_vendor": "Polymaker" - }, - "OFAcJkl1": { - "filaments": [ - "BBL/addnorth PETG-CF Rigid X" - ], - "name": "addnorth PETG-CF Rigid X", - "filament_type": "PETG-CF", - "filament_vendor": "addnorth" - }, - "OFAebKg8": { - "filaments": [ - "Flashforge/Flashforge PLA Metal" - ], - "name": "Flashforge PLA Metal", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFAnyRUI": { - "filaments": [ - "BBL/Bambu Support For PLA", - "OrcaFilamentLibrary/Bambu Support For PLA" - ], - "name": "Bambu Support For PLA", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFAt6ec0": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Marron Oxido" - ], - "name": "FilAr PLA Marron Oxido", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFB5SmWk": { - "filaments": [ - "OrcaFilamentLibrary/Valment PLA Galaxy" - ], - "name": "Valment PLA Galaxy", - "filament_type": "PLA", - "filament_vendor": "Valment" - }, - "OFBBgw7B": { - "filaments": [ - "WonderMaker/WonderMaker PLA Wood" - ], - "name": "WonderMaker PLA Wood", - "filament_type": "PLA", - "filament_vendor": "WonderMaker" - }, - "OFBJAdLw": { - "filaments": [ - "LH/LHS PCTG" - ], - "name": "LHS PCTG", - "filament_type": "PCTG", - "filament_vendor": "LH Stinger" - }, - "OFBLktDy": { - "filaments": [ - "Creality/Soleyin Basic PETG" - ], - "name": "Soleyin Basic PETG", - "filament_type": "PETG", - "filament_vendor": "Creality" - }, - "OFBSW57R": { - "filaments": [ - "BBL/Bambu PLA Aero", - "OrcaFilamentLibrary/Bambu PLA Aero" - ], - "name": "Bambu PLA Aero", - "filament_type": "PLA-AERO", - "filament_vendor": "Bambu Lab" - }, - "OFBUIlZ7": { - "filaments": [ - "Elegoo/Elegoo PLA+", - "OrcaFilamentLibrary/Elegoo PLA+" - ], - "name": "Elegoo PLA+", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFBlFMVp": { - "filaments": [ - "Snapmaker/Snapmaker Dual PETG" - ], - "name": "Snapmaker Dual PETG", - "filament_type": "PETG", - "filament_vendor": "Snapmaker" - }, - "OFBoSWxb": { - "filaments": [ - "BBL/PolyLite PLA Luminous", - "Snapmaker/PolyLite PLA Luminous" - ], - "name": "PolyLite PLA Luminous", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFBsbMMF": { - "filaments": [ - "BBL/addnorth PA-CF Adura X" - ], - "name": "addnorth PA-CF Adura X", - "filament_type": "PA-CF", - "filament_vendor": "addnorth" - }, - "OFBw6eEG": { - "filaments": [ - "BBL/Overture Matte PLA", - "OrcaFilamentLibrary/Overture Matte PLA" - ], - "name": "Overture Matte PLA", - "filament_type": "PLA", - "filament_vendor": "Overture" - }, - "OFC1PzXz": { - "filaments": [ - "Creality/Hyper Luminous" - ], - "name": "Hyper Luminous", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFC5f4Ay": { - "filaments": [ - "RH3D/Generic PCCF" - ], - "name": "Generic PCCF", - "filament_type": "PC-CF", - "filament_vendor": "Generic" - }, - "OFC78WGQ": { - "filaments": [ - "BBL/Panchroma PLA Starlight", - "OrcaFilamentLibrary/Panchroma PLA Starlight", - "Snapmaker/Panchroma PLA Starlight" - ], - "name": "Panchroma PLA Starlight", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFCD8qiU": { - "filaments": [ - "BBL/Generic EVA", - "OrcaFilamentLibrary/Generic EVA", - "Tiertime/Generic EVA" - ], - "name": "Generic EVA", - "filament_type": "EVA", - "filament_vendor": "Generic" - }, - "OFCIUsWh": { - "filaments": [ - "BBL/Panchroma PLA Translucent", - "OrcaFilamentLibrary/Panchroma PLA Translucent", - "Snapmaker/Panchroma PLA Translucent" - ], - "name": "Panchroma PLA Translucent", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFCJpR7a": { - "filaments": [ - "Creality/HP Ultra PLA" - ], - "name": "HP Ultra PLA", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFCZsqXg": { - "filaments": [ - "Creality/Hyper PLA" - ], - "name": "Hyper PLA", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFCccVrQ": { - "filaments": [ - "OrcaFilamentLibrary/PolyTerra Dual PLA", - "Snapmaker/PolyTerra Dual PLA" - ], - "name": "PolyTerra Dual PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFCidU7j": { - "filaments": [ - "OrcaFilamentLibrary/DREMC ABS-GF" - ], - "name": "DREMC ABS-GF", - "filament_type": "ABS-GF", - "filament_vendor": "DREMC" - }, - "OFCjG251": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Verde" - ], - "name": "FilAr PLA-mate Verde", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFCn83wF": { - "filaments": [ - "Flashforge/FusRock S-PAHT" - ], - "name": "FusRock S-PAHT", - "filament_type": "PAHT", - "filament_vendor": "FusRock" - }, - "OFCnywiC": { - "filaments": [ - "Tiertime/Tiertime PET-CF" - ], - "name": "Tiertime PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "Tiertime" - }, - "OFCoRobU": { - "filaments": [ - "OrcaFilamentLibrary/Elas ASA" - ], - "name": "Elas ASA", - "filament_type": "ASA", - "filament_vendor": "Elas" - }, - "OFCp3Bgo": { - "filaments": [ - "Anycubic/Anycubic PLA SE" - ], - "name": "Anycubic PLA SE", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OFCuaCer": { - "filaments": [ - "Volumic/Désactivé" - ], - "name": "Désactivé", - "filament_type": "PLA", - "filament_vendor": "Volumic" - }, - "OFD9taow": { - "filaments": [ - "FlyingBear/FlyingBear PLA Hyper" - ], - "name": "FlyingBear PLA Hyper", - "filament_type": "PLA", - "filament_vendor": "FlyingBear" - }, - "OFDETOM6": { - "filaments": [ - "Creality/eSUN PLA-Matte", - "OrcaFilamentLibrary/eSUN PLA-Matte" - ], - "name": "eSUN PLA-Matte", - "filament_type": "PLA", - "filament_vendor": "eSUN" - }, - "OFDGigEI": { - "filaments": [ - "BBL/Bambu PLA Dynamic", - "OrcaFilamentLibrary/Bambu PLA Dynamic" - ], - "name": "Bambu PLA Dynamic", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFDIrhbu": { - "filaments": [ - "Qidi/QIDI PC/ABS-FR" - ], - "name": "QIDI PC/ABS-FR", - "filament_type": "PC-ABS-FR", - "filament_vendor": "QIDI" - }, - "OFDJU6R3": { - "filaments": [ - "Afinia/Afinia TPU" - ], - "name": "Afinia TPU", - "filament_type": "TPU", - "filament_vendor": "Afinia" - }, - "OFDKIKyw": { - "filaments": [ - "Snapmaker/Snapmaker Dual PVA" - ], - "name": "Snapmaker Dual PVA", - "filament_type": "PVA", - "filament_vendor": "Snapmaker" - }, - "OFDKgoqx": { - "filaments": [ - "Flashforge/Flashforge PLA" - ], - "name": "Flashforge PLA", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFDRpXLZ": { - "filaments": [ - "FlyingBear/Other PETG", - "InfiMech/Other PETG" - ], - "name": "Other PETG", - "filament_type": "PETG", - "filament_vendor": "Other" - }, - "OFDSrzZ8": { - "filaments": [ - "Anker/Generic PLA", - "Anycubic/Generic PLA", - "Artillery/Generic PLA", - "BBL/Generic PLA", - "Blocks/Generic PLA", - "CONSTRUCT3D/Generic PLA", - "Chuanying/Generic PLA", - "Co Print/Generic PLA", - "CoLiDo/Generic PLA", - "Comgrow/Generic PLA", - "Creality/Generic PLA", - "Custom/Generic PLA", - "DeltaMaker/Generic PLA", - "Dremel/Generic PLA", - "Elegoo/Generic PLA", - "FLSun/Generic PLA", - "Flashforge/Generic PLA", - "FlyingBear/Generic PLA", - "Ginger Additive/Generic PLA", - "InfiMech/Generic PLA", - "LONGER/Generic PLA", - "Lulzbot/Generic PLA", - "OrcaArena/Generic PLA", - "OrcaFilamentLibrary/Generic PLA", - "Peopoly/Generic PLA", - "Phrozen/Generic PLA", - "Prusa/Generic PLA", - "Qidi/Generic PLA", - "RH3D/Generic PLA", - "Ratrig/Generic PLA", - "SecKit/Generic PLA", - "Sovol/Generic PLA", - "Tiertime/Generic PLA", - "Vzbot/Generic PLA", - "Z-Bolt/Generic PLA" - ], - "name": "Generic PLA", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFDe8uyM": { - "filaments": [ - "OrcaFilamentLibrary/Valment PLA" - ], - "name": "Valment PLA", - "filament_type": "PLA", - "filament_vendor": "Valment" - }, - "OFDgQaca": { - "filaments": [ - "FlyingBear/FlyingBear PETG" - ], - "name": "FlyingBear PETG", - "filament_type": "PETG", - "filament_vendor": "FlyingBear" - }, - "OFDpW3J8": { - "filaments": [ - "OrcaFilamentLibrary/FILL3D PLA Basic" - ], - "name": "FILL3D PLA Basic", - "filament_type": "PLA", - "filament_vendor": "FILL3D" - }, - "OFDtop41": { - "filaments": [ - "Creality/Generic Support for PA" - ], - "name": "Generic Support for PA", - "filament_type": "PA", - "filament_vendor": "Generic" - }, - "OFDu1qE7": { - "filaments": [ - "Flashforge/FusRock PET-CF" - ], - "name": "FusRock PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "FusRock" - }, - "OFDvXujf": { - "filaments": [ - "Anker/Generic PVA", - "Anycubic/Generic PVA", - "BBL/Generic PVA", - "Blocks/Generic PVA", - "Chuanying/Generic PVA", - "Creality/Generic PVA", - "Custom/Generic PVA", - "FLSun/Generic PVA", - "Flashforge/Generic PVA", - "OrcaArena/Generic PVA", - "OrcaFilamentLibrary/Generic PVA", - "Prusa/Generic PVA", - "Qidi/Generic PVA", - "Ratrig/Generic PVA", - "SecKit/Generic PVA", - "Tiertime/Generic PVA", - "Vzbot/Generic PVA" - ], - "name": "Generic PVA", - "filament_type": "PVA", - "filament_vendor": "Generic" - }, - "OFDvqJ6n": { - "filaments": [ - "OrcaFilamentLibrary/Overture ABS Basic" - ], - "name": "Overture ABS Basic", - "filament_type": "ABS", - "filament_vendor": "Overture" - }, - "OFDwBwO5": { - "filaments": [ - "Prusa/Generic PVA HF" - ], - "name": "Generic PVA HF", - "filament_type": "PVA", - "filament_vendor": "Generic" - }, - "OFDxfPgH": { - "filaments": [ - "BBL/Bambu PLA Sparkle", - "OrcaFilamentLibrary/Bambu PLA Sparkle" - ], - "name": "Bambu PLA Sparkle", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFDxxTpW": { - "filaments": [ - "Flashforge/Flashforge HS PETG" - ], - "name": "Flashforge HS PETG", - "filament_type": "PETG", - "filament_vendor": "Flashforge" - }, - "OFE0NFRh": { - "filaments": [ - "BBL/COEX TPU 60A", - "OrcaFilamentLibrary/COEX TPU 60A" - ], - "name": "COEX TPU 60A", - "filament_type": "TPU", - "filament_vendor": "COEX 3D" - }, - "OFEGNJD4": { - "filaments": [ - "BBL/Bambu PLA Silk", - "OrcaFilamentLibrary/Bambu PLA Silk" - ], - "name": "Bambu PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFEOnBj6": { - "filaments": [ - "Snapmaker/Snapmaker PLA Lite" - ], - "name": "Snapmaker PLA Lite", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFEWYR89": { - "filaments": [ - "Anker/Generic PLA+", - "Qidi/Generic PLA+" - ], - "name": "Generic PLA+", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFEZ449N": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Uva" - ], - "name": "FilAr PLA-mate Uva", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFEZpel7": { - "filaments": [ - "Volumic/PPS Carbone (Performance)" - ], - "name": "PPS Carbone (Performance)", - "filament_type": "PPS-CF", - "filament_vendor": "Volumic" - }, - "OFEabreg": { - "filaments": [ - "Anycubic/Fiberon PA6-CF20", - "BBL/Fiberon PA6-CF20", - "Snapmaker/Fiberon PA6-CF20" - ], - "name": "Fiberon PA6-CF20", - "filament_type": "PA6-CF", - "filament_vendor": "Polymaker" - }, - "OFEbIx49": { - "filaments": [ - "WonderMaker/WonderMaker PLA Marble" - ], - "name": "WonderMaker PLA Marble", - "filament_type": "PLA", - "filament_vendor": "WonderMaker" - }, - "OFEhuUNq": { - "filaments": [], - "name": "DREMC PA12-CF", - "filament_type": "PA-CF", - "filament_vendor": "DREMC" - }, - "OFEj7sca": { - "filaments": [ - "Cubicon/Cubicon PC" - ], - "name": "Cubicon PC", - "filament_type": "PC", - "filament_vendor": "Cubicon" - }, - "OFEjbwqG": { - "filaments": [ - "BBL/PolyTerra PLA+", - "Snapmaker/PolyTerra PLA+" - ], - "name": "PolyTerra PLA+", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFEkPBwx": { - "filaments": [ - "BBL/Bambu PLA Glow", - "OrcaFilamentLibrary/Bambu PLA Glow" - ], - "name": "Bambu PLA Glow", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFEmsric": { - "filaments": [ - "Snapmaker/Snapmaker PA-CF" - ], - "name": "Snapmaker PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Snapmaker" - }, - "OFEnbt6D": { - "filaments": [ - "Peopoly/Peopoly Lancer PLA-C" - ], - "name": "Peopoly Lancer PLA-C", - "filament_type": "PLA", - "filament_vendor": "Peopoly" - }, - "OFEswT5W": { - "filaments": [ - "BBL/Bambu PLA-CF", - "OrcaFilamentLibrary/Bambu PLA-CF" - ], - "name": "Bambu PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Bambu Lab" - }, - "OFEvEfw5": { - "filaments": [ - "Flashforge/Flashforge PA" - ], - "name": "Flashforge PA", - "filament_type": "PA", - "filament_vendor": "Flashforge" - }, - "OFEwRwmL": { - "filaments": [ - "Cubicon/Cubicon PLA" - ], - "name": "Cubicon PLA", - "filament_type": "PLA", - "filament_vendor": "Cubicon" - }, - "OFF3cuzT": { - "filaments": [ - "Creality/Generic TPU 64D" - ], - "name": "Generic TPU 64D", - "filament_type": "TPU", - "filament_vendor": "Generic" - }, - "OFF5o7b2": { - "filaments": [ - "BBL/BETA PLA Youth" - ], - "name": "BETA PLA Youth", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFF9OKoY": { - "filaments": [ - "BBL/PolyLite PLA Pro", - "OrcaFilamentLibrary/PolyLite PLA Pro", - "Snapmaker/PolyLite PLA Pro" - ], - "name": "PolyLite PLA Pro", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFF9cgY5": { - "filaments": [ - "Snapmaker/Snapmaker PLA Matte" - ], - "name": "Snapmaker PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFFAWVf0": { - "filaments": [ - "Qidi/QIDI PC-ABS-FR" - ], - "name": "QIDI PC-ABS-FR", - "filament_type": "PC-ABS-FR", - "filament_vendor": "QIDI" - }, - "OFFFg2Pf": { - "filaments": [ - "Flashforge/Flashforge ASA Basic" - ], - "name": "Flashforge ASA Basic", - "filament_type": "ASA", - "filament_vendor": "Flashforge" - }, - "OFFNYwWR": { - "filaments": [ - "BBL/Bambu PA-CF", - "OrcaFilamentLibrary/Bambu PA-CF" - ], - "name": "Bambu PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Bambu Lab" - }, - "OFFP4ORR": { - "filaments": [ - "Creality/Creality Hyper ABS" - ], - "name": "Creality Hyper ABS", - "filament_type": "ABS", - "filament_vendor": "Creality" - }, - "OFFX1DRD": { - "filaments": [ - "FlyingBear/FlyingBear PC" - ], - "name": "FlyingBear PC", - "filament_type": "PC", - "filament_vendor": "FlyingBear" - }, - "OFFZ458u": { - "filaments": [ - "Snapmaker/Fiberon PA612-ESD" - ], - "name": "Fiberon PA612-ESD", - "filament_type": "PA-CF", - "filament_vendor": "Polymaker" - }, - "OFFbQscs": { - "filaments": [ - "Creality/eSUN PETG-Basic" - ], - "name": "eSUN PETG-Basic", - "filament_type": "PETG", - "filament_vendor": "eSUN" - }, - "OFFbSnCD": { - "filaments": [ - "BBL/Bambu PLA Translucent" - ], - "name": "Bambu PLA Translucent", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFFfJ09N": { - "filaments": [ - "BBL/BETA PETG Glow" - ], - "name": "BETA PETG Glow", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFFkCLBl": { - "filaments": [ - "BBL/Panchroma PLA Galaxy", - "OrcaFilamentLibrary/Panchroma PLA Galaxy", - "Snapmaker/Panchroma PLA Galaxy" - ], - "name": "Panchroma PLA Galaxy", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFFvzqcd": { - "filaments": [ - "BBL/Bambu PETG Basic", - "OrcaFilamentLibrary/Bambu PETG Basic" - ], - "name": "Bambu PETG Basic", - "filament_type": "PETG", - "filament_vendor": "Bambu Lab" - }, - "OFFwJWea": { - "filaments": [ - "Anycubic/Anycubic PLA Silk" - ], - "name": "Anycubic PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OFG0kOKX": { - "filaments": [ - "Volumic/Volumic PETG Ultra" - ], - "name": "Volumic PETG Ultra", - "filament_type": "PETG", - "filament_vendor": "Volumic" - }, - "OFG2RkhN": { - "filaments": [ - "Creality/CR-TPU" - ], - "name": "CR-TPU", - "filament_type": "TPU", - "filament_vendor": "Creality" - }, - "OFG4do34": { - "filaments": [ - "Qidi/Qidi ASA-Aero" - ], - "name": "Qidi ASA-Aero", - "filament_type": "ASA-AERO", - "filament_vendor": "QIDI" - }, - "OFGJ1nxs": { - "filaments": [ - "FlyingBear/Other PLA", - "InfiMech/Other PLA" - ], - "name": "Other PLA", - "filament_type": "PLA", - "filament_vendor": "Other" - }, - "OFGVwfK0": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Gris" - ], - "name": "FilAr PLA-mate Gris", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFGVxj2A": { - "filaments": [ - "BBL/BETA PLA Wood" - ], - "name": "BETA PLA Wood", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFGc9l16": { - "filaments": [ - "BBL/BETA PLA Glow" - ], - "name": "BETA PLA Glow", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFGcLA5R": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Beige" - ], - "name": "FilAr PLA-mate Beige", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFGcMkEB": { - "filaments": [ - "Creality/HP-TPU" - ], - "name": "HP-TPU", - "filament_type": "TPU", - "filament_vendor": "Creality" - }, - "OFGdP6Na": { - "filaments": [ - "Volumic/Volumic PVA" - ], - "name": "Volumic PVA", - "filament_type": "PVA", - "filament_vendor": "Volumic" - }, - "OFGkyftV": { - "filaments": [ - "BBL/Overture Silk PLA", - "OrcaFilamentLibrary/Overture Silk PLA" - ], - "name": "Overture Silk PLA", - "filament_type": "PLA", - "filament_vendor": "Overture" - }, - "OFGwT5Av": { - "filaments": [ - "Creality/Creality Hyper PLA-CF" - ], - "name": "Creality Hyper PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Creality" - }, - "OFGwZmgS": { - "filaments": [ - "Creality/CR-ABS" - ], - "name": "CR-ABS", - "filament_type": "ABS", - "filament_vendor": "Creality" - }, - "OFGxC8gB": { - "filaments": [ - "Creality/CR-Wood" - ], - "name": "CR-Wood", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFGxuI0n": { - "filaments": [ - "Flashforge/Flashforge PA-CF" - ], - "name": "Flashforge PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Flashforge" - }, - "OFH2nN08": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850" - ], - "name": "Eolas Prints PLA INGEO 850", - "filament_type": "PLA", - "filament_vendor": "Eolas Prints" - }, - "OFH57ibH": { - "filaments": [ - "Snapmaker/Polymaker Silk PLA Family" - ], - "name": "Polymaker Silk PLA Family", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFH7b12v": { - "filaments": [ - "Creality/Generic PAHT-CF" - ], - "name": "Generic PAHT-CF", - "filament_type": "PA-CF", - "filament_vendor": "Generic" - }, - "OFHAccHz": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" - ], - "name": "FilAr PLA Blanco Antartida", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFHHwrd1": { - "filaments": [ - "BBL/addnorth PETG Base" - ], - "name": "addnorth PETG Base", - "filament_type": "PETG", - "filament_vendor": "addnorth" - }, - "OFHWSM21": { - "filaments": [ - "BBL/Fiberon PET-CF", - "OrcaFilamentLibrary/Fiberon PET-CF" - ], - "name": "Fiberon PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "Polymaker" - }, - "OFHa48An": { - "filaments": [ - "BBL/Bambu PET-CF", - "OrcaFilamentLibrary/Bambu PET-CF" - ], - "name": "Bambu PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "Bambu Lab" - }, - "OFHaYaB1": { - "filaments": [ - "Creality/eSUN PET-Basic" - ], - "name": "eSUN PET-Basic", - "filament_type": "PET", - "filament_vendor": "eSUN" - }, - "OFHf2lKK": { - "filaments": [ - "FlyingBear/FlyingBear TPU Basic" - ], - "name": "FlyingBear TPU Basic", - "filament_type": "TPU", - "filament_vendor": "FlyingBear" - }, - "OFHfzQXo": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PLA Transition" - ], - "name": "Eolas Prints PLA Transition", - "filament_type": "PLA", - "filament_vendor": "Eolas Prints" - }, - "OFHknN4v": { - "filaments": [ - "Anycubic/Polymaker PLA Pro Metallic", - "Snapmaker/Polymaker PLA Pro Metallic" - ], - "name": "Polymaker PLA Pro Metallic", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFHmPYRy": { - "filaments": [ - "BBL/SUNLU PLA+ 2.0", - "Flashforge/SUNLU PLA+ 2.0", - "OrcaFilamentLibrary/SUNLU PLA+ 2.0" - ], - "name": "SUNLU PLA+ 2.0", - "filament_type": "PLA", - "filament_vendor": "SUNLU" - }, - "OFI2MKy7": { - "filaments": [ - "BBL/BETA PEBA 90A" - ], - "name": "BETA PEBA 90A", - "filament_type": "TPU", - "filament_vendor": "BETA" - }, - "OFI6WZpn": { - "filaments": [ - "OrcaArena/Arena Support W" - ], - "name": "Arena Support W", - "filament_type": "PLA", - "filament_vendor": "Orca Arena" - }, - "OFIBXa0k": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Rojo" - ], - "name": "FilAr PLA-mate Rojo", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFIBbYO5": { - "filaments": [ - "BBL/Bambu TPU for AMS" - ], - "name": "Bambu TPU for AMS", - "filament_type": "TPU-AMS", - "filament_vendor": "Bambu Lab" - }, - "OFIE3vOf": { - "filaments": [ - "Anycubic/Anycubic PLA Matte" - ], - "name": "Anycubic PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OFIK2H3G": { - "filaments": [ - "Flashforge/Flashforge HS PLA" - ], - "name": "Flashforge HS PLA", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFIKZxPF": { - "filaments": [ - "Creality/Generic PLA Wood" - ], - "name": "Generic PLA Wood", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFIPjqHt": { - "filaments": [ - "OrcaArena/Arena Support G" - ], - "name": "Arena Support G", - "filament_type": "PA", - "filament_vendor": "Orca Arena" - }, - "OFIRUqWi": { - "filaments": [ - "Creality/eSUN PLA-Silk" - ], - "name": "eSUN PLA-Silk", - "filament_type": "PLA", - "filament_vendor": "eSUN" - }, - "OFIVWJPm": { - "filaments": [ - "InfiMech/InfiMech TPU" - ], - "name": "InfiMech TPU", - "filament_type": "TPU", - "filament_vendor": "InfiMech" - }, - "OFIWMSGX": { - "filaments": [ - "Qidi/HATCHBOX PETG" - ], - "name": "HATCHBOX PETG", - "filament_type": "PETG", - "filament_vendor": "HATCHBOX" - }, - "OFIZMQwM": { - "filaments": [ - "LH/LHS TPU" - ], - "name": "LHS TPU", - "filament_type": "TPU", - "filament_vendor": "LH Stinger" - }, - "OFIamQnD": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Gris Ceniza" - ], - "name": "FilAr PLA Gris Ceniza", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFIegjmD": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints TPU Flex D53" - ], - "name": "Eolas Prints TPU Flex D53", - "filament_type": "TPU", - "filament_vendor": "Eolas Prints" - }, - "OFIfnzxC": { - "filaments": [ - "BBL/Bambu Support For PLA/PETG", - "OrcaFilamentLibrary/Bambu Support For PLA/PETG" - ], - "name": "Bambu Support For PLA/PETG", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFIgbDHq": { - "filaments": [ - "Anycubic/Anycubic PLA Luminous" - ], - "name": "Anycubic PLA Luminous", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OFIxOuOu": { - "filaments": [ - "BBL/PolyLite PLA Starlight", - "Snapmaker/PolyLite PLA Starlight" - ], - "name": "PolyLite PLA Starlight", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFJ3F2jm": { - "filaments": [ - "Flashforge/Flashforge PLA Basic" - ], - "name": "Flashforge PLA Basic", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFJ3HRsR": { - "filaments": [ - "OrcaArena/Arena ABS" - ], - "name": "Arena ABS", - "filament_type": "ABS", - "filament_vendor": "Orca Arena" - }, - "OFJHBEGD": { - "filaments": [], - "name": "DREMC PLA+ HS", - "filament_type": "PLA", - "filament_vendor": "DREMC" - }, - "OFJJ0Ar3": { - "filaments": [ - "Flashforge/Flashforge PLA Galaxy" - ], - "name": "Flashforge PLA Galaxy", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFJNeELv": { - "filaments": [ - "OrcaFilamentLibrary/FILL3D PA" - ], - "name": "FILL3D PA", - "filament_type": "PA", - "filament_vendor": "FILL3D" - }, - "OFJOFnOZ": { - "filaments": [ - "BBL/AliZ PETG-CF", - "OrcaFilamentLibrary/AliZ PETG-CF" - ], - "name": "AliZ PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Aliz" - }, - "OFJQDUk3": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Cristal" - ], - "name": "FilAr PETG Cristal", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFJS560n": { - "filaments": [], - "name": "Flashforge ASA", - "filament_type": "ASA", - "filament_vendor": "Flashforge" - }, - "OFJWKoYG": { - "filaments": [ - "iQ/Material4Print ABS Natur P1" - ], - "name": "Material4Print ABS Natur P1", - "filament_type": "ABS Material4Print Natur", - "filament_vendor": "iQ Materials" - }, - "OFJYpVAQ": { - "filaments": [ - "Flashforge/Generic TPU-90A" - ], - "name": "Generic TPU-90A", - "filament_type": "TPU-90A", - "filament_vendor": "Generic" - }, - "OFJgijky": { - "filaments": [ - "BBL/PolyLite CosPLA", - "Snapmaker/PolyLite CosPLA" - ], - "name": "PolyLite CosPLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFJhT2fd": { - "filaments": [ - "Snapmaker/Snapmaker Dual ABS" - ], - "name": "Snapmaker Dual ABS", - "filament_type": "ABS", - "filament_vendor": "Snapmaker" - }, - "OFJnEaCp": { - "filaments": [ - "BBL/BETA PLA Transparent" - ], - "name": "BETA PLA Transparent", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFJrvXth": { - "filaments": [ - "Snapmaker/Snapmaker ABS Benchy" - ], - "name": "Snapmaker ABS Benchy", - "filament_type": "ABS", - "filament_vendor": "Snapmaker" - }, - "OFJs1ToM": { - "filaments": [ - "BBL/COEX NYLEX UNFILLED" - ], - "name": "COEX NYLEX UNFILLED", - "filament_type": "PA", - "filament_vendor": "COEX 3D" - }, - "OFJu1XwK": { - "filaments": [ - "OrcaFilamentLibrary/NIT PETG" - ], - "name": "NIT PETG", - "filament_type": "PETG", - "filament_vendor": "NIT" - }, - "OFJxSqO4": { - "filaments": [ - "Wanhao France/YUMI PLA Direct Drive" - ], - "name": "YUMI PLA Direct Drive", - "filament_type": "PLA", - "filament_vendor": "Yumi" - }, - "OFK7830e": { - "filaments": [ - "BBL/BETA TPU 95A" - ], - "name": "BETA TPU 95A", - "filament_type": "TPU", - "filament_vendor": "BETA" - }, - "OFK8XHPn": { - "filaments": [ - "Qidi/Overture ABS" - ], - "name": "Overture ABS", - "filament_type": "ABS", - "filament_vendor": "Overture" - }, - "OFKIQO2W": { - "filaments": [ - "Qidi/QIDI PLA Rapido" - ], - "name": "QIDI PLA Rapido", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OFKKajh6": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Gris Plata" - ], - "name": "FilAr PLA Gris Plata", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFKTGKJU": { - "filaments": [ - "Flashforge/FusRock PET" - ], - "name": "FusRock PET", - "filament_type": "PET", - "filament_vendor": "FusRock" - }, - "OFKTSiYF": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Blanco Calido" - ], - "name": "FilAr PLA Blanco Calido", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFKUEXPA": { - "filaments": [ - "Snapmaker/Snapmaker Dual ASA" - ], - "name": "Snapmaker Dual ASA", - "filament_type": "ASA", - "filament_vendor": "Snapmaker" - }, - "OFKW5hEW": { - "filaments": [ - "Flashforge/FusRock PAHT-CF" - ], - "name": "FusRock PAHT-CF", - "filament_type": "PAHT-CF", - "filament_vendor": "FusRock" - }, - "OFKWWgyp": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Carpincho" - ], - "name": "FilAr PLA Carpincho", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFKYBAWe": { - "filaments": [ - "BBL/BETA PLA Marble" - ], - "name": "BETA PLA Marble", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFKZ9skj": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Naranja Tigre" - ], - "name": "FilAr PLA Naranja Tigre", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFKbdiiJ": { - "filaments": [ - "Creality/PolySonic PLA Pro" - ], - "name": "PolySonic PLA Pro", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFKfJTwL": { - "filaments": [ - "Qidi/QIDI PET-CF" - ], - "name": "QIDI PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "QIDI" - }, - "OFKgmsqE": { - "filaments": [ - "Qidi/QIDI PAHT-CF" - ], - "name": "QIDI PAHT-CF", - "filament_type": "PAHT-CF", - "filament_vendor": "QIDI" - }, - "OFKhMPeX": { - "filaments": [ - "BBL/Bambu PC", - "OrcaFilamentLibrary/Bambu PC" - ], - "name": "Bambu PC", - "filament_type": "PC", - "filament_vendor": "Bambu Lab" - }, - "OFKiSMWR": { - "filaments": [ - "BBL/Panchroma PLA Marble", - "OrcaFilamentLibrary/Panchroma PLA Marble", - "Snapmaker/Panchroma PLA Marble" - ], - "name": "Panchroma PLA Marble", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFKyNkQz": { - "filaments": [ - "BBL/BETA PETG UV Color Change" - ], - "name": "BETA PETG UV Color Change", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFL9aRjN": { - "filaments": [ - "Snapmaker/Snapmaker PETG HF" - ], - "name": "Snapmaker PETG HF", - "filament_type": "PETG", - "filament_vendor": "Snapmaker" - }, - "OFLAXKqP": { - "filaments": [ - "WonderMaker/WonderMaker TPU 95A" - ], - "name": "WonderMaker TPU 95A", - "filament_type": "TPU", - "filament_vendor": "WonderMaker" - }, - "OFLC1oRH": { - "filaments": [ - "Flashforge/Flashforge PPA-CF" - ], - "name": "Flashforge PPA-CF", - "filament_type": "PPA-CF", - "filament_vendor": "Flashforge" - }, - "OFLJ8S6I": { - "filaments": [ - "BBL/SUNLU Wood PLA", - "Flashforge/SUNLU Wood PLA", - "OrcaFilamentLibrary/SUNLU Wood PLA" - ], - "name": "SUNLU Wood PLA", - "filament_type": "PLA", - "filament_vendor": "SUNLU" - }, - "OFLNgV3C": { - "filaments": [], - "name": "DREMC ASA", - "filament_type": "ASA", - "filament_vendor": "DREMC" - }, - "OFLOf6Sc": { - "filaments": [ - "Tiertime/Tiertime TPU 95A" - ], - "name": "Tiertime TPU 95A", - "filament_type": "TPU", - "filament_vendor": "Tiertime" - }, - "OFLPAxz3": { - "filaments": [ - "Anker/Generic ASA", - "Anycubic/Generic ASA", - "Artillery/Generic ASA", - "BBL/Generic ASA", - "Blocks/Generic ASA", - "Chuanying/Generic ASA", - "Creality/Generic ASA", - "Custom/Generic ASA", - "Elegoo/Generic ASA", - "FLSun/Generic ASA", - "Flashforge/Generic ASA", - "OrcaArena/Generic ASA", - "OrcaFilamentLibrary/Generic ASA", - "Prusa/Generic ASA", - "Qidi/Generic ASA", - "RH3D/Generic ASA", - "Ratrig/Generic ASA", - "SecKit/Generic ASA", - "Tiertime/Generic ASA", - "Vzbot/Generic ASA" - ], - "name": "Generic ASA", - "filament_type": "ASA", - "filament_vendor": "Generic" - }, - "OFLTYJW0": { - "filaments": [ - "Snapmaker/Snapmaker PLA Translucent" - ], - "name": "Snapmaker PLA Translucent", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFLXvuMr": { - "filaments": [ - "Elegoo/Elegoo Rapid PETG", - "OrcaFilamentLibrary/Elegoo Rapid PETG" - ], - "name": "Elegoo Rapid PETG", - "filament_type": "PETG", - "filament_vendor": "Elegoo" - }, - "OFLYDngx": { - "filaments": [ - "Qidi/Bambu PETG" - ], - "name": "Bambu PETG", - "filament_type": "PETG", - "filament_vendor": "Bambu Lab" - }, - "OFLakOUI": { - "filaments": [ - "Anker/Generic PC", - "Anycubic/Generic PC", - "BBL/Generic PC", - "Blocks/Generic PC", - "Creality/Generic PC", - "Custom/Generic PC", - "Elegoo/Generic PC", - "FLSun/Generic PC", - "FlyingBear/Generic PC", - "InfiMech/Generic PC", - "OrcaArena/Generic PC", - "OrcaFilamentLibrary/Generic PC", - "Prusa/Generic PC", - "Qidi/Generic PC", - "Ratrig/Generic PC", - "SecKit/Generic PC", - "Sovol/Generic PC", - "Tiertime/Generic PC", - "Vzbot/Generic PC" - ], - "name": "Generic PC", - "filament_type": "PC", - "filament_vendor": "Generic" - }, - "OFLbXwoL": { - "filaments": [ - "Artillery/Artillery PLA Silk" - ], - "name": "Artillery PLA Silk", - "filament_type": "PLA Silk", - "filament_vendor": "Artillery" - }, - "OFLbdkrE": { - "filaments": [ - "Snapmaker/Snapmaker J1 PLA Eco" - ], - "name": "Snapmaker J1 PLA Eco", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFLcd093": { - "filaments": [ - "Elegoo/Elegoo PETG", - "OrcaFilamentLibrary/Elegoo PETG" - ], - "name": "Elegoo PETG", - "filament_type": "PETG", - "filament_vendor": "Elegoo" - }, - "OFLfywkp": { - "filaments": [ - "Afinia/Afinia ABS+" - ], - "name": "Afinia ABS+", - "filament_type": "ABS", - "filament_vendor": "Afinia" - }, - "OFLgwqp2": { - "filaments": [ - "Creality/Hyper PETG-GF" - ], - "name": "Hyper PETG-GF", - "filament_type": "PETG-GF", - "filament_vendor": "Creality" - }, - "OFLjDYxH": { - "filaments": [ - "BBL/addnorth PLA X-PLA High Speed" - ], - "name": "addnorth PLA X-PLA High Speed", - "filament_type": "PLA", - "filament_vendor": "addnorth" - }, - "OFLqgSuX": { - "filaments": [ - "BBL/BETA PLA-CF" - ], - "name": "BETA PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "BETA" - }, - "OFLzx3J4": { - "filaments": [ - "Creality/Hyper Marble" - ], - "name": "Hyper Marble", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFM0xjBG": { - "filaments": [ - "Creality/CR-PLA Matte" - ], - "name": "CR-PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFM4iJlv": { - "filaments": [ - "Creality/Generic PA12-CF" - ], - "name": "Generic PA12-CF", - "filament_type": "PA-CF", - "filament_vendor": "Generic" - }, - "OFM91vZs": { - "filaments": [ - "BBL/Overture ASA", - "OrcaFilamentLibrary/Overture ASA" - ], - "name": "Overture ASA", - "filament_type": "ASA", - "filament_vendor": "Overture" - }, - "OFMDHOcT": { - "filaments": [ - "Qidi/QIDI TPU-Aero" - ], - "name": "QIDI TPU-Aero", - "filament_type": "TPU-AERO", - "filament_vendor": "QIDI" - }, - "OFMK5gVo": { - "filaments": [ - "WonderMaker/WonderMaker PLA Basic" - ], - "name": "WonderMaker PLA Basic", - "filament_type": "PLA", - "filament_vendor": "WonderMaker" - }, - "OFML2aVd": { - "filaments": [ - "Anycubic/Anycubic TPU 95A" - ], - "name": "Anycubic TPU 95A", - "filament_type": "TPU", - "filament_vendor": "Anycubic" - }, - "OFMSvS8z": { - "filaments": [ - "Artillery/Artillery PA" - ], - "name": "Artillery PA", - "filament_type": "PA", - "filament_vendor": "Artillery" - }, - "OFMTK0UC": { - "filaments": [ - "BBL/Bambu Support For PA/PET", - "OrcaFilamentLibrary/Bambu Support For PA/PET" - ], - "name": "Bambu Support For PA/PET", - "filament_type": "PA", - "filament_vendor": "Bambu Lab" - }, - "OFMUWNkp": { - "filaments": [ - "BBL/SUNLU PLA+", - "Flashforge/SUNLU PLA+", - "OrcaFilamentLibrary/SUNLU PLA+" - ], - "name": "SUNLU PLA+", - "filament_type": "PLA", - "filament_vendor": "SUNLU" - }, - "OFMZvH0z": { - "filaments": [ - "BBL/Overture Rock PLA", - "OrcaFilamentLibrary/Overture Rock PLA" - ], - "name": "Overture Rock PLA", - "filament_type": "PLA", - "filament_vendor": "Overture" - }, - "OFMjtqTC": { - "filaments": [ - "BBL/Bambu PLA Wood", - "OrcaFilamentLibrary/Bambu PLA Wood" - ], - "name": "Bambu PLA Wood", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFMkAW6r": { - "filaments": [ - "Flashforge/Flashforge PLA Color Change" - ], - "name": "Flashforge PLA Color Change", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFMpxamb": { - "filaments": [ - "Flashforge/Flashforge PETG" - ], - "name": "Flashforge PETG", - "filament_type": "PETG", - "filament_vendor": "Flashforge" - }, - "OFMsDGbs": { - "filaments": [ - "Anycubic/Anycubic TPU" - ], - "name": "Anycubic TPU", - "filament_type": "TPU", - "filament_vendor": "Anycubic" - }, - "OFMuXBmO": { - "filaments": [ - "OrcaFilamentLibrary/Elas PLA Basic" - ], - "name": "Elas PLA Basic", - "filament_type": "PLA", - "filament_vendor": "Elas" - }, - "OFMzRg65": { - "filaments": [ - "BBL/BETA PLA PRO" - ], - "name": "BETA PLA PRO", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFN8QBhu": { - "filaments": [ - "BBL/addnorth PLA Wood" - ], - "name": "addnorth PLA Wood", - "filament_type": "PLA", - "filament_vendor": "addnorth" - }, - "OFNBlAPT": { - "filaments": [ - "OrcaArena/Arena PETG Basic" - ], - "name": "Arena PETG Basic", - "filament_type": "PETG", - "filament_vendor": "Orca Arena" - }, - "OFNGTH3w": { - "filaments": [ - "Tiertime/Tiertime PLA" - ], - "name": "Tiertime PLA", - "filament_type": "PLA", - "filament_vendor": "Tiertime" - }, - "OFNQKF0M": { - "filaments": [ - "Tiertime/Tiertime ABS" - ], - "name": "Tiertime ABS", - "filament_type": "ABS", - "filament_vendor": "Tiertime" - }, - "OFNSYu5h": { - "filaments": [ - "Volumic/Volumic PP Ultra (Performance)" - ], - "name": "Volumic PP Ultra (Performance)", - "filament_type": "PP", - "filament_vendor": "Volumic" - }, - "OFNU9YIW": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Azul Boreal" - ], - "name": "FilAr PETG Azul Boreal", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFNemJM6": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Cobre" - ], - "name": "FilAr PLA Cobre", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFNjku08": { - "filaments": [ - "CONSTRUCT3D/Generic High Flow PETG" - ], - "name": "Generic High Flow PETG", - "filament_type": "PETG", - "filament_vendor": "Generic" - }, - "OFNk8AvA": { - "filaments": [ - "BBL/BETA PETG Gradient" - ], - "name": "BETA PETG Gradient", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFNk8bxk": { - "filaments": [ - "BBL/Bambu PA6-GF", - "OrcaFilamentLibrary/Bambu PA6-GF" - ], - "name": "Bambu PA6-GF", - "filament_type": "PA-GF", - "filament_vendor": "Bambu Lab" - }, - "OFNstOna": { - "filaments": [ - "Eryone/Eryone PETG-CF" - ], - "name": "Eryone PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Eryone" - }, - "OFNvBIL0": { - "filaments": [ - "Creality/Hyper PPA-CF" - ], - "name": "Hyper PPA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Creality" - }, - "OFO1GEq6": { - "filaments": [ - "BBL/Panchroma PLA Neon", - "OrcaFilamentLibrary/Panchroma PLA Neon", - "Snapmaker/Panchroma PLA Neon" - ], - "name": "Panchroma PLA Neon", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFO5djrM": { - "filaments": [ - "Chuanying/Generic PETG-CF10", - "Flashforge/Generic PETG-CF10" - ], - "name": "Generic PETG-CF10", - "filament_type": "PETG-CF", - "filament_vendor": "Generic" - }, - "OFO6GMJ3": { - "filaments": [ - "BBL/addnorth TPU EasyFlex" - ], - "name": "addnorth TPU EasyFlex", - "filament_type": "TPU", - "filament_vendor": "addnorth" - }, - "OFOABq7t": { - "filaments": [ - "BBL/AliZ PETG-Metal", - "OrcaFilamentLibrary/AliZ PETG-Metal" - ], - "name": "AliZ PETG-Metal", - "filament_type": "PETG", - "filament_vendor": "Aliz" - }, - "OFOAdMCB": { - "filaments": [ - "OrcaArena/Arena PLA Metal" - ], - "name": "Arena PLA Metal", - "filament_type": "PLA", - "filament_vendor": "Orca Arena" - }, - "OFOHOf2F": { - "filaments": [ - "Creality/eSUN PLA-HS" - ], - "name": "eSUN PLA-HS", - "filament_type": "PLA", - "filament_vendor": "eSUN" - }, - "OFOJPAAS": { - "filaments": [ - "iQ/VXL90 TiQ2 P2" - ], - "name": "VXL90 TiQ2 P2", - "filament_type": "VXL90 Xioneer", - "filament_vendor": "iQ Materials" - }, - "OFOPU1xv": { - "filaments": [ - "Snapmaker/Snapmaker PLA Full Spectrum" - ], - "name": "Snapmaker PLA Full Spectrum", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFOQCfVa": { - "filaments": [ - "BBL/addnorth PLA Premium Silk" - ], - "name": "addnorth PLA Premium Silk", - "filament_type": "PLA", - "filament_vendor": "addnorth" - }, - "OFObG16Q": { - "filaments": [ - "InfiMech/InfiMech PLA Basic" - ], - "name": "InfiMech PLA Basic", - "filament_type": "PLA", - "filament_vendor": "InfiMech" - }, - "OFObyktP": { - "filaments": [ - "Tiertime/Tiertime PETG" - ], - "name": "Tiertime PETG", - "filament_type": "PETG", - "filament_vendor": "Tiertime" - }, - "OFOiJfLM": { - "filaments": [ - "OrcaFilamentLibrary/FILL3D PETG CF" - ], - "name": "FILL3D PETG CF", - "filament_type": "PETG-CF", - "filament_vendor": "FILL3D" - }, - "OFOnSNt3": { - "filaments": [ - "Artillery/Artillery PETG-CF" - ], - "name": "Artillery PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Artillery" - }, - "OFOsHDnB": { - "filaments": [ - "Elegoo/Elegoo PETG PRO", - "OrcaFilamentLibrary/Elegoo PETG PRO" - ], - "name": "Elegoo PETG PRO", - "filament_type": "PETG", - "filament_vendor": "Elegoo" - }, - "OFOuEEvv": { - "filaments": [ - "Qidi/QIDI ABS Rapido 0.2 nozzle" - ], - "name": "QIDI ABS Rapido 0.2 nozzle", - "filament_type": "ABS", - "filament_vendor": "QIDI" - }, - "OFOvv91M": { - "filaments": [ - "BBL/PolyLite ABS", - "OrcaFilamentLibrary/PolyLite ABS", - "Qidi/PolyLite ABS" - ], - "name": "PolyLite ABS", - "filament_type": "ABS", - "filament_vendor": "Polymaker" - }, - "OFOwQuZM": { - "filaments": [ - "Snapmaker/Snapmaker PETG-CF" - ], - "name": "Snapmaker PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Snapmaker" - }, - "OFOzwywz": { - "filaments": [ - "Eryone/Eryone ABS" - ], - "name": "Eryone ABS", - "filament_type": "ABS", - "filament_vendor": "Eryone" - }, - "OFP26zNb": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda" - ], - "name": "FilAr PLA Violeta Jacaranda", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFPHLnoe": { - "filaments": [ - "Creality/HP-ASA" - ], - "name": "HP-ASA", - "filament_type": "ASA", - "filament_vendor": "Creality" - }, - "OFPWPlSC": { - "filaments": [ - "OrcaFilamentLibrary/FILL3D PP" - ], - "name": "FILL3D PP", - "filament_type": "PP", - "filament_vendor": "FILL3D" - }, - "OFPYDWgC": { - "filaments": [ - "Peopoly/Peopoly Lancer PET-CF" - ], - "name": "Peopoly Lancer PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "Peopoly" - }, - "OFPbyOSk": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi" - ], - "name": "FilAr PETG Rojo Carmesi", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFPc4zVY": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870" - ], - "name": "Eolas Prints PLA INGEO 870", - "filament_type": "PLA", - "filament_vendor": "Eolas Prints" - }, - "OFPkCJKE": { - "filaments": [ - "BBL/Panchroma PLA Satin", - "Creality/Panchroma PLA Satin", - "OrcaFilamentLibrary/Panchroma PLA Satin", - "Snapmaker/Panchroma PLA Satin" - ], - "name": "Panchroma PLA Satin", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFPklMI1": { - "filaments": [ - "BBL/Generic PE", - "OrcaFilamentLibrary/Generic PE", - "Tiertime/Generic PE" - ], - "name": "Generic PE", - "filament_type": "PE", - "filament_vendor": "Generic" - }, - "OFPoyiFs": { - "filaments": [ - "BBL/Polymaker HT-PLA", - "OrcaFilamentLibrary/Polymaker HT-PLA", - "Snapmaker/Polymaker HT-PLA" - ], - "name": "Polymaker HT-PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFPqX3x2": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto" - ], - "name": "FilAr PLA Rosa Amaranto", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFQ1KzO8": { - "filaments": [ - "Snapmaker/Snapmaker J1 PLA Silk" - ], - "name": "Snapmaker J1 PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFQ1zgm3": { - "filaments": [ - "Eryone/Eryone ABS-CF" - ], - "name": "Eryone ABS-CF", - "filament_type": "ABS-CF", - "filament_vendor": "Eryone" - }, - "OFQ3e56w": { - "filaments": [ - "BBL/Bambu PLA Galaxy", - "OrcaFilamentLibrary/Bambu PLA Galaxy" - ], - "name": "Bambu PLA Galaxy", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFQ40XeN": { - "filaments": [ - "Qidi/QIDI PETG Tough" - ], - "name": "QIDI PETG Tough", - "filament_type": "PETG", - "filament_vendor": "QIDI" - }, - "OFQ5TxZ2": { - "filaments": [ - "BBL/addnorth PVDF Adamant S1" - ], - "name": "addnorth PVDF Adamant S1", - "filament_type": "PA", - "filament_vendor": "addnorth" - }, - "OFQEGL7z": { - "filaments": [ - "FlyingBear/FlyingBear PA-CF" - ], - "name": "FlyingBear PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "FlyingBear" - }, - "OFQGvU2G": { - "filaments": [ - "OrcaArena/Arena TPU 95A" - ], - "name": "Arena TPU 95A", - "filament_type": "TPU", - "filament_vendor": "Orca Arena" - }, - "OFQHiNJs": { - "filaments": [ - "BBL/Bambu Support G", - "OrcaFilamentLibrary/Bambu Support G" - ], - "name": "Bambu Support G", - "filament_type": "PA", - "filament_vendor": "Bambu Lab" - }, - "OFQLcbps": { - "filaments": [ - "Anker/Generic PA-CF", - "Anycubic/Generic PA-CF", - "BBL/Generic PA-CF", - "Blocks/Generic PA-CF", - "Creality/Generic PA-CF", - "Custom/Generic PA-CF", - "FLSun/Generic PA-CF", - "FlyingBear/Generic PA-CF", - "InfiMech/Generic PA-CF", - "OrcaArena/Generic PA-CF", - "OrcaFilamentLibrary/Generic PA-CF", - "Prusa/Generic PA-CF", - "Qidi/Generic PA-CF", - "Ratrig/Generic PA-CF", - "SecKit/Generic PA-CF", - "Tiertime/Generic PA-CF", - "Vzbot/Generic PA-CF" - ], - "name": "Generic PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Generic" - }, - "OFQMTRc8": { - "filaments": [ - "Snapmaker/Snapmaker J1 PETG" - ], - "name": "Snapmaker J1 PETG", - "filament_type": "PETG", - "filament_vendor": "Snapmaker" - }, - "OFQMsFfF": { - "filaments": [ - "Qidi/QIDI ABS-GF10" - ], - "name": "QIDI ABS-GF10", - "filament_type": "ABS-GF", - "filament_vendor": "QIDI" - }, - "OFQWIKbV": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Titanio" - ], - "name": "FilAr PLA Titanio", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFQYaiGg": { - "filaments": [ - "Snapmaker/Snapmaker PET" - ], - "name": "Snapmaker PET", - "filament_type": "PET", - "filament_vendor": "Snapmaker" - }, - "OFQbjX3s": { - "filaments": [ - "OrcaFilamentLibrary/FILL3D PETG" - ], - "name": "FILL3D PETG", - "filament_type": "PETG", - "filament_vendor": "FILL3D" - }, - "OFQdaVZS": { - "filaments": [ - "Creality/Generic PET-CF", - "Elegoo/Generic PET-CF" - ], - "name": "Generic PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "Generic" - }, - "OFQe7sAx": { - "filaments": [ - "Anycubic/Anycubic PA6-CF" - ], - "name": "Anycubic PA6-CF", - "filament_type": "PA6-CF", - "filament_vendor": "Anycubic" - }, - "OFQyyO0l": { - "filaments": [ - "Flashforge/Polymaker CoPA" - ], - "name": "Polymaker CoPA", - "filament_type": "PA", - "filament_vendor": "Polymaker" - }, - "OFR0gODA": { - "filaments": [ - "SeeMeCNC/SeeMeCNC ABS" - ], - "name": "SeeMeCNC ABS", - "filament_type": "ABS", - "filament_vendor": "SeeMeCNC" - }, - "OFR1XLMN": { - "filaments": [ - "Qidi/QIDI TPU 95A-HF" - ], - "name": "QIDI TPU 95A-HF", - "filament_type": "TPU", - "filament_vendor": "QIDI" - }, - "OFRFhdqy": { - "filaments": [ - "BBL/addnorth PLA Textura" - ], - "name": "addnorth PLA Textura", - "filament_type": "PLA", - "filament_vendor": "addnorth" - }, - "OFRJ325z": { - "filaments": [ - "LH/LHS PETG" - ], - "name": "LHS PETG", - "filament_type": "PETG", - "filament_vendor": "LH Stinger" - }, - "OFRhBryT": { - "filaments": [ - "Cubicon/Cubicon PLAi21" - ], - "name": "Cubicon PLAi21", - "filament_type": "PLA", - "filament_vendor": "Cubicon" - }, - "OFRhCTUg": { - "filaments": [ - "Anycubic/Anycubic PET-CF" - ], - "name": "Anycubic PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "Anycubic" - }, - "OFRiFnfQ": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PETG Transition" - ], - "name": "Eolas Prints PETG Transition", - "filament_type": "PETG", - "filament_vendor": "Eolas Prints" - }, - "OFRiYgMK": { - "filaments": [ - "BBL/Panchroma PLA Celestial", - "OrcaFilamentLibrary/Panchroma PLA Celestial", - "Snapmaker/Panchroma PLA Celestial" - ], - "name": "Panchroma PLA Celestial", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFRkjhxK": { - "filaments": [ - "Volumic/Volumic PVA-BVOH (Performance)" - ], - "name": "Volumic PVA-BVOH (Performance)", - "filament_type": "PVA", - "filament_vendor": "Volumic" - }, - "OFRooa0F": { - "filaments": [ - "Snapmaker/Snapmaker Dual PA-CF" - ], - "name": "Snapmaker Dual PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Snapmaker" - }, - "OFRpAZ1P": { - "filaments": [ - "DeltaMaker/DeltaMaker Brand PLA" - ], - "name": "DeltaMaker Brand PLA", - "filament_type": "PLA", - "filament_vendor": "DeltaMaker" - }, - "OFRyOsZj": { - "filaments": [ - "re3D/re3D PLA" - ], - "name": "re3D PLA", - "filament_type": "PLA", - "filament_vendor": "re3D" - }, - "OFRzR5mi": { - "filaments": [ - "OrcaFilamentLibrary/eSUN ePLA-LW" - ], - "name": "eSUN ePLA-LW", - "filament_type": "PLA-AERO", - "filament_vendor": "eSUN" - }, - "OFS2tn6G": { - "filaments": [ - "BBL/Fiberon PA612-CF", - "OrcaFilamentLibrary/Fiberon PA612-CF" - ], - "name": "Fiberon PA612-CF", - "filament_type": "PA", - "filament_vendor": "Polymaker" - }, - "OFS4jbj3": { - "filaments": [ - "Eryone/Eryone PA" - ], - "name": "Eryone PA", - "filament_type": "PA", - "filament_vendor": "Eryone" - }, - "OFS8lTQt": { - "filaments": [ - "BBL/Panchroma PLA Silk", - "OrcaFilamentLibrary/Panchroma PLA Silk", - "Snapmaker/Panchroma PLA Silk" - ], - "name": "Panchroma PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFSDfduA": { - "filaments": [ - "Flashforge/Flashforge TPU 65D" - ], - "name": "Flashforge TPU 65D", - "filament_type": "TPU", - "filament_vendor": "Flashforge" - }, - "OFSa39yP": { - "filaments": [ - "Snapmaker/Snapmaker J1 PLA" - ], - "name": "Snapmaker J1 PLA", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFSbGfsz": { - "filaments": [ - "OrcaArena/Arena PLA Basic" - ], - "name": "Arena PLA Basic", - "filament_type": "PLA", - "filament_vendor": "Orca Arena" - }, - "OFSfm8iP": { - "filaments": [ - "BBL/BETA PLA Heat Color Change" - ], - "name": "BETA PLA Heat Color Change", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFSiCZP3": { - "filaments": [ - "BBL/BETA PETG-GF" - ], - "name": "BETA PETG-GF", - "filament_type": "PETG-CF", - "filament_vendor": "BETA" - }, - "OFSqIcJC": { - "filaments": [ - "Flashforge/Flashforge TPU 95A" - ], - "name": "Flashforge TPU 95A", - "filament_type": "TPU", - "filament_vendor": "Flashforge" - }, - "OFSw6Mor": { - "filaments": [ - "BBL/addnorth PA Adura FDA" - ], - "name": "addnorth PA Adura FDA", - "filament_type": "PA", - "filament_vendor": "addnorth" - }, - "OFSwbBWS": { - "filaments": [], - "name": "DREMC PLA+", - "filament_type": "PLA", - "filament_vendor": "DREMC" - }, - "OFT2jon4": { - "filaments": [ - "Qidi/QIDI ABS Rapido" - ], - "name": "QIDI ABS Rapido", - "filament_type": "ABS", - "filament_vendor": "QIDI" - }, - "OFTGHyNC": { - "filaments": [ - "OrcaFilamentLibrary/Bambu PLA Impact" - ], - "name": "Bambu PLA Impact", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFTHDCqA": { - "filaments": [ - "BBL/Bambu PLA Pure" - ], - "name": "Bambu PLA Pure", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFTOPcx0": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints TPU Transition" - ], - "name": "Eolas Prints TPU Transition", - "filament_type": "TPU", - "filament_vendor": "Eolas Prints" - }, - "OFTRZ8Y4": { - "filaments": [ - "BBL/Bambu PETG-CF", - "OrcaFilamentLibrary/Bambu PETG-CF" - ], - "name": "Bambu PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Bambu Lab" - }, - "OFTSXxzE": { - "filaments": [ - "Flashforge/Flashforge PPS-CF" - ], - "name": "Flashforge PPS-CF", - "filament_type": "PPS-CF", - "filament_vendor": "Flashforge" - }, - "OFTXduCM": { - "filaments": [ - "Creality/eSUN ABS+" - ], - "name": "eSUN ABS+", - "filament_type": "ABS", - "filament_vendor": "eSUN" - }, - "OFTcE0nA": { - "filaments": [ - "OrcaFilamentLibrary/eSUN PLA-Basic" - ], - "name": "eSUN PLA-Basic", - "filament_type": "PLA", - "filament_vendor": "eSUN" - }, - "OFTdauIq": { - "filaments": [ - "Volumic/Volumic PCTG Ultra (Performance)" - ], - "name": "Volumic PCTG Ultra (Performance)", - "filament_type": "PETG", - "filament_vendor": "Volumic" - }, - "OFTkj6DR": { - "filaments": [ - "Anycubic/Anycubic PVA" - ], - "name": "Anycubic PVA", - "filament_type": "PVA", - "filament_vendor": "Anycubic" - }, - "OFTlRzpe": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Gris Pizarra" - ], - "name": "FilAr PLA Gris Pizarra", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFTnWzBs": { - "filaments": [ - "Creality/Hyper PLA-CF" - ], - "name": "Hyper PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Creality" - }, - "OFTs8peJ": { - "filaments": [ - "Snapmaker/Snapmaker Dual TPE" - ], - "name": "Snapmaker Dual TPE", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFTsHNQi": { - "filaments": [ - "Qidi/QIDI ASA" - ], - "name": "QIDI ASA", - "filament_type": "ASA", - "filament_vendor": "QIDI" - }, - "OFU1zPxE": { - "filaments": [ - "Elegoo/Elegoo PLA Galaxy", - "OrcaFilamentLibrary/Elegoo PLA Galaxy" - ], - "name": "Elegoo PLA Galaxy", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFU3QXL7": { - "filaments": [ - "re3D/re3D PC" - ], - "name": "re3D PC", - "filament_type": "PC", - "filament_vendor": "re3D" - }, - "OFU5JPDy": { - "filaments": [ - "BBL/addnorth PETG PRO Matte" - ], - "name": "addnorth PETG PRO Matte", - "filament_type": "PETG", - "filament_vendor": "addnorth" - }, - "OFU7CKZt": { - "filaments": [ - "Volumic/Volumic ASA Ultra (Performance)" - ], - "name": "Volumic ASA Ultra (Performance)", - "filament_type": "ASA", - "filament_vendor": "Volumic" - }, - "OFUF7oA4": { - "filaments": [ - "Creality/Hyper PC" - ], - "name": "Hyper PC", - "filament_type": "PC", - "filament_vendor": "Creality" - }, - "OFUH1aee": { - "filaments": [ - "Volumic/Volumic FLEX93 Ultra (Performance)" - ], - "name": "Volumic FLEX93 Ultra (Performance)", - "filament_type": "TPU", - "filament_vendor": "Volumic" - }, - "OFUIfGoh": { - "filaments": [ - "Snapmaker/Snapmaker Dual PET" - ], - "name": "Snapmaker Dual PET", - "filament_type": "PET", - "filament_vendor": "Snapmaker" - }, - "OFUYCqtB": { - "filaments": [ - "InfiMech/InfiMech PLA" - ], - "name": "InfiMech PLA", - "filament_type": "PLA", - "filament_vendor": "InfiMech" - }, - "OFUaHEO9": { - "filaments": [ - "Anycubic/Anycubic PEBA 95A" - ], - "name": "Anycubic PEBA 95A", - "filament_type": "PEBA", - "filament_vendor": "Anycubic" - }, - "OFUanySo": { - "filaments": [ - "BBL/Bambu PLA Silk+", - "OrcaFilamentLibrary/Bambu PLA Silk+" - ], - "name": "Bambu PLA Silk+", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFUmS5z5": { - "filaments": [ - "Creality/eSUN ASA+" - ], - "name": "eSUN ASA+", - "filament_type": "ASA", - "filament_vendor": "eSUN" - }, - "OFUtiVRn": { - "filaments": [ - "BBL/addnorth PETG ESD" - ], - "name": "addnorth PETG ESD", - "filament_type": "PETG", - "filament_vendor": "addnorth" - }, - "OFUyDDNv": { - "filaments": [ - "Elegoo/Elegoo PC", - "OrcaFilamentLibrary/Elegoo PC" - ], - "name": "Elegoo PC", - "filament_type": "PC", - "filament_vendor": "Elegoo" - }, - "OFV5Q7j2": { - "filaments": [ - "Snapmaker/Snapmaker J1 TPE" - ], - "name": "Snapmaker J1 TPE", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFV5c8hG": { - "filaments": [ - "Flashforge/Flashforge PLA Sparkle" - ], - "name": "Flashforge PLA Sparkle", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFV5wEMe": { - "filaments": [ - "Afinia/Afinia ABS" - ], - "name": "Afinia ABS", - "filament_type": "ABS", - "filament_vendor": "Afinia" - }, - "OFV8Mxqx": { - "filaments": [], - "name": "Flashforge PLA-SILK", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFVBlUFH": { - "filaments": [], - "name": "DREMC PETG", - "filament_type": "PETG", - "filament_vendor": "DREMC" - }, - "OFVCkX5w": { - "filaments": [ - "BBL/Bambu TPU 95A", - "OrcaFilamentLibrary/Bambu TPU 95A" - ], - "name": "Bambu TPU 95A", - "filament_type": "TPU", - "filament_vendor": "Bambu Lab" - }, - "OFVDWuxl": { - "filaments": [ - "BBL/addnorth PLA HT-PLA PRO Matte" - ], - "name": "addnorth PLA HT-PLA PRO Matte", - "filament_type": "PLA", - "filament_vendor": "addnorth" - }, - "OFVHMFJX": { - "filaments": [ - "Qidi/QIDI PETG Tough 0.2 nozzle" - ], - "name": "QIDI PETG Tough 0.2 nozzle", - "filament_type": "PETG", - "filament_vendor": "QIDI" - }, - "OFVptRxp": { - "filaments": [ - "BBL/COEX TPE 30D", - "OrcaFilamentLibrary/COEX TPE 30D" - ], - "name": "COEX TPE 30D", - "filament_type": "TPU", - "filament_vendor": "COEX 3D" - }, - "OFVtIasg": { - "filaments": [ - "Eryone/Eryone ASA" - ], - "name": "Eryone ASA", - "filament_type": "ASA", - "filament_vendor": "Eryone" - }, - "OFW29a9R": { - "filaments": [ - "BBL/PolyTerra PLA", - "OrcaArena/PolyTerra PLA", - "OrcaFilamentLibrary/PolyTerra PLA", - "Snapmaker/PolyTerra PLA" - ], - "name": "PolyTerra PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFW5FqkL": { - "filaments": [ - "Qidi/QIDI PLA Rapido Silk" - ], - "name": "QIDI PLA Rapido Silk", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OFW8M3CY": { - "filaments": [ - "BBL/BETA PLA Chameleon" - ], - "name": "BETA PLA Chameleon", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFW8lqnb": { - "filaments": [ - "Snapmaker/Snapmaker PETG Translucent" - ], - "name": "Snapmaker PETG Translucent", - "filament_type": "PETG", - "filament_vendor": "Snapmaker" - }, - "OFWDe7YH": { - "filaments": [ - "Qidi/QIDI UltraPA" - ], - "name": "QIDI UltraPA", - "filament_type": "UltraPA", - "filament_vendor": "QIDI" - }, - "OFWK0Y9A": { - "filaments": [ - "BBL/addnorth PA Adura" - ], - "name": "addnorth PA Adura", - "filament_type": "PA", - "filament_vendor": "addnorth" - }, - "OFWRITFw": { - "filaments": [ - "Prusa/Prusament rPLA" - ], - "name": "Prusament rPLA", - "filament_type": "PLA", - "filament_vendor": "Prusa Polymers" - }, - "OFWTAEjH": { - "filaments": [ - "Snapmaker/Snapmaker TPE" - ], - "name": "Snapmaker TPE", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFWTRJ1K": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Bronce" - ], - "name": "FilAr PLA Bronce", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFWXCbVF": { - "filaments": [ - "Flashforge/Flashforge PC" - ], - "name": "Flashforge PC", - "filament_type": "PC", - "filament_vendor": "Flashforge" - }, - "OFWYtgCa": { - "filaments": [ - "Elegoo/Elegoo PLA Wood", - "OrcaFilamentLibrary/Elegoo PLA Wood" - ], - "name": "Elegoo PLA Wood", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFWa0NiB": { - "filaments": [ - "Volumic/Volumic NYLON Ultra" - ], - "name": "Volumic NYLON Ultra", - "filament_type": "PA", - "filament_vendor": "Volumic" - }, - "OFWao3Ic": { - "filaments": [ - "Creality/Ender-PLA" - ], - "name": "Ender-PLA", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFWbdGsC": { - "filaments": [ - "Anker/Generic PLA-CF", - "Anycubic/Generic PLA-CF", - "Artillery/Generic PLA-CF", - "BBL/Generic PLA-CF", - "Blocks/Generic PLA-CF", - "Creality/Generic PLA-CF", - "Custom/Generic PLA-CF", - "FLSun/Generic PLA-CF", - "Flashforge/Generic PLA-CF", - "OrcaArena/Generic PLA-CF", - "OrcaFilamentLibrary/Generic PLA-CF", - "Prusa/Generic PLA-CF", - "Qidi/Generic PLA-CF", - "Ratrig/Generic PLA-CF", - "SecKit/Generic PLA-CF", - "Tiertime/Generic PLA-CF", - "Vzbot/Generic PLA-CF" - ], - "name": "Generic PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Generic" - }, - "OFWgFOjn": { - "filaments": [ - "Snapmaker/Snapmaker PLA Silk" - ], - "name": "Snapmaker PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFWwF7K7": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" - ], - "name": "FilAr PLA Cafe con Leche", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFX0ycRQ": { - "filaments": [ - "BBL/Fiberon PA12-CF", - "OrcaFilamentLibrary/Fiberon PA12-CF" - ], - "name": "Fiberon PA12-CF", - "filament_type": "PA-CF", - "filament_vendor": "Polymaker" - }, - "OFX2zcrM": { - "filaments": [ - "Chuanying/Generic PLA-CF10", - "Flashforge/Generic PLA-CF10" - ], - "name": "Generic PLA-CF10", - "filament_type": "PLA-CF", - "filament_vendor": "Generic" - }, - "OFXCBZTA": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints ABS" - ], - "name": "Eolas Prints ABS", - "filament_type": "ABS", - "filament_vendor": "Eolas Prints" - }, - "OFXIbw5D": { - "filaments": [ - "BBL/Bambu PLA Matte", - "OrcaFilamentLibrary/Bambu PLA Matte" - ], - "name": "Bambu PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFXJ9iom": { - "filaments": [ - "iQ/Grauts HPP4GF25 P1" - ], - "name": "Grauts HPP4GF25 P1", - "filament_type": "HPP4GF25", - "filament_vendor": "iQ Materials" - }, - "OFXSvqOX": { - "filaments": [ - "Snapmaker/Snapmaker TPU 95A HF" - ], - "name": "Snapmaker TPU 95A HF", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFXTPuqV": { - "filaments": [ - "OrcaFilamentLibrary/Elas PETG Basic" - ], - "name": "Elas PETG Basic", - "filament_type": "PETG", - "filament_vendor": "Elas" - }, - "OFXW4CDh": { - "filaments": [ - "Ratrig/Generic PCTG BigNozzle" - ], - "name": "Generic PCTG BigNozzle", - "filament_type": "PCTG", - "filament_vendor": "Generic" - }, - "OFXi59OX": { - "filaments": [ - "Afinia/Afinia Value ABS" - ], - "name": "Afinia Value ABS", - "filament_type": "ABS", - "filament_vendor": "Afinia" - }, - "OFXiArjA": { - "filaments": [ - "Flashforge/Flashforge PETG Pro" - ], - "name": "Flashforge PETG Pro", - "filament_type": "PETG", - "filament_vendor": "Flashforge" - }, - "OFXk1emJ": { - "filaments": [ - "Artillery/Artillery PLA Basic" - ], - "name": "Artillery PLA Basic", - "filament_type": "PLA Basic", - "filament_vendor": "Artillery" - }, - "OFXkm8q1": { - "filaments": [ - "BBL/Generic PP-CF", - "Creality/Generic PP-CF", - "OrcaFilamentLibrary/Generic PP-CF", - "Tiertime/Generic PP-CF" - ], - "name": "Generic PP-CF", - "filament_type": "PP-CF", - "filament_vendor": "Generic" - }, - "OFXmv5p0": { - "filaments": [ - "Creality/Generic Speed PLA" - ], - "name": "Generic Speed PLA", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFXn3Vd9": { - "filaments": [ - "Qidi/QIDI Support For PAHT" - ], - "name": "QIDI Support For PAHT", - "filament_type": "PAHT-S", - "filament_vendor": "QIDI" - }, - "OFXnToSX": { - "filaments": [ - "Creality/Hyper Stardust" - ], - "name": "Hyper Stardust", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFXuGxvQ": { - "filaments": [ - "Volumic/Volumic PLA Ultra" - ], - "name": "Volumic PLA Ultra", - "filament_type": "PLA", - "filament_vendor": "Volumic" - }, - "OFXz7Mwx": { - "filaments": [ - "Elegoo/Elegoo PLA Silk", - "OrcaFilamentLibrary/Elegoo PLA Silk" - ], - "name": "Elegoo PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFXzQ4yL": { - "filaments": [ - "BBL/Bambu ASA-Aero", - "OrcaFilamentLibrary/Bambu ASA-Aero" - ], - "name": "Bambu ASA-Aero", - "filament_type": "ASA-AERO", - "filament_vendor": "Bambu Lab" - }, - "OFY0F5qA": { - "filaments": [ - "Volumic/Volumic PETG Ultra carbone (Performance)" - ], - "name": "Volumic PETG Ultra carbone (Performance)", - "filament_type": "PETG", - "filament_vendor": "Volumic" - }, - "OFY3AB7j": { - "filaments": [ - "Snapmaker/Snapmaker J1 PLA Matte" - ], - "name": "Snapmaker J1 PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFY7jxcS": { - "filaments": [ - "Snapmaker/Snapmaker TPU 90A" - ], - "name": "Snapmaker TPU 90A", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFY9muEs": { - "filaments": [ - "Anker/Generic ABS", - "Anycubic/Generic ABS", - "Artillery/Generic ABS", - "BBL/Generic ABS", - "Blocks/Generic ABS", - "Chuanying/Generic ABS", - "Co Print/Generic ABS", - "CoLiDo/Generic ABS", - "Comgrow/Generic ABS", - "Creality/Generic ABS", - "Custom/Generic ABS", - "Elegoo/Generic ABS", - "FLSun/Generic ABS", - "Flashforge/Generic ABS", - "FlyingBear/Generic ABS", - "InfiMech/Generic ABS", - "Lulzbot/Generic ABS", - "OrcaArena/Generic ABS", - "OrcaFilamentLibrary/Generic ABS", - "Peopoly/Generic ABS", - "Prusa/Generic ABS", - "Qidi/Generic ABS", - "RH3D/Generic ABS", - "Ratrig/Generic ABS", - "SecKit/Generic ABS", - "Sovol/Generic ABS", - "Tiertime/Generic ABS", - "Vzbot/Generic ABS", - "Z-Bolt/Generic ABS" - ], - "name": "Generic ABS", - "filament_type": "ABS", - "filament_vendor": "Generic" - }, - "OFYE7YZw": { - "filaments": [ - "Qidi/Tinmorry PETG-ECO" - ], - "name": "Tinmorry PETG-ECO", - "filament_type": "PETG", - "filament_vendor": "Tinmorry" - }, - "OFYEtXuk": { - "filaments": [ - "Snapmaker/Snapmaker J1 PA-CF" - ], - "name": "Snapmaker J1 PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Snapmaker" - }, - "OFYGbPHX": { - "filaments": [ - "OrcaFilamentLibrary/PolyLite Dual PLA", - "Snapmaker/PolyLite Dual PLA" - ], - "name": "PolyLite Dual PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFYGrfHY": { - "filaments": [ - "BBL/BETA PETG Fluorescence" - ], - "name": "BETA PETG Fluorescence", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFYPdQJh": { - "filaments": [ - "Anker/Generic PETG", - "Anycubic/Generic PETG", - "Artillery/Generic PETG", - "BBL/Generic PETG", - "Blocks/Generic PETG", - "CONSTRUCT3D/Generic PETG", - "Chuanying/Generic PETG", - "Co Print/Generic PETG", - "CoLiDo/Generic PETG", - "Comgrow/Generic PETG", - "Creality/Generic PETG", - "Custom/Generic PETG", - "DeltaMaker/Generic PETG", - "Elegoo/Generic PETG", - "FLSun/Generic PETG", - "Flashforge/Generic PETG", - "FlyingBear/Generic PETG", - "Ginger Additive/Generic PETG", - "InfiMech/Generic PETG", - "LONGER/Generic PETG", - "Lulzbot/Generic PETG", - "OrcaArena/Generic PETG", - "OrcaFilamentLibrary/Generic PETG", - "Peopoly/Generic PETG", - "Prusa/Generic PETG", - "Qidi/Generic PETG", - "RH3D/Generic PETG", - "Ratrig/Generic PETG", - "SecKit/Generic PETG", - "Sovol/Generic PETG", - "Tiertime/Generic PETG", - "Vzbot/Generic PETG", - "Z-Bolt/Generic PETG" - ], - "name": "Generic PETG", - "filament_type": "PETG", - "filament_vendor": "Generic" - }, - "OFYTIMbj": { - "filaments": [ - "Flashforge/Flashforge ABS-CF" - ], - "name": "Flashforge ABS-CF", - "filament_type": "ABS-CF", - "filament_vendor": "Flashforge" - }, - "OFYYeMyQ": { - "filaments": [ - "Flashforge/Flashforge PETG Basic" - ], - "name": "Flashforge PETG Basic", - "filament_type": "PETG", - "filament_vendor": "Flashforge" - }, - "OFYd5uS3": { - "filaments": [], - "name": "DREMC TPU 95A", - "filament_type": "TPU", - "filament_vendor": "DREMC" - }, - "OFYezc6s": { - "filaments": [ - "FlyingBear/FlyingBear TPU" - ], - "name": "FlyingBear TPU", - "filament_type": "TPU", - "filament_vendor": "FlyingBear" - }, - "OFYuowge": { - "filaments": [ - "FlyingBear/Other ABS", - "InfiMech/Other ABS" - ], - "name": "Other ABS", - "filament_type": "ABS", - "filament_vendor": "Other" - }, - "OFZ0mR5b": { - "filaments": [ - "Anycubic/Anycubic PLA-CF" - ], - "name": "Anycubic PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Anycubic" - }, - "OFZ2LuAi": { - "filaments": [ - "Wanhao France/YUMI PLA Bowden" - ], - "name": "YUMI PLA Bowden", - "filament_type": "PLA", - "filament_vendor": "Yumi" - }, - "OFZ3K2cL": { - "filaments": [ - "Qidi/QIDI PA6-CF" - ], - "name": "QIDI PA6-CF", - "filament_type": "PA6-CF", - "filament_vendor": "QIDI" - }, - "OFZ4QbfK": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" - ], - "name": "FilAr PLA Rosa Flamenco", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFZGrQTU": { - "filaments": [ - "BBL/addnorth PETG Economy" - ], - "name": "addnorth PETG Economy", - "filament_type": "PETG", - "filament_vendor": "addnorth" - }, - "OFZJft47": { - "filaments": [ - "BBL/addnorth PLA Economy" - ], - "name": "addnorth PLA Economy", - "filament_type": "PLA", - "filament_vendor": "addnorth" - }, - "OFZLtWYs": { - "filaments": [ - "Qidi/QIDI ABS-GF25" - ], - "name": "QIDI ABS-GF25", - "filament_type": "ABS-GF", - "filament_vendor": "QIDI" - }, - "OFZOuWrO": { - "filaments": [ - "Qidi/QIDI PPS-CF" - ], - "name": "QIDI PPS-CF", - "filament_type": "PPS-CF", - "filament_vendor": "QIDI" - }, - "OFZivHGL": { - "filaments": [ - "Snapmaker/Snapmaker Dual PLA" - ], - "name": "Snapmaker Dual PLA", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFZqZMuv": { - "filaments": [ - "BBL/BETA ASA" - ], - "name": "BETA ASA", - "filament_type": "ASA", - "filament_vendor": "BETA" - }, - "OFZr862X": { - "filaments": [ - "Creality/Generic PLA HF", - "Prusa/Generic PLA HF" - ], - "name": "Generic PLA HF", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFZtOQtl": { - "filaments": [ - "Flashforge/Flashforge PA6-CF" - ], - "name": "Flashforge PA6-CF", - "filament_type": "PA6-CF", - "filament_vendor": "Flashforge" - }, - "OFZtkHRq": { - "filaments": [ - "Anycubic/Anycubic PC" - ], - "name": "Anycubic PC", - "filament_type": "PC", - "filament_vendor": "Anycubic" - }, - "OFaDOaNt": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" - ], - "name": "FilAr PLA Celeste Cielo", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFaDsTE0": { - "filaments": [ - "Flashforge/Polymaker S1" - ], - "name": "Polymaker S1", - "filament_type": "PA", - "filament_vendor": "Polymaker" - }, - "OFaEesXQ": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras" - ], - "name": "FilAr PLA Rojo de Carreras", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFaEuvNF": { - "filaments": [ - "Anycubic/Anycubic PAHT-CF" - ], - "name": "Anycubic PAHT-CF", - "filament_type": "PAHT-CF", - "filament_vendor": "Anycubic" - }, - "OFaHjk1V": { - "filaments": [ - "Volumic/Volumic PC" - ], - "name": "Volumic PC", - "filament_type": "PC", - "filament_vendor": "Volumic" - }, - "OFaP2SsH": { - "filaments": [ - "LH/LHS ASA" - ], - "name": "LHS ASA", - "filament_type": "ASA", - "filament_vendor": "LH Stinger" - }, - "OFaQMgRH": { - "filaments": [ - "BBL/Bambu PLA Tough", - "OrcaFilamentLibrary/Bambu PLA Tough" - ], - "name": "Bambu PLA Tough", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFaRjiIm": { - "filaments": [ - "SeeMeCNC/SeeMeCNC PETG-CF" - ], - "name": "SeeMeCNC PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "SeeMeCNC" - }, - "OFaYz8iE": { - "filaments": [ - "OrcaFilamentLibrary/Elas PLA Pro" - ], - "name": "Elas PLA Pro", - "filament_type": "PLA", - "filament_vendor": "Elas" - }, - "OFaaddbQ": { - "filaments": [ - "Flashforge/Flashforge PVA" - ], - "name": "Flashforge PVA", - "filament_type": "PVA", - "filament_vendor": "Flashforge" - }, - "OFaeIx7W": { - "filaments": [ - "iQ/Polymaker PETG Polymax black P1" - ], - "name": "Polymaker PETG Polymax black P1", - "filament_type": "PETG Polymax", - "filament_vendor": "iQ Materials" - }, - "OFafO6VM": { - "filaments": [ - "Elegoo/Generic PC-CF" - ], - "name": "Generic PC-CF", - "filament_type": "PC-CF", - "filament_vendor": "Generic" - }, - "OFausr3F": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Rosa" - ], - "name": "FilAr PLA-mate Rosa", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFb5EEM3": { - "filaments": [ - "Artillery/Artillery PET" - ], - "name": "Artillery PET", - "filament_type": "PET", - "filament_vendor": "Artillery" - }, - "OFbP8zEO": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PLA Silk" - ], - "name": "Eolas Prints PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Eolas Prints" - }, - "OFbPuPKY": { - "filaments": [ - "Prusa/Generic FLEX" - ], - "name": "Generic FLEX", - "filament_type": "FLEX", - "filament_vendor": "Generic" - }, - "OFbSChKb": { - "filaments": [ - "SeeMeCNC/SeeMeCNC PLA" - ], - "name": "SeeMeCNC PLA", - "filament_type": "PLA", - "filament_vendor": "SeeMeCNC" - }, - "OFbSZBOi": { - "filaments": [ - "InfiMech/InfiMech TPU Basic" - ], - "name": "InfiMech TPU Basic", - "filament_type": "TPU", - "filament_vendor": "InfiMech" - }, - "OFbh7HcA": { - "filaments": [ - "Eryone/Eryone PP-CF" - ], - "name": "Eryone PP-CF", - "filament_type": "PP-CF", - "filament_vendor": "Eryone" - }, - "OFc3xdm9": { - "filaments": [ - "BBL/Overture PLA", - "OrcaFilamentLibrary/Overture PLA", - "Qidi/Overture PLA" - ], - "name": "Overture PLA", - "filament_type": "PLA", - "filament_vendor": "Overture" - }, - "OFc87pL3": { - "filaments": [ - "OrcaArena/Arena PET-CF" - ], - "name": "Arena PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "Orca Arena" - }, - "OFcBJQcC": { - "filaments": [ - "Snapmaker/Snapmaker Dual TPU High-Flow" - ], - "name": "Snapmaker Dual TPU High-Flow", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFcBl0nJ": { - "filaments": [ - "BBL/Fiberon PA612-CF15" - ], - "name": "Fiberon PA612-CF15", - "filament_type": "PA-CF", - "filament_vendor": "Polymaker" - }, - "OFcJDtTx": { - "filaments": [ - "Artillery/Artillery TPU" - ], - "name": "Artillery TPU", - "filament_type": "TPU", - "filament_vendor": "Artillery" - }, - "OFcKtw8W": { - "filaments": [ - "Volumic/PA6 CF20 (Performance)" - ], - "name": "PA6 CF20 (Performance)", - "filament_type": "PA6-CF", - "filament_vendor": "Volumic" - }, - "OFcVLpNA": { - "filaments": [ - "Flashforge/FusRock PAHT-GF" - ], - "name": "FusRock PAHT-GF", - "filament_type": "PAHT-GF", - "filament_vendor": "FusRock" - }, - "OFcfQk4h": { - "filaments": [ - "BBL/Overture Air PLA", - "OrcaFilamentLibrary/Overture Air PLA" - ], - "name": "Overture Air PLA", - "filament_type": "PLA", - "filament_vendor": "Overture" - }, - "OFcnWTJB": { - "filaments": [ - "BBL/BETA PLA Glitter" - ], - "name": "BETA PLA Glitter", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFcogyWl": { - "filaments": [ - "WonderMaker/WonderMaker PLA Metal" - ], - "name": "WonderMaker PLA Metal", - "filament_type": "PLA", - "filament_vendor": "WonderMaker" - }, - "OFcpa50Z": { - "filaments": [ - "BBL/addnorth PLA-CF Carbon Fiber" - ], - "name": "addnorth PLA-CF Carbon Fiber", - "filament_type": "PLA-CF", - "filament_vendor": "addnorth" - }, - "OFctg8r1": { - "filaments": [ - "CoLiDo/CoLiDo PLA+" - ], - "name": "CoLiDo PLA+", - "filament_type": "PLA", - "filament_vendor": "CoLiDo" - }, - "OFcvKkrs": { - "filaments": [ - "BBL/Overture TPU", - "OrcaFilamentLibrary/Overture TPU" - ], - "name": "Overture TPU", - "filament_type": "TPU", - "filament_vendor": "Overture" - }, - "OFcytyoA": { - "filaments": [ - "BBL/Fiberon PETG-ESD", - "OrcaFilamentLibrary/Fiberon PETG-ESD", - "Snapmaker/Fiberon PETG-ESD" - ], - "name": "Fiberon PETG-ESD", - "filament_type": "PETG", - "filament_vendor": "Polymaker" - }, - "OFd0Fv0k": { - "filaments": [ - "BBL/Generic PE-CF", - "OrcaFilamentLibrary/Generic PE-CF", - "Tiertime/Generic PE-CF" - ], - "name": "Generic PE-CF", - "filament_type": "PE-CF", - "filament_vendor": "Generic" - }, - "OFd2vX0G": { - "filaments": [ - "BBL/COEX PLA PRIME", - "OrcaFilamentLibrary/COEX PLA PRIME" - ], - "name": "COEX PLA PRIME", - "filament_type": "PLA", - "filament_vendor": "COEX 3D" - }, - "OFd4zw5l": { - "filaments": [ - "BBL/AliZ PA-CF", - "OrcaFilamentLibrary/AliZ PA-CF" - ], - "name": "AliZ PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Aliz" - }, - "OFdD5Wbu": { - "filaments": [ - "Snapmaker/Snapmaker J1 PLA-CF" - ], - "name": "Snapmaker J1 PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Snapmaker" - }, - "OFdI4zMo": { - "filaments": [], - "name": "DREMC ASA CF", - "filament_type": "ASA", - "filament_vendor": "DREMC" - }, - "OFdXVjGZ": { - "filaments": [ - "Tiertime/Tiertime PC" - ], - "name": "Tiertime PC", - "filament_type": "PC", - "filament_vendor": "Tiertime" - }, - "OFdb8YNz": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Verde Manzana" - ], - "name": "FilAr PLA Verde Manzana", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFdd8ZqJ": { - "filaments": [ - "Snapmaker/Snapmaker PLA Wood" - ], - "name": "Snapmaker PLA Wood", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFdqkWtz": { - "filaments": [ - "Flashforge/Flashforge PLA Luminous" - ], - "name": "Flashforge PLA Luminous", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFdrYBmI": { - "filaments": [ - "Tiertime/Tiertime ASA" - ], - "name": "Tiertime ASA", - "filament_type": "ASA", - "filament_vendor": "Tiertime" - }, - "OFdtPd9h": { - "filaments": [ - "Qidi/QIDI PETG-GF" - ], - "name": "QIDI PETG-GF", - "filament_type": "PETG-GF", - "filament_vendor": "QIDI" - }, - "OFdzlrhi": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Chocolate" - ], - "name": "FilAr PLA-mate Chocolate", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFe61n6v": { - "filaments": [ - "Ratrig/RatRig PunkFil PETG CF" - ], - "name": "RatRig PunkFil PETG CF", - "filament_type": "PETG-CF10", - "filament_vendor": "RatRig" - }, - "OFe8tuNb": { - "filaments": [ - "Tiertime/Tiertime PA6-CF" - ], - "name": "Tiertime PA6-CF", - "filament_type": "PA6-CF", - "filament_vendor": "Tiertime" - }, - "OFe8yBMG": { - "filaments": [ - "Qidi/QIDI PETG Tough 0.6 nozzle" - ], - "name": "QIDI PETG Tough 0.6 nozzle", - "filament_type": "PETG", - "filament_vendor": "QIDI" - }, - "OFe98A1y": { - "filaments": [ - "Elegoo/Elegoo PET-CF", - "OrcaFilamentLibrary/Elegoo PET-CF" - ], - "name": "Elegoo PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "Elegoo" - }, - "OFeAxvEt": { - "filaments": [ - "Snapmaker/Snapmaker Dual ABS Benchy" - ], - "name": "Snapmaker Dual ABS Benchy", - "filament_type": "ABS", - "filament_vendor": "Snapmaker" - }, - "OFeCJqxx": { - "filaments": [ - "Qidi/QIDI ABS Rapido Metal" - ], - "name": "QIDI ABS Rapido Metal", - "filament_type": "ABS", - "filament_vendor": "QIDI" - }, - "OFeF4UNh": { - "filaments": [ - "BBL/BETA PLA Silk" - ], - "name": "BETA PLA Silk", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFeIyhUx": { - "filaments": [ - "Anycubic/Anycubic PC-CF" - ], - "name": "Anycubic PC-CF", - "filament_type": "PC-CF", - "filament_vendor": "Anycubic" - }, - "OFeTATC7": { - "filaments": [ - "Snapmaker/Snapmaker J1 Breakaway" - ], - "name": "Snapmaker J1 Breakaway", - "filament_type": "Breakaway Support", - "filament_vendor": "Snapmaker" - }, - "OFeVzkSU": { - "filaments": [ - "Snapmaker/Fiberon PPS-GF20" - ], - "name": "Fiberon PPS-GF20", - "filament_type": "ABS", - "filament_vendor": "Polymaker" - }, - "OFeelsSM": { - "filaments": [ - "Qidi/HATCHBOX PLA" - ], - "name": "HATCHBOX PLA", - "filament_type": "PLA", - "filament_vendor": "HATCHBOX" - }, - "OFelDBgv": { - "filaments": [ - "Snapmaker/Polymaker PLA" - ], - "name": "Polymaker PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFepU7Tl": { - "filaments": [ - "WonderMaker/WonderMaker PLA Matte" - ], - "name": "WonderMaker PLA Matte", - "filament_type": "PLA", - "filament_vendor": "WonderMaker" - }, - "OFesA6rF": { - "filaments": [ - "Anker/Generic PLA Silk", - "BBL/Generic PLA Silk", - "Creality/Generic PLA Silk", - "FLSun/Generic PLA Silk", - "Flashforge/Generic PLA Silk", - "OrcaArena/Generic PLA Silk", - "OrcaFilamentLibrary/Generic PLA Silk", - "Prusa/Generic PLA Silk", - "Qidi/Generic PLA Silk", - "Sovol/Generic PLA Silk", - "Tiertime/Generic PLA Silk" - ], - "name": "Generic PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFexaZU2": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Manteca" - ], - "name": "FilAr PLA Manteca", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFf0MkD5": { - "filaments": [ - "Qidi/QIDI PETG Translucent" - ], - "name": "QIDI PETG Translucent", - "filament_type": "PETG", - "filament_vendor": "QIDI" - }, - "OFf5awy4": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PLA Matte" - ], - "name": "Eolas Prints PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Eolas Prints" - }, - "OFf6ZEvu": { - "filaments": [ - "InfiMech/InfiMech PC" - ], - "name": "InfiMech PC", - "filament_type": "PC", - "filament_vendor": "InfiMech" - }, - "OFf6mfQO": { - "filaments": [ - "BBL/Bambu Support for ABS", - "OrcaFilamentLibrary/Bambu Support for ABS" - ], - "name": "Bambu Support for ABS", - "filament_type": "ABS", - "filament_vendor": "Bambu Lab" - }, - "OFf6ynfH": { - "filaments": [ - "FlyingBear/FlyingBear PETG Basic" - ], - "name": "FlyingBear PETG Basic", - "filament_type": "PETG Basic", - "filament_vendor": "FlyingBear" - }, - "OFfBpSRI": { - "filaments": [ - "BBL/Bambu ASA", - "OrcaFilamentLibrary/Bambu ASA" - ], - "name": "Bambu ASA", - "filament_type": "ASA", - "filament_vendor": "Bambu Lab" - }, - "OFfD87Gy": { - "filaments": [ - "Snapmaker/Snapmaker PLA Glow" - ], - "name": "Snapmaker PLA Glow", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFfHGM1D": { - "filaments": [ - "re3D/re3D rPP" - ], - "name": "re3D rPP", - "filament_type": "PP", - "filament_vendor": "re3D" - }, - "OFfJSCzm": { - "filaments": [ - "OrcaFilamentLibrary/FDplast PETG" - ], - "name": "FDplast PETG", - "filament_type": "PETG", - "filament_vendor": "FDplast" - }, - "OFfSqS4R": { - "filaments": [ - "Creality/ENDER FAST PLA" - ], - "name": "ENDER FAST PLA", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFfYHK5z": { - "filaments": [ - "Qidi/Polymaker PLA-HT" - ], - "name": "Polymaker PLA-HT", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFfZcoKr": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Piel" - ], - "name": "FilAr PLA-mate Piel", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFfb10SK": { - "filaments": [ - "Artillery/Artillery PC" - ], - "name": "Artillery PC", - "filament_type": "PC", - "filament_vendor": "Artillery" - }, - "OFfmHUkQ": { - "filaments": [ - "Snapmaker/Snapmaker Dual Breakaway" - ], - "name": "Snapmaker Dual Breakaway", - "filament_type": "Breakaway Support", - "filament_vendor": "Snapmaker" - }, - "OFfmZrI3": { - "filaments": [ - "OrcaFilamentLibrary/FDplast TPU" - ], - "name": "FDplast TPU", - "filament_type": "TPU", - "filament_vendor": "FDplast" - }, - "OFfnXFie": { - "filaments": [ - "BBL/COEX TPE 40D", - "OrcaFilamentLibrary/COEX TPE 40D" - ], - "name": "COEX TPE 40D", - "filament_type": "TPU", - "filament_vendor": "COEX 3D" - }, - "OFfq5YXA": { - "filaments": [ - "OrcaFilamentLibrary/Valment PLA-CF" - ], - "name": "Valment PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Valment" - }, - "OFfr4XNO": { - "filaments": [ - "BBL/COEX TPE 60D", - "OrcaFilamentLibrary/COEX TPE 60D" - ], - "name": "COEX TPE 60D", - "filament_type": "TPU", - "filament_vendor": "COEX 3D" - }, - "OFfr6JDF": { - "filaments": [ - "Qidi/QIDI PETG Tough 0.8 nozzle" - ], - "name": "QIDI PETG Tough 0.8 nozzle", - "filament_type": "PETG", - "filament_vendor": "QIDI" - }, - "OFfuhviw": { - "filaments": [ - "Elegoo/Elegoo PLA Marble", - "OrcaFilamentLibrary/Elegoo PLA Marble" - ], - "name": "Elegoo PLA Marble", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFfuih8e": { - "filaments": [ - "Creality/Creality Silk PLA" - ], - "name": "Creality Silk PLA", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFg3cWVt": { - "filaments": [ - "Snapmaker/Snapmaker Dual PLA Metal" - ], - "name": "Snapmaker Dual PLA Metal", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFg57Nmc": { - "filaments": [ - "BBL/Bambu PC FR", - "OrcaFilamentLibrary/Bambu PC FR" - ], - "name": "Bambu PC FR", - "filament_type": "PC", - "filament_vendor": "Bambu Lab" - }, - "OFg8hMzT": { - "filaments": [ - "OrcaFilamentLibrary/FILL3D PPCF" - ], - "name": "FILL3D PPCF", - "filament_type": "PP", - "filament_vendor": "FILL3D" - }, - "OFg8ndtj": { - "filaments": [ - "Anker/Generic PA", - "Anycubic/Generic PA", - "BBL/Generic PA", - "Blocks/Generic PA", - "Creality/Generic PA", - "Custom/Generic PA", - "Elegoo/Generic PA", - "FLSun/Generic PA", - "OrcaArena/Generic PA", - "OrcaFilamentLibrary/Generic PA", - "Prusa/Generic PA", - "Qidi/Generic PA", - "Ratrig/Generic PA", - "SecKit/Generic PA", - "Tiertime/Generic PA", - "Vzbot/Generic PA", - "Z-Bolt/Generic PA" - ], - "name": "Generic PA", - "filament_type": "PA", - "filament_vendor": "Generic" - }, - "OFgHh8ly": { - "filaments": [ - "Afinia/Afinia Value PLA" - ], - "name": "Afinia Value PLA", - "filament_type": "PLA", - "filament_vendor": "Afinia" - }, - "OFgMWJ8T": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Negro Azabache" - ], - "name": "FilAr PLA Negro Azabache", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFgSbX7E": { - "filaments": [ - "Volumic/Volumic PC (Performance)" - ], - "name": "Volumic PC (Performance)", - "filament_type": "PC", - "filament_vendor": "Volumic" - }, - "OFgXgt98": { - "filaments": [ - "Artillery/Artillery ABS" - ], - "name": "Artillery ABS", - "filament_type": "ABS", - "filament_vendor": "Artillery" - }, - "OFgbpcy9": { - "filaments": [ - "Anker/Generic TPU", - "Anycubic/Generic TPU", - "Artillery/Generic TPU", - "BBL/Generic TPU", - "Blocks/Generic TPU", - "Chuanying/Generic TPU", - "Co Print/Generic TPU", - "CoLiDo/Generic TPU", - "Creality/Generic TPU", - "Custom/Generic TPU", - "DeltaMaker/Generic TPU", - "FLSun/Generic TPU", - "Flashforge/Generic TPU", - "FlyingBear/Generic TPU", - "InfiMech/Generic TPU", - "OrcaArena/Generic TPU", - "OrcaFilamentLibrary/Generic TPU", - "Prusa/Generic TPU", - "Qidi/Generic TPU", - "RH3D/Generic TPU", - "Ratrig/Generic TPU", - "SecKit/Generic TPU", - "Sovol/Generic TPU", - "Tiertime/Generic TPU", - "Vzbot/Generic TPU" - ], - "name": "Generic TPU", - "filament_type": "TPU", - "filament_vendor": "Generic" - }, - "OFgdaBOt": { - "filaments": [ - "Snapmaker/Polymaker Tough PLA Family" - ], - "name": "Polymaker Tough PLA Family", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFgeM7nD": { - "filaments": [ - "Flashforge/Flashforge PA12-CF" - ], - "name": "Flashforge PA12-CF", - "filament_type": "PA-CF", - "filament_vendor": "Flashforge" - }, - "OFgjgN35": { - "filaments": [ - "Flashforge/Flashforge PLA Silk" - ], - "name": "Flashforge PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFglhKLM": { - "filaments": [ - "Qidi/QIDI PLA Rapido 0.8 nozzle" - ], - "name": "QIDI PLA Rapido 0.8 nozzle", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OFgpLTMR": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Gris Plata" - ], - "name": "FilAr PETG Gris Plata", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFgpQwkk": { - "filaments": [ - "Creality/CR-PLA Fluo" - ], - "name": "CR-PLA Fluo", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFgptDSf": { - "filaments": [ - "OrcaArena/Arena PLA Matte" - ], - "name": "Arena PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Orca Arena" - }, - "OFgyPlwU": { - "filaments": [ - "Snapmaker/Snapmaker TPU High-Flow" - ], - "name": "Snapmaker TPU High-Flow", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFh7mvPO": { - "filaments": [ - "Prusa/Prusament PVB" - ], - "name": "Prusament PVB", - "filament_type": "PVB", - "filament_vendor": "Prusa Polymers" - }, - "OFh9u9c0": { - "filaments": [ - "Creality/Generic PA6-GF" - ], - "name": "Generic PA6-GF", - "filament_type": "PA-GF", - "filament_vendor": "Generic" - }, - "OFhASRWj": { - "filaments": [ - "BBL/Panchroma PLA Temp Shift", - "OrcaFilamentLibrary/Panchroma PLA Temp Shift", - "Snapmaker/Panchroma PLA Temp Shift" - ], - "name": "Panchroma PLA Temp Shift", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFhMO9Kh": { - "filaments": [ - "OrcaFilamentLibrary/GreenGate3D PETG" - ], - "name": "GreenGate3D PETG", - "filament_type": "PETG", - "filament_vendor": "GreenGate3D" - }, - "OFhN09f0": { - "filaments": [ - "BBL/addnorth PC BLend HT LCF" - ], - "name": "addnorth PC BLend HT LCF", - "filament_type": "PC", - "filament_vendor": "addnorth" - }, - "OFhO5aEJ": { - "filaments": [ - "Ratrig/RatRig PunkFil ABS" - ], - "name": "RatRig PunkFil ABS", - "filament_type": "ABS", - "filament_vendor": "RatRig" - }, - "OFhQf8ou": { - "filaments": [ - "Snapmaker/Snapmaker PLA-CF" - ], - "name": "Snapmaker PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Snapmaker" - }, - "OFhQfUQY": { - "filaments": [ - "BBL/Generic SBS", - "OrcaFilamentLibrary/Generic SBS", - "Tiertime/Generic SBS" - ], - "name": "Generic SBS", - "filament_type": "SBS", - "filament_vendor": "Generic" - }, - "OFhTPf6L": { - "filaments": [ - "Creality/Generic PA6-CF", - "Elegoo/Generic PA6-CF" - ], - "name": "Generic PA6-CF", - "filament_type": "PA6-CF", - "filament_vendor": "Generic" - }, - "OFhUjPA5": { - "filaments": [ - "Eryone/Eryone TPU" - ], - "name": "Eryone TPU", - "filament_type": "TPU", - "filament_vendor": "Eryone" - }, - "OFhWc5Bv": { - "filaments": [ - "OrcaFilamentLibrary/NIT ABS" - ], - "name": "NIT ABS", - "filament_type": "ABS", - "filament_vendor": "NIT" - }, - "OFhWhL1i": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PETG" - ], - "name": "Eolas Prints PETG", - "filament_type": "PETG", - "filament_vendor": "Eolas Prints" - }, - "OFhWrAuP": { - "filaments": [ - "Qidi/QIDI PLA-CF" - ], - "name": "QIDI PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "QIDI" - }, - "OFhbolij": { - "filaments": [ - "Creality/eSUN PLA-Lite" - ], - "name": "eSUN PLA-Lite", - "filament_type": "PLA", - "filament_vendor": "eSUN" - }, - "OFhcYzR8": { - "filaments": [ - "Elegoo/Elegoo PLA Sparkle", - "OrcaFilamentLibrary/Elegoo PLA Sparkle" - ], - "name": "Elegoo PLA Sparkle", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFhfd722": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints TPU Flex 93A" - ], - "name": "Eolas Prints TPU Flex 93A", - "filament_type": "TPU", - "filament_vendor": "Eolas Prints" - }, - "OFhiJE7Y": { - "filaments": [ - "Qidi/QIDI PEBA 95A" - ], - "name": "QIDI PEBA 95A", - "filament_type": "PEBA", - "filament_vendor": "QIDI" - }, - "OFhkN0a7": { - "filaments": [ - "Creality/Hyper PA612-CF" - ], - "name": "Hyper PA612-CF", - "filament_type": "PA-CF", - "filament_vendor": "Creality" - }, - "OFhlCNqq": { - "filaments": [ - "BBL/COEX PLA", - "OrcaFilamentLibrary/COEX PLA" - ], - "name": "COEX PLA", - "filament_type": "PLA", - "filament_vendor": "COEX 3D" - }, - "OFhmxnYw": { - "filaments": [ - "Snapmaker/Snapmaker PLA Basic" - ], - "name": "Snapmaker PLA Basic", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFhuaUQB": { - "filaments": [ - "BBL/Bambu ABS", - "OrcaFilamentLibrary/Bambu ABS", - "Qidi/Bambu ABS" - ], - "name": "Bambu ABS", - "filament_type": "ABS", - "filament_vendor": "Bambu Lab" - }, - "OFhwiZ50": { - "filaments": [ - "Qidi/QIDI PLA Rapido 0.2 nozzle" - ], - "name": "QIDI PLA Rapido 0.2 nozzle", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OFhx4uOG": { - "filaments": [ - "Qidi/QIDI PET-GF" - ], - "name": "QIDI PET-GF", - "filament_type": "PET-GF", - "filament_vendor": "QIDI" - }, - "OFi5RSve": { - "filaments": [ - "Creality/eSUN PLA-LW" - ], - "name": "eSUN PLA-LW", - "filament_type": "PLA", - "filament_vendor": "eSUN" - }, - "OFi6PfUM": { - "filaments": [ - "Chuanying/Generic PLA-Silk", - "Creality/Generic PLA-Silk", - "Flashforge/Generic PLA-Silk" - ], - "name": "Generic PLA-Silk", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFi90KlM": { - "filaments": [ - "Volumic/Volumic NYLON Ultra (Performance)" - ], - "name": "Volumic NYLON Ultra (Performance)", - "filament_type": "PA", - "filament_vendor": "Volumic" - }, - "OFiDpM1B": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Bordo" - ], - "name": "FilAr PLA-mate Bordo", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFiEz2XI": { - "filaments": [ - "Cubicon/Cubicon PA-CF" - ], - "name": "Cubicon PA-CF", - "filament_type": "PA", - "filament_vendor": "Cubicon" - }, - "OFiWaoqD": { - "filaments": [ - "OrcaFilamentLibrary/DREMC PPA-CF" - ], - "name": "DREMC PPA-CF", - "filament_type": "PPA-CF", - "filament_vendor": "DREMC" - }, - "OFibWuBd": { - "filaments": [ - "Flashforge/Flashforge ABS Basic" - ], - "name": "Flashforge ABS Basic", - "filament_type": "ABS", - "filament_vendor": "Flashforge" - }, - "OFilAA3b": { - "filaments": [ - "Eryone/Eryone PLA-CF" - ], - "name": "Eryone PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Eryone" - }, - "OFilD4bP": { - "filaments": [ - "FlyingBear/FlyingBear PLA" - ], - "name": "FlyingBear PLA", - "filament_type": "PLA", - "filament_vendor": "FlyingBear" - }, - "OFilnglt": { - "filaments": [ - "Artillery/Artillery PETG" - ], - "name": "Artillery PETG", - "filament_type": "PETG", - "filament_vendor": "Artillery" - }, - "OFin64Qg": { - "filaments": [ - "Creality/Generic Support for PLA" - ], - "name": "Generic Support for PLA", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFitS8al": { - "filaments": [ - "BBL/PolyLite PLA Neon", - "Snapmaker/PolyLite PLA Neon" - ], - "name": "PolyLite PLA Neon", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFiwEbze": { - "filaments": [ - "Volumic/PETG ESD (Performance)" - ], - "name": "PETG ESD (Performance)", - "filament_type": "PETG-ESD", - "filament_vendor": "Volumic" - }, - "OFj3bTjw": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Amarillo" - ], - "name": "FilAr PLA-mate Amarillo", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFj64R5U": { - "filaments": [ - "Peopoly/Peopoly Lancer ABS-GF" - ], - "name": "Peopoly Lancer ABS-GF", - "filament_type": "ABS", - "filament_vendor": "Peopoly" - }, - "OFjD3YTW": { - "filaments": [ - "Qidi/Qidi PC-ABS-FR" - ], - "name": "Qidi PC-ABS-FR", - "filament_type": "PC-ABS-FR", - "filament_vendor": "QIDI" - }, - "OFjHrAX0": { - "filaments": [ - "WonderMaker/WonderMaker ABS" - ], - "name": "WonderMaker ABS", - "filament_type": "ABS", - "filament_vendor": "WonderMaker" - }, - "OFjLAYgO": { - "filaments": [ - "Anycubic/Anycubic PEBA" - ], - "name": "Anycubic PEBA", - "filament_type": "PEBA", - "filament_vendor": "Anycubic" - }, - "OFjPXrXO": { - "filaments": [ - "Elegoo/Elegoo PLA Glow", - "OrcaFilamentLibrary/Elegoo PLA Glow" - ], - "name": "Elegoo PLA Glow", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFjT9PkZ": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Tabaco" - ], - "name": "FilAr PLA Tabaco", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFjUGUIK": { - "filaments": [ - "iQ/Fiberthree PACF Pro P1" - ], - "name": "Fiberthree PACF Pro P1", - "filament_type": "PACF Pro", - "filament_vendor": "iQ Materials" - }, - "OFjUXn67": { - "filaments": [ - "BBL/BETA ABS" - ], - "name": "BETA ABS", - "filament_type": "ABS", - "filament_vendor": "BETA" - }, - "OFjVOWfJ": { - "filaments": [ - "Anycubic/Anycubic PLA High Speed" - ], - "name": "Anycubic PLA High Speed", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OFjXrKFO": { - "filaments": [ - "OrcaArena/Arena PLA Impact" - ], - "name": "Arena PLA Impact", - "filament_type": "PLA", - "filament_vendor": "Orca Arena" - }, - "OFjb0wos": { - "filaments": [ - "BBL/Panchroma PLA Metallic", - "OrcaFilamentLibrary/Panchroma PLA Metallic", - "Snapmaker/Panchroma PLA Metallic" - ], - "name": "Panchroma PLA Metallic", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFjiXpyf": { - "filaments": [ - "Qidi/Generic TPU 95A", - "TwoTrees/Generic TPU 95A" - ], - "name": "Generic TPU 95A", - "filament_type": "TPU", - "filament_vendor": "Generic" - }, - "OFjkdnyN": { - "filaments": [ - "Snapmaker/Snapmaker Dual TPU" - ], - "name": "Snapmaker Dual TPU", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFjoAe0R": { - "filaments": [ - "Qidi/Qidi PLA-CF" - ], - "name": "Qidi PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "QIDI" - }, - "OFjogeYN": { - "filaments": [ - "BBL/BETA PETG Glitter" - ], - "name": "BETA PETG Glitter", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFjorDcx": { - "filaments": [ - "OrcaFilamentLibrary/FDplast ABS" - ], - "name": "FDplast ABS", - "filament_type": "ABS", - "filament_vendor": "FDplast" - }, - "OFjt8dDO": { - "filaments": [ - "Flashforge/FusRock NexPA-CF25" - ], - "name": "FusRock NexPA-CF25", - "filament_type": "PA-CF", - "filament_vendor": "FusRock" - }, - "OFjt9en1": { - "filaments": [ - "OrcaFilamentLibrary/Generic CoPE" - ], - "name": "Generic CoPE", - "filament_type": "CoPE", - "filament_vendor": "Generic" - }, - "OFjz0a3m": { - "filaments": [ - "Prusa/Prusament PC-CF" - ], - "name": "Prusament PC-CF", - "filament_type": "PC-CF", - "filament_vendor": "Prusa Polymers" - }, - "OFk8t9mz": { - "filaments": [ - "BBL/Fiberon PETG-rCF", - "OrcaFilamentLibrary/Fiberon PETG-rCF" - ], - "name": "Fiberon PETG-rCF", - "filament_type": "PETG-CF", - "filament_vendor": "Polymaker" - }, - "OFkAltI8": { - "filaments": [ - "FlyingBear/Other PA-CF", - "InfiMech/Other PA-CF" - ], - "name": "Other PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Other" - }, - "OFkGp50Y": { - "filaments": [ - "Volumic/Volumic UNIVERSAL Ultra (Performance)" - ], - "name": "Volumic UNIVERSAL Ultra (Performance)", - "filament_type": "UNIV", - "filament_vendor": "Volumic" - }, - "OFkGvN4d": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Verde Pixel" - ], - "name": "FilAr PLA Verde Pixel", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFkHbjUv": { - "filaments": [ - "BBL/BETA PLA Metallic" - ], - "name": "BETA PLA Metallic", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFkOviHk": { - "filaments": [ - "BBL/Fiberon PA6-CF", - "OrcaFilamentLibrary/Fiberon PA6-CF" - ], - "name": "Fiberon PA6-CF", - "filament_type": "PA6-CF", - "filament_vendor": "Polymaker" - }, - "OFkR8E2c": { - "filaments": [ - "Prusa/Prusament PETG" - ], - "name": "Prusament PETG", - "filament_type": "PETG", - "filament_vendor": "Prusa Polymers" - }, - "OFkf1HHw": { - "filaments": [ - "Flashforge/Generic PLA-SILK" - ], - "name": "Generic PLA-SILK", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFkhhUS0": { - "filaments": [ - "Elegoo/Elegoo Rapid PLA+", - "OrcaFilamentLibrary/Elegoo Rapid PLA+" - ], - "name": "Elegoo Rapid PLA+", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFklJcWK": { - "filaments": [ - "FlyingBear/Other PLA Hyper", - "InfiMech/Other PLA Hyper" - ], - "name": "Other PLA Hyper", - "filament_type": "PLA", - "filament_vendor": "Other" - }, - "OFknl9Iz": { - "filaments": [ - "BBL/Bambu ABS-GF", - "OrcaFilamentLibrary/Bambu ABS-GF" - ], - "name": "Bambu ABS-GF", - "filament_type": "ABS-GF", - "filament_vendor": "Bambu Lab" - }, - "OFkoLUtR": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Verde Oliva" - ], - "name": "FilAr PLA Verde Oliva", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFkq7rPy": { - "filaments": [ - "Eryone/Eryone PA-GF" - ], - "name": "Eryone PA-GF", - "filament_type": "PA-GF", - "filament_vendor": "Eryone" - }, - "OFks6esg": { - "filaments": [ - "Creality/EN-PLA+" - ], - "name": "EN-PLA+", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFkx5MEe": { - "filaments": [ - "Artillery/Artillery PVA" - ], - "name": "Artillery PVA", - "filament_type": "PVA", - "filament_vendor": "Artillery" - }, - "OFkzr35f": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial" - ], - "name": "Eolas Prints PLA Antibacterial", - "filament_type": "PLA", - "filament_vendor": "Eolas Prints" - }, - "OFlBoEfL": { - "filaments": [ - "Snapmaker/Snapmaker J1 TPU High-Flow" - ], - "name": "Snapmaker J1 TPU High-Flow", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFlIsW6f": { - "filaments": [ - "Snapmaker/Snapmaker Dual PLA Matte" - ], - "name": "Snapmaker Dual PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFlN6DL1": { - "filaments": [ - "Qidi/QIDI PA-Ultra" - ], - "name": "QIDI PA-Ultra", - "filament_type": "UltraPA", - "filament_vendor": "QIDI" - }, - "OFlP3KWq": { - "filaments": [ - "Elegoo/Elegoo PETG HF", - "OrcaFilamentLibrary/Elegoo PETG HF" - ], - "name": "Elegoo PETG HF", - "filament_type": "PETG", - "filament_vendor": "Elegoo" - }, - "OFlSNkhc": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints ASA" - ], - "name": "Eolas Prints ASA", - "filament_type": "ASA", - "filament_vendor": "Eolas Prints" - }, - "OFlfuj2k": { - "filaments": [ - "BBL/Bambu TPU 85A" - ], - "name": "Bambu TPU 85A", - "filament_type": "TPU", - "filament_vendor": "Bambu Lab" - }, - "OFlgMgNM": { - "filaments": [ - "Flashforge/Flashforge PPS" - ], - "name": "Flashforge PPS", - "filament_type": "PPS", - "filament_vendor": "Flashforge" - }, - "OFllmFhT": { - "filaments": [ - "Elegoo/Generic PETG PRO" - ], - "name": "Generic PETG PRO", - "filament_type": "PETG", - "filament_vendor": "Generic" - }, - "OFlmxlDG": { - "filaments": [ - "BBL/BETA HIPS" - ], - "name": "BETA HIPS", - "filament_type": "HIPS", - "filament_vendor": "BETA" - }, - "OFln72PT": { - "filaments": [ - "Elegoo/Elegoo PLA-CF", - "OrcaFilamentLibrary/Elegoo PLA-CF" - ], - "name": "Elegoo PLA-CF", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFlsTpJG": { - "filaments": [ - "Elegoo/Elegoo PC-FR", - "OrcaFilamentLibrary/Elegoo PC-FR" - ], - "name": "Elegoo PC-FR", - "filament_type": "PC", - "filament_vendor": "Elegoo" - }, - "OFlufQpZ": { - "filaments": [ - "Snapmaker/Snapmaker PLA" - ], - "name": "Snapmaker PLA", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFlwmqrC": { - "filaments": [ - "BBL/Polymaker HT-PLA-GF", - "OrcaFilamentLibrary/Polymaker HT-PLA-GF", - "Snapmaker/Polymaker HT-PLA-GF" - ], - "name": "Polymaker HT-PLA-GF", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFm06H6V": { - "filaments": [ - "Elegoo/Elegoo PLA Basic", - "OrcaFilamentLibrary/Elegoo PLA Basic" - ], - "name": "Elegoo PLA Basic", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFm4SivL": { - "filaments": [ - "Flashforge/Flashforge PLA Pro" - ], - "name": "Flashforge PLA Pro", - "filament_type": "PLA", - "filament_vendor": "Flashforge" - }, - "OFm4ysMO": { - "filaments": [ - "FlyingBear/FlyingBear ABS" - ], - "name": "FlyingBear ABS", - "filament_type": "ABS", - "filament_vendor": "FlyingBear" - }, - "OFm70lLt": { - "filaments": [ - "CoLiDo/CoLiDo PLA" - ], - "name": "CoLiDo PLA", - "filament_type": "PLA", - "filament_vendor": "CoLiDo" - }, - "OFmCOW2Y": { - "filaments": [ - "re3D/re3D rPETG" - ], - "name": "re3D rPETG", - "filament_type": "PETG", - "filament_vendor": "re3D" - }, - "OFmFwUWM": { - "filaments": [ - "Prusa/Prusament ASA" - ], - "name": "Prusament ASA", - "filament_type": "ASA", - "filament_vendor": "Prusa Polymers" - }, - "OFmJAd3A": { - "filaments": [ - "OrcaFilamentLibrary/FDplast HIPS" - ], - "name": "FDplast HIPS", - "filament_type": "HIPS", - "filament_vendor": "FDplast" - }, - "OFmKU2Ha": { - "filaments": [ - "Eryone/Eryone PLA" - ], - "name": "Eryone PLA", - "filament_type": "PLA", - "filament_vendor": "Eryone" - }, - "OFmN2lvw": { - "filaments": [ - "BBL/Generic TPU for AMS" - ], - "name": "Generic TPU for AMS", - "filament_type": "TPU-AMS", - "filament_vendor": "Generic" - }, - "OFmY0l6t": { - "filaments": [ - "Creality/Generic PLA Matte", - "Elegoo/Generic PLA Matte", - "OrcaFilamentLibrary/Generic PLA Matte" - ], - "name": "Generic PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFma5TXH": { - "filaments": [ - "Qidi/QIDI ABS Odorless" - ], - "name": "QIDI ABS Odorless", - "filament_type": "ABS", - "filament_vendor": "QIDI" - }, - "OFmaeU4a": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Naranja" - ], - "name": "FilAr PLA-mate Naranja", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFmfizbq": { - "filaments": [ - "OrcaArena/Arena PLA Silk" - ], - "name": "Arena PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Orca Arena" - }, - "OFmjN2bc": { - "filaments": [ - "Anycubic/Anycubic PLA" - ], - "name": "Anycubic PLA", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OFmn9NZL": { - "filaments": [ - "BBL/FusRock ABS-GF", - "OrcaFilamentLibrary/FusRock ABS-GF" - ], - "name": "FusRock ABS-GF", - "filament_type": "ABS-GF", - "filament_vendor": "FusRock" - }, - "OFmpMwxS": { - "filaments": [ - "BBL/Generic PLA High Speed", - "Creality/Generic PLA High Speed", - "FLSun/Generic PLA High Speed", - "Flashforge/Generic PLA High Speed", - "OrcaFilamentLibrary/Generic PLA High Speed", - "Qidi/Generic PLA High Speed", - "Tiertime/Generic PLA High Speed" - ], - "name": "Generic PLA High Speed", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFmt513L": { - "filaments": [ - "BBL/BETA PETG Transparent" - ], - "name": "BETA PETG Transparent", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFmveLWz": { - "filaments": [ - "Elegoo/Elegoo PETG-GF", - "OrcaFilamentLibrary/Elegoo PETG-GF" - ], - "name": "Elegoo PETG-GF", - "filament_type": "PETG", - "filament_vendor": "Elegoo" - }, - "OFn1QaY3": { - "filaments": [ - "Elegoo/Elegoo PLA Translucent2", - "OrcaFilamentLibrary/Elegoo PLA Translucent2" - ], - "name": "Elegoo PLA Translucent2", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFn2GlhY": { - "filaments": [ - "Creality/Hyper PA6-CF" - ], - "name": "Hyper PA6-CF", - "filament_type": "PA-CF", - "filament_vendor": "Creality" - }, - "OFn6WpN7": { - "filaments": [ - "Qidi/QIDI PA12-CF" - ], - "name": "QIDI PA12-CF", - "filament_type": "PA12-CF", - "filament_vendor": "QIDI" - }, - "OFnBvPhb": { - "filaments": [ - "BBL/addnorth PLA rPLA RE-ADD" - ], - "name": "addnorth PLA rPLA RE-ADD", - "filament_type": "PLA", - "filament_vendor": "addnorth" - }, - "OFnHc3D6": { - "filaments": [ - "Creality/eSUN PLA-CF" - ], - "name": "eSUN PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "eSUN" - }, - "OFnO4wnf": { - "filaments": [ - "Prusa/Prusament PLA" - ], - "name": "Prusament PLA", - "filament_type": "PLA", - "filament_vendor": "Prusa Polymers" - }, - "OFnSeLHk": { - "filaments": [ - "CoLiDo/CoLiDo PLA Silk" - ], - "name": "CoLiDo PLA Silk", - "filament_type": "PLA", - "filament_vendor": "CoLiDo" - }, - "OFnT7Qpb": { - "filaments": [ - "Prusa/Generic TPU HF" - ], - "name": "Generic TPU HF", - "filament_type": "TPU", - "filament_vendor": "Generic" - }, - "OFnXrkhA": { - "filaments": [ - "InfiMech/InfiMech PA-CF" - ], - "name": "InfiMech PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "InfiMech" - }, - "OFnXwW8l": { - "filaments": [ - "Snapmaker/PolyLite PLA Pro Metallic" - ], - "name": "PolyLite PLA Pro Metallic", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFnYVFk2": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Azul Francia" - ], - "name": "FilAr PLA Azul Francia", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFncpm7O": { - "filaments": [ - "WonderMaker/WonderMaker PLA Silk" - ], - "name": "WonderMaker PLA Silk", - "filament_type": "PLA", - "filament_vendor": "WonderMaker" - }, - "OFneOFWe": { - "filaments": [ - "CoLiDo/CoLiDo ABS" - ], - "name": "CoLiDo ABS", - "filament_type": "ABS", - "filament_vendor": "CoLiDo" - }, - "OFnejEt4": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Cian" - ], - "name": "FilAr PETG Cian", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFnfxTvi": { - "filaments": [ - "BBL/Bambu PLA Lite" - ], - "name": "Bambu PLA Lite", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFngcE81": { - "filaments": [ - "LH/LHS TPU Foamy 78A" - ], - "name": "LHS TPU Foamy 78A", - "filament_type": "TPU", - "filament_vendor": "LH Stinger" - }, - "OFniMuTN": { - "filaments": [ - "BBL/Bambu PA6-CF", - "OrcaFilamentLibrary/Bambu PA6-CF" - ], - "name": "Bambu PA6-CF", - "filament_type": "PA6-CF", - "filament_vendor": "Bambu Lab" - }, - "OFnmp2pO": { - "filaments": [ - "Snapmaker/Snapmaker Breakaway Support For PLA" - ], - "name": "Snapmaker Breakaway Support For PLA", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFnmp6rt": { - "filaments": [ - "Anycubic/Anycubic PLA+" - ], - "name": "Anycubic PLA+", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OFnpX8uh": { - "filaments": [ - "BBL/BETA PETG Matte" - ], - "name": "BETA PETG Matte", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFnyHfcv": { - "filaments": [ - "Ratrig/Generic ABS BigNozzle" - ], - "name": "Generic ABS BigNozzle", - "filament_type": "ABS", - "filament_vendor": "Generic" - }, - "OFo15hcT": { - "filaments": [ - "Qidi/QIDI PAHT-GF" - ], - "name": "QIDI PAHT-GF", - "filament_type": "PAHT-GF", - "filament_vendor": "QIDI" - }, - "OFo2UF2C": { - "filaments": [ - "BBL/Generic BVOH", - "Creality/Generic BVOH", - "Flashforge/Generic BVOH", - "OrcaFilamentLibrary/Generic BVOH", - "Tiertime/Generic BVOH" - ], - "name": "Generic BVOH", - "filament_type": "BVOH", - "filament_vendor": "Generic" - }, - "OFo6n2pB": { - "filaments": [ - "Anycubic/Anycubic PETG" - ], - "name": "Anycubic PETG", - "filament_type": "PETG", - "filament_vendor": "Anycubic" - }, - "OFoBTKmn": { - "filaments": [ - "Cubicon/Cubicon PETG" - ], - "name": "Cubicon PETG", - "filament_type": "PETG", - "filament_vendor": "Cubicon" - }, - "OFoSknDB": { - "filaments": [ - "OrcaFilamentLibrary/FILL3D PLA Turbo" - ], - "name": "FILL3D PLA Turbo", - "filament_type": "PLA", - "filament_vendor": "FILL3D" - }, - "OFoYSJKi": { - "filaments": [ - "Anker/Generic PETG-CF", - "BBL/Generic PETG-CF", - "Creality/Generic PETG-CF", - "Elegoo/Generic PETG-CF", - "Flashforge/Generic PETG-CF", - "OrcaArena/Generic PETG-CF", - "OrcaFilamentLibrary/Generic PETG-CF", - "Qidi/Generic PETG-CF", - "Tiertime/Generic PETG-CF" - ], - "name": "Generic PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Generic" - }, - "OFobDOW5": { - "filaments": [ - "Elegoo/Elegoo ASA", - "OrcaFilamentLibrary/Elegoo ASA" - ], - "name": "Elegoo ASA", - "filament_type": "ASA", - "filament_vendor": "Elegoo" - }, - "OFocyw69": { - "filaments": [ - "BBL/AliZ PETG", - "OrcaFilamentLibrary/AliZ PETG" - ], - "name": "AliZ PETG", - "filament_type": "PETG", - "filament_vendor": "Aliz" - }, - "OFoiVqVM": { - "filaments": [ - "BBL/Bambu PLA Basic", - "OrcaFilamentLibrary/Bambu PLA Basic" - ], - "name": "Bambu PLA Basic", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFojbdhR": { - "filaments": [ - "Flashforge/Flashforge ABS-GF" - ], - "name": "Flashforge ABS-GF", - "filament_type": "ABS-GF", - "filament_vendor": "Flashforge" - }, - "OForhBi4": { - "filaments": [ - "Cubicon/Cubicon ABSk" - ], - "name": "Cubicon ABSk", - "filament_type": "ABS", - "filament_vendor": "Cubicon" - }, - "OFovEIbw": { - "filaments": [ - "BBL/Bambu PETG HF", - "OrcaFilamentLibrary/Bambu PETG HF" - ], - "name": "Bambu PETG HF", - "filament_type": "PETG", - "filament_vendor": "Bambu Lab" - }, - "OFp4ETDP": { - "filaments": [ - "Creality/CR-PLA" - ], - "name": "CR-PLA", - "filament_type": "PLA", - "filament_vendor": "Creality" - }, - "OFp57RRC": { - "filaments": [ - "Qidi/QIDI PPS-GF" - ], - "name": "QIDI PPS-GF", - "filament_type": "PPS-GF", - "filament_vendor": "QIDI" - }, - "OFp9wdmf": { - "filaments": [ - "Eryone/Eryone PA-CF" - ], - "name": "Eryone PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Eryone" - }, - "OFpBlrvY": { - "filaments": [ - "OrcaFilamentLibrary/Valment PLA Silk" - ], - "name": "Valment PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Valment" - }, - "OFpDo5Ix": { - "filaments": [ - "Cubicon/Cubicon ABS" - ], - "name": "Cubicon ABS", - "filament_type": "ABS", - "filament_vendor": "Cubicon" - }, - "OFpPGSKG": { - "filaments": [ - "BBL/SUNLU Silk PLA+", - "Flashforge/SUNLU Silk PLA+", - "OrcaFilamentLibrary/SUNLU Silk PLA+" - ], - "name": "SUNLU Silk PLA+", - "filament_type": "PLA", - "filament_vendor": "SUNLU" - }, - "OFpPJSHE": { - "filaments": [ - "Peopoly/Peopoly Lancer PETG-C" - ], - "name": "Peopoly Lancer PETG-C", - "filament_type": "PETG", - "filament_vendor": "Peopoly" - }, - "OFpW4gdi": { - "filaments": [ - "BBL/SUNLU PLA Matte", - "Flashforge/SUNLU PLA Matte", - "OrcaFilamentLibrary/SUNLU PLA Matte" - ], - "name": "SUNLU PLA Matte", - "filament_type": "PLA", - "filament_vendor": "SUNLU" - }, - "OFpdjFI3": { - "filaments": [ - "BBL/BETA PLA UV Color Change" - ], - "name": "BETA PLA UV Color Change", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFpu74Qe": { - "filaments": [ - "Snapmaker/Snapmaker PLA Eco" - ], - "name": "Snapmaker PLA Eco", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFpumhCM": { - "filaments": [ - "Volumic/Volumic UNIVERSAL Ultra" - ], - "name": "Volumic UNIVERSAL Ultra", - "filament_type": "UNIV", - "filament_vendor": "Volumic" - }, - "OFq0TY7C": { - "filaments": [ - "Flashforge/Flashforge ASA-CF" - ], - "name": "Flashforge ASA-CF", - "filament_type": "ASA-CF", - "filament_vendor": "Flashforge" - }, - "OFq8gfS4": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Negro Azabache" - ], - "name": "FilAr PETG Negro Azabache", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFq9svOz": { - "filaments": [ - "BBL/Generic PPS", - "Creality/Generic PPS", - "Tiertime/Generic PPS" - ], - "name": "Generic PPS", - "filament_type": "PPS", - "filament_vendor": "Generic" - }, - "OFqFRiLb": { - "filaments": [ - "Ratrig/Generic PLA BigNozzle" - ], - "name": "Generic PLA BigNozzle", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFqGRZyH": { - "filaments": [ - "BBL/Numakers PLA+", - "OrcaFilamentLibrary/Numakers PLA+" - ], - "name": "Numakers PLA+", - "filament_type": "PLA", - "filament_vendor": "Numakers" - }, - "OFqHQNoZ": { - "filaments": [ - "Elegoo/Elegoo TPU 95A", - "OrcaFilamentLibrary/Elegoo TPU 95A" - ], - "name": "Elegoo TPU 95A", - "filament_type": "TPU", - "filament_vendor": "Elegoo" - }, - "OFqINlYj": { - "filaments": [ - "BBL/eSUN PLA+", - "Creality/eSUN PLA+", - "OrcaFilamentLibrary/eSUN PLA+" - ], - "name": "eSUN PLA+", - "filament_type": "PLA", - "filament_vendor": "eSUN" - }, - "OFqTwtXM": { - "filaments": [ - "BBL/addnorth PETG rPETG Matte" - ], - "name": "addnorth PETG rPETG Matte", - "filament_type": "PETG", - "filament_vendor": "addnorth" - }, - "OFqcL5UF": { - "filaments": [ - "Qidi/QIDI Support For PET/PA" - ], - "name": "QIDI Support For PET/PA", - "filament_type": "PA-S", - "filament_vendor": "QIDI" - }, - "OFqtx549": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo" - ], - "name": "FilAr PLA-mate Celeste Cielo", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFqw2PQA": { - "filaments": [ - "BBL/Panchroma CoPE", - "OrcaFilamentLibrary/Panchroma CoPE", - "Snapmaker/Panchroma CoPE" - ], - "name": "Panchroma CoPE", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFrFBEfd": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PLA Neon" - ], - "name": "Eolas Prints PLA Neon", - "filament_type": "PLA", - "filament_vendor": "Eolas Prints" - }, - "OFrGJ4tR": { - "filaments": [ - "Anycubic/Anycubic PLA Slik" - ], - "name": "Anycubic PLA Slik", - "filament_type": "PLA", - "filament_vendor": "Anycubic" - }, - "OFrKLeE3": { - "filaments": [ - "BBL/Bambu PLA Metal", - "OrcaFilamentLibrary/Bambu PLA Metal" - ], - "name": "Bambu PLA Metal", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFrLiqiM": { - "filaments": [ - "InfiMech/InfiMech PETG" - ], - "name": "InfiMech PETG", - "filament_type": "PETG", - "filament_vendor": "InfiMech" - }, - "OFrM4hdm": { - "filaments": [ - "Creality/CR-PLA Carbon" - ], - "name": "CR-PLA Carbon", - "filament_type": "PLA-CF", - "filament_vendor": "Creality" - }, - "OFrOh600": { - "filaments": [ - "BBL/Panchroma PLA Matte", - "Creality/Panchroma PLA Matte", - "OrcaFilamentLibrary/Panchroma PLA Matte", - "Snapmaker/Panchroma PLA Matte" - ], - "name": "Panchroma PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFrZDhVt": { - "filaments": [ - "Flashforge/Flashforge ASA-GF" - ], - "name": "Flashforge ASA-GF", - "filament_type": "ASA-GF", - "filament_vendor": "Flashforge" - }, - "OFrdZ0cK": { - "filaments": [ - "Creality/eSUN PETG+HS" - ], - "name": "eSUN PETG+HS", - "filament_type": "PETG", - "filament_vendor": "eSUN" - }, - "OFrjacXf": { - "filaments": [ - "Flashforge/Flashforge PET-CF" - ], - "name": "Flashforge PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "Flashforge" - }, - "OFrqMlGt": { - "filaments": [ - "BBL/BETA PETG" - ], - "name": "BETA PETG", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFrr67nG": { - "filaments": [ - "OrcaArena/Arena PC" - ], - "name": "Arena PC", - "filament_type": "PC", - "filament_vendor": "Orca Arena" - }, - "OFryjl35": { - "filaments": [ - "Elegoo/Elegoo ASA-CF", - "OrcaFilamentLibrary/Elegoo ASA-CF" - ], - "name": "Elegoo ASA-CF", - "filament_type": "ASA", - "filament_vendor": "Elegoo" - }, - "OFsB2lxm": { - "filaments": [ - "Elegoo/Elegoo PLA Matte", - "OrcaFilamentLibrary/Elegoo PLA Matte" - ], - "name": "Elegoo PLA Matte", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFsD974q": { - "filaments": [ - "Volumic/Volumic PETG Ultra (Performance)" - ], - "name": "Volumic PETG Ultra (Performance)", - "filament_type": "PETG", - "filament_vendor": "Volumic" - }, - "OFsDXRpS": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Piel" - ], - "name": "FilAr PLA Piel", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFsFo7ms": { - "filaments": [ - "Volumic/Volumic PP Ultra" - ], - "name": "Volumic PP Ultra", - "filament_type": "PP", - "filament_vendor": "Volumic" - }, - "OFsFon5l": { - "filaments": [ - "BBL/Generic HIPS", - "Chuanying/Generic HIPS", - "Creality/Generic HIPS", - "Flashforge/Generic HIPS", - "OrcaFilamentLibrary/Generic HIPS", - "Tiertime/Generic HIPS" - ], - "name": "Generic HIPS", - "filament_type": "HIPS", - "filament_vendor": "Generic" - }, - "OFsHSVZc": { - "filaments": [ - "BBL/Bambu Support W", - "OrcaFilamentLibrary/Bambu Support W" - ], - "name": "Bambu Support W", - "filament_type": "PLA", - "filament_vendor": "Bambu Lab" - }, - "OFsP8PKH": { - "filaments": [ - "Z-Bolt/Generic ABS HT" - ], - "name": "Generic ABS HT", - "filament_type": "ABS", - "filament_vendor": "Generic" - }, - "OFsRDvTM": { - "filaments": [ - "Anycubic/Panchroma PLA", - "BBL/Panchroma PLA", - "OrcaFilamentLibrary/Panchroma PLA", - "Snapmaker/Panchroma PLA" - ], - "name": "Panchroma PLA", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFsXQXbs": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" - ], - "name": "FilAr PETG Blanco Antartida", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFsijjtH": { - "filaments": [ - "BBL/Generic PP-GF", - "OrcaFilamentLibrary/Generic PP-GF", - "Tiertime/Generic PP-GF" - ], - "name": "Generic PP-GF", - "filament_type": "PP-GF", - "filament_vendor": "Generic" - }, - "OFsoykbm": { - "filaments": [ - "OrcaFilamentLibrary/DREMC PA6-CF" - ], - "name": "DREMC PA6-CF", - "filament_type": "PA6-CF", - "filament_vendor": "DREMC" - }, - "OFt0JbR7": { - "filaments": [ - "Snapmaker/Snapmaker J1 PLA Metal" - ], - "name": "Snapmaker J1 PLA Metal", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFt3HtlG": { - "filaments": [ - "Qidi/QIDI ABS-GF" - ], - "name": "QIDI ABS-GF", - "filament_type": "ABS-GF", - "filament_vendor": "QIDI" - }, - "OFt6e0US": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Amarillo Lima" - ], - "name": "FilAr PETG Amarillo Lima", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFt7SngH": { - "filaments": [ - "Snapmaker/Snapmaker J1 ASA" - ], - "name": "Snapmaker J1 ASA", - "filament_type": "ASA", - "filament_vendor": "Snapmaker" - }, - "OFtFtiS0": { - "filaments": [ - "Snapmaker/Polymaker PETG Galaxy" - ], - "name": "Polymaker PETG Galaxy", - "filament_type": "PETG", - "filament_vendor": "Polymaker" - }, - "OFtGC1ye": { - "filaments": [ - "Artillery/Artillery PA-CF" - ], - "name": "Artillery PA-CF", - "filament_type": "PA-CF", - "filament_vendor": "Artillery" - }, - "OFtKeKa9": { - "filaments": [ - "OrcaArena/Arena PLA Tough" - ], - "name": "Arena PLA Tough", - "filament_type": "PLA", - "filament_vendor": "Orca Arena" - }, - "OFtOPlK6": { - "filaments": [ - "OrcaArena/Arena PAHT-CF" - ], - "name": "Arena PAHT-CF", - "filament_type": "PA-CF", - "filament_vendor": "Orca Arena" - }, - "OFtOoWIj": { - "filaments": [], - "name": "FilAr PLA-mate", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFtRn8X8": { - "filaments": [ - "OrcaFilamentLibrary/FDplast SBS" - ], - "name": "FDplast SBS", - "filament_type": "SBS", - "filament_vendor": "FDplast" - }, - "OFtdVZpV": { - "filaments": [ - "BBL/addnorth PLA X-PLA" - ], - "name": "addnorth PLA X-PLA", - "filament_type": "PLA", - "filament_vendor": "addnorth" - }, - "OFtefokm": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Blanco" - ], - "name": "FilAr PLA-mate Blanco", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFtkLO6q": { - "filaments": [ - "BBL/Bambu TPU 90A" - ], - "name": "Bambu TPU 90A", - "filament_type": "TPU", - "filament_vendor": "Bambu Lab" - }, - "OFtndTHe": { - "filaments": [ - "BBL/BETA PETG-CF" - ], - "name": "BETA PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "BETA" - }, - "OFtpXCCv": { - "filaments": [ - "BBL/COEX ASA PRIME", - "OrcaFilamentLibrary/COEX ASA PRIME" - ], - "name": "COEX ASA PRIME", - "filament_type": "ASA", - "filament_vendor": "COEX 3D" - }, - "OFtr8eZw": { - "filaments": [ - "OrcaFilamentLibrary/FDplast PLA" - ], - "name": "FDplast PLA", - "filament_type": "PLA", - "filament_vendor": "FDplast" - }, - "OFtudokz": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PLA Premium" - ], - "name": "Eolas Prints PLA Premium", - "filament_type": "PLA", - "filament_vendor": "Eolas Prints" - }, - "OFtybfNX": { - "filaments": [ - "Snapmaker/Snapmaker PLA Metal" - ], - "name": "Snapmaker PLA Metal", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFu08yGN": { - "filaments": [ - "Volumic/Volumic PETG Ultra carbone" - ], - "name": "Volumic PETG Ultra carbone", - "filament_type": "PETG", - "filament_vendor": "Volumic" - }, - "OFu0fjPJ": { - "filaments": [ - "LH/LHS PC CF" - ], - "name": "LHS PC CF", - "filament_type": "PC", - "filament_vendor": "LH Stinger" - }, - "OFu1E4ur": { - "filaments": [ - "Qidi/QIDI ASA-Aero" - ], - "name": "QIDI ASA-Aero", - "filament_type": "ASA-AERO", - "filament_vendor": "QIDI" - }, - "OFu1evlr": { - "filaments": [ - "BBL/Generic PCTG", - "Creality/Generic PCTG", - "OrcaFilamentLibrary/Generic PCTG", - "Ratrig/Generic PCTG", - "Tiertime/Generic PCTG" - ], - "name": "Generic PCTG", - "filament_type": "PCTG", - "filament_vendor": "Generic" - }, - "OFuFEtKX": { - "filaments": [ - "Flashforge/Flashforge PETG-CF" - ], - "name": "Flashforge PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Flashforge" - }, - "OFuJ49uH": { - "filaments": [ - "Qidi/QIDI PETG Basic" - ], - "name": "QIDI PETG Basic", - "filament_type": "PETG", - "filament_vendor": "QIDI" - }, - "OFuO0cAP": { - "filaments": [ - "OrcaArena/Arena PETG-CF" - ], - "name": "Arena PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Orca Arena" - }, - "OFuUuIhR": { - "filaments": [ - "Elegoo/Elegoo PETG-CF", - "OrcaFilamentLibrary/Elegoo PETG-CF" - ], - "name": "Elegoo PETG-CF", - "filament_type": "PETG", - "filament_vendor": "Elegoo" - }, - "OFuV79ru": { - "filaments": [ - "Flashforge/Flashforge PA66-CF" - ], - "name": "Flashforge PA66-CF", - "filament_type": "PA-CF", - "filament_vendor": "Flashforge" - }, - "OFuWCQXN": { - "filaments": [ - "BBL/COEX ABS PRIME", - "OrcaFilamentLibrary/COEX ABS PRIME" - ], - "name": "COEX ABS PRIME", - "filament_type": "ABS", - "filament_vendor": "COEX 3D" - }, - "OFuehn62": { - "filaments": [ - "OrcaArena/Arena PLA Marble" - ], - "name": "Arena PLA Marble", - "filament_type": "PLA", - "filament_vendor": "Orca Arena" - }, - "OFufTAK9": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA-mate Negro" - ], - "name": "FilAr PLA-mate Negro", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFughwKn": { - "filaments": [ - "Qidi/QIDI PLA Matte Basic" - ], - "name": "QIDI PLA Matte Basic", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OFujZSdh": { - "filaments": [ - "Creality/Hyper PETG" - ], - "name": "Hyper PETG", - "filament_type": "PETG", - "filament_vendor": "Creality" - }, - "OFulOdT2": { - "filaments": [ - "Flashforge/Generic TPU 85A" - ], - "name": "Generic TPU 85A", - "filament_type": "TPU", - "filament_vendor": "Generic" - }, - "OFurdQxc": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Magenta" - ], - "name": "FilAr PETG Magenta", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFusbWjj": { - "filaments": [ - "Creality/Hyper PETG-CF" - ], - "name": "Hyper PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Creality" - }, - "OFuvOt0r": { - "filaments": [ - "BBL/BETA PLA Basic" - ], - "name": "BETA PLA Basic", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFuxH0Uz": { - "filaments": [ - "Volumic/Volumic FLEX93 Ultra" - ], - "name": "Volumic FLEX93 Ultra", - "filament_type": "TPU", - "filament_vendor": "Volumic" - }, - "OFvD0Qqt": { - "filaments": [ - "Ratrig/Generic PETG BigNozzle" - ], - "name": "Generic PETG BigNozzle", - "filament_type": "PETG", - "filament_vendor": "Generic" - }, - "OFvDbkFq": { - "filaments": [ - "Prusa/Prusament PC Blend" - ], - "name": "Prusament PC Blend", - "filament_type": "PC", - "filament_vendor": "Prusa Polymers" - }, - "OFvKUnLh": { - "filaments": [ - "BBL/Bambu TPU 95A HF", - "OrcaFilamentLibrary/Bambu TPU 95A HF" - ], - "name": "Bambu TPU 95A HF", - "filament_type": "TPU", - "filament_vendor": "Bambu Lab" - }, - "OFvLppPU": { - "filaments": [ - "Creality/CR-Nylon" - ], - "name": "CR-Nylon", - "filament_type": "PA", - "filament_vendor": "Creality" - }, - "OFvPPMxL": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PLA Verde FilAr" - ], - "name": "FilAr PLA Verde FilAr", - "filament_type": "PLA", - "filament_vendor": "FilAr" - }, - "OFvTVZc3": { - "filaments": [ - "BBL/COEX PETG", - "OrcaFilamentLibrary/COEX PETG" - ], - "name": "COEX PETG", - "filament_type": "PETG", - "filament_vendor": "COEX 3D" - }, - "OFvVy7yo": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints TPU D60 UV Resistant" - ], - "name": "Eolas Prints TPU D60 UV Resistant", - "filament_type": "TPU", - "filament_vendor": "Eolas Prints" - }, - "OFvaLVML": { - "filaments": [ - "Flashforge/Flashforge HIPS" - ], - "name": "Flashforge HIPS", - "filament_type": "HIPS", - "filament_vendor": "Flashforge" - }, - "OFvcIGee": { - "filaments": [ - "BBL/addnorth TPU Pro Matte 85A" - ], - "name": "addnorth TPU Pro Matte 85A", - "filament_type": "TPU", - "filament_vendor": "addnorth" - }, - "OFvdZ2bx": { - "filaments": [ - "Qidi/QIDI WOOD Rapido" - ], - "name": "QIDI WOOD Rapido", - "filament_type": "PLA", - "filament_vendor": "QIDI" - }, - "OFvgE0Zh": { - "filaments": [ - "Elegoo/Elegoo PLA", - "OrcaFilamentLibrary/Elegoo PLA" - ], - "name": "Elegoo PLA", - "filament_type": "PLA", - "filament_vendor": "Elegoo" - }, - "OFvmwTZE": { - "filaments": [ - "Snapmaker/Snapmaker TPU 95A" - ], - "name": "Snapmaker TPU 95A", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFvrXuV7": { - "filaments": [ - "BBL/PolyLite ASA", - "OrcaFilamentLibrary/PolyLite ASA" - ], - "name": "PolyLite ASA", - "filament_type": "ASA", - "filament_vendor": "Polymaker" - }, - "OFvxIS9g": { - "filaments": [ - "BBL/Fiberon PA12-CF10", - "Snapmaker/Fiberon PA12-CF10" - ], - "name": "Fiberon PA12-CF10", - "filament_type": "PA-CF", - "filament_vendor": "Polymaker" - }, - "OFvxghTE": { - "filaments": [ - "Chuanying/Generic HS PLA", - "Flashforge/Generic HS PLA", - "TwoTrees/Generic HS PLA" - ], - "name": "Generic HS PLA", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFvyB0Bz": { - "filaments": [ - "BBL/PolyLite PLA Galaxy", - "Snapmaker/PolyLite PLA Galaxy" - ], - "name": "PolyLite PLA Galaxy", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFvzvwCu": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PLA High Speed" - ], - "name": "Eolas Prints PLA High Speed", - "filament_type": "PLA", - "filament_vendor": "Eolas Prints" - }, - "OFw4WD4T": { - "filaments": [ - "BBL/Fiberon PETG-rCF08" - ], - "name": "Fiberon PETG-rCF08", - "filament_type": "PETG-CF", - "filament_vendor": "Polymaker" - }, - "OFwJ0qu2": { - "filaments": [], - "name": "DREMC PET-CF", - "filament_type": "PET-CF", - "filament_vendor": "DREMC" - }, - "OFwLBAGf": { - "filaments": [ - "Qidi/HATCHBOX ABS" - ], - "name": "HATCHBOX ABS", - "filament_type": "ABS", - "filament_vendor": "HATCHBOX" - }, - "OFwPrlCM": { - "filaments": [ - "BBL/Bambu PETG Translucent", - "OrcaFilamentLibrary/Bambu PETG Translucent" - ], - "name": "Bambu PETG Translucent", - "filament_type": "PETG", - "filament_vendor": "Bambu Lab" - }, - "OFwRJ4g0": { - "filaments": [ - "OrcaFilamentLibrary/NIT PLA" - ], - "name": "NIT PLA", - "filament_type": "PLA", - "filament_vendor": "NIT" - }, - "OFwVVKEV": { - "filaments": [ - "FlyingBear/Other TPU", - "InfiMech/Other TPU" - ], - "name": "Other TPU", - "filament_type": "TPU", - "filament_vendor": "Other" - }, - "OFwaYjL6": { - "filaments": [ - "BBL/Fiberon PA6-GF", - "OrcaFilamentLibrary/Fiberon PA6-GF" - ], - "name": "Fiberon PA6-GF", - "filament_type": "PA-GF", - "filament_vendor": "Polymaker" - }, - "OFwc74ck": { - "filaments": [ - "BBL/BETA PLA Matte" - ], - "name": "BETA PLA Matte", - "filament_type": "PLA", - "filament_vendor": "BETA" - }, - "OFwhLMs4": { - "filaments": [ - "Snapmaker/Snapmaker PLA SnapSpeed" - ], - "name": "Snapmaker PLA SnapSpeed", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFwjMiKL": { - "filaments": [ - "Flashforge/Flashforge PETG Transparent" - ], - "name": "Flashforge PETG Transparent", - "filament_type": "PETG", - "filament_vendor": "Flashforge" - }, - "OFwlZ7gH": { - "filaments": [ - "Flashforge/Flashforge TPU-90A" - ], - "name": "Flashforge TPU-90A", - "filament_type": "TPU-90A", - "filament_vendor": "Flashforge" - }, - "OFwu7IAG": { - "filaments": [ - "BBL/COEX PCTG PRIME", - "OrcaFilamentLibrary/COEX PCTG PRIME" - ], - "name": "COEX PCTG PRIME", - "filament_type": "PCTG", - "filament_vendor": "COEX 3D" - }, - "OFwwAQnA": { - "filaments": [ - "Prusa/Generic PC HF" - ], - "name": "Generic PC HF", - "filament_type": "PC", - "filament_vendor": "Generic" - }, - "OFwyt1xt": { - "filaments": [ - "Eryone/Eryone ASA-CF" - ], - "name": "Eryone ASA-CF", - "filament_type": "ASA-CF", - "filament_vendor": "Eryone" - }, - "OFx0WlzS": { - "filaments": [ - "Flashforge/Flashforge TPU-95A" - ], - "name": "Flashforge TPU-95A", - "filament_type": "TPU-95A", - "filament_vendor": "Flashforge" - }, - "OFx8Lmsd": { - "filaments": [ - "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant" - ], - "name": "Eolas Prints PETG UV Resistant", - "filament_type": "PETG", - "filament_vendor": "Eolas Prints" - }, - "OFxA1p01": { - "filaments": [ - "BBL/Overture PLA Pro", - "OrcaFilamentLibrary/Overture PLA Pro" - ], - "name": "Overture PLA Pro", - "filament_type": "PLA", - "filament_vendor": "Overture" - }, - "OFxDHUX8": { - "filaments": [ - "SeeMeCNC/SeeMeCNC PETG" - ], - "name": "SeeMeCNC PETG", - "filament_type": "PETG", - "filament_vendor": "SeeMeCNC" - }, - "OFxJRuVF": { - "filaments": [ - "Anycubic/Anycubic PC-GF" - ], - "name": "Anycubic PC-GF", - "filament_type": "PC-GF", - "filament_vendor": "Anycubic" - }, - "OFxOHhZw": { - "filaments": [ - "Elegoo/Elegoo ABS", - "OrcaFilamentLibrary/Elegoo ABS" - ], - "name": "Elegoo ABS", - "filament_type": "ABS", - "filament_vendor": "Elegoo" - }, - "OFxUwUeW": { - "filaments": [ - "BBL/SUNLU PLA Marble", - "Flashforge/SUNLU PLA Marble", - "OrcaFilamentLibrary/SUNLU PLA Marble" - ], - "name": "SUNLU PLA Marble", - "filament_type": "PLA", - "filament_vendor": "SUNLU" - }, - "OFxYB4Sw": { - "filaments": [ - "Snapmaker/Snapmaker J1 PETG-CF" - ], - "name": "Snapmaker J1 PETG-CF", - "filament_type": "PETG-CF", - "filament_vendor": "Snapmaker" - }, - "OFxe4rXr": { - "filaments": [ - "BBL/PolyTerra PLA Marble", - "Snapmaker/PolyTerra PLA Marble" - ], - "name": "PolyTerra PLA Marble", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFxqf79Q": { - "filaments": [ - "BBL/BETA PETG HF" - ], - "name": "BETA PETG HF", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFy02QHU": { - "filaments": [ - "BBL/PolyLite PLA Translucent", - "Snapmaker/PolyLite PLA Translucent" - ], - "name": "PolyLite PLA Translucent", - "filament_type": "PLA", - "filament_vendor": "Polymaker" - }, - "OFy14TRA": { - "filaments": [ - "Snapmaker/Snapmaker J1 ABS" - ], - "name": "Snapmaker J1 ABS", - "filament_type": "ABS", - "filament_vendor": "Snapmaker" - }, - "OFy3sW6j": { - "filaments": [ - "WonderMaker/WonderMaker ASA" - ], - "name": "WonderMaker ASA", - "filament_type": "ASA", - "filament_vendor": "WonderMaker" - }, - "OFy48TOp": { - "filaments": [ - "Flashforge/Generic TPU-95A" - ], - "name": "Generic TPU-95A", - "filament_type": "TPU-95A", - "filament_vendor": "Generic" - }, - "OFy8tYJE": { - "filaments": [ - "Cubicon/Cubicon ABS-A100" - ], - "name": "Cubicon ABS-A100", - "filament_type": "ABS", - "filament_vendor": "Cubicon" - }, - "OFyFyLIp": { - "filaments": [ - "SeeMeCNC/SeeMeCNC TPU" - ], - "name": "SeeMeCNC TPU", - "filament_type": "TPU", - "filament_vendor": "SeeMeCNC" - }, - "OFyHgT60": { - "filaments": [ - "OrcaArena/Arena PLA Sparkle" - ], - "name": "Arena PLA Sparkle", - "filament_type": "PLA", - "filament_vendor": "Orca Arena" - }, - "OFyJjkek": { - "filaments": [ - "BBL/addnorth TPU Pro Matte 95A" - ], - "name": "addnorth TPU Pro Matte 95A", - "filament_type": "TPU", - "filament_vendor": "addnorth" - }, - "OFyLWVF3": { - "filaments": [ - "Creality/Generic PETG-GF" - ], - "name": "Generic PETG-GF", - "filament_type": "PETG-GF", - "filament_vendor": "Generic" - }, - "OFyPG8v2": { - "filaments": [ - "Snapmaker/Snapmaker Dual PLA Eco" - ], - "name": "Snapmaker Dual PLA Eco", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFyPTnSk": { - "filaments": [ - "BBL/BETA PETG Heat Color Change" - ], - "name": "BETA PETG Heat Color Change", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFyQwdaM": { - "filaments": [ - "Volumic/Volumic ABS Ultra (Performance)" - ], - "name": "Volumic ABS Ultra (Performance)", - "filament_type": "ABS", - "filament_vendor": "Volumic" - }, - "OFyRCIMh": { - "filaments": [ - "FlyingBear/Other PC", - "InfiMech/Other PC" - ], - "name": "Other PC", - "filament_type": "PC", - "filament_vendor": "Other" - }, - "OFyUJI3q": { - "filaments": [ - "Volumic/Volumic ABS Ultra" - ], - "name": "Volumic ABS Ultra", - "filament_type": "ABS", - "filament_vendor": "Volumic" - }, - "OFybzvQN": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Gris Ceniza" - ], - "name": "FilAr PETG Gris Ceniza", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFyhjiNs": { - "filaments": [ - "Snapmaker/Snapmaker PVA" - ], - "name": "Snapmaker PVA", - "filament_type": "PVA", - "filament_vendor": "Snapmaker" - }, - "OFyj3m13": { - "filaments": [ - "Snapmaker/Snapmaker Dual PLA Silk" - ], - "name": "Snapmaker Dual PLA Silk", - "filament_type": "PLA", - "filament_vendor": "Snapmaker" - }, - "OFymnal9": { - "filaments": [ - "Sovol/Sovol Zero PETG HS Nozzle" - ], - "name": "Sovol Zero PETG HS Nozzle", - "filament_type": "PETG", - "filament_vendor": "Generic" - }, - "OFyoBZdm": { - "filaments": [ - "LH/LHS PLA" - ], - "name": "LHS PLA", - "filament_type": "PLA", - "filament_vendor": "LH Stinger" - }, - "OFyreocX": { - "filaments": [ - "Tiertime/Tiertime PVA" - ], - "name": "Tiertime PVA", - "filament_type": "PVA", - "filament_vendor": "Tiertime" - }, - "OFyrnlUn": { - "filaments": [ - "Snapmaker/Snapmaker J1 TPU" - ], - "name": "Snapmaker J1 TPU", - "filament_type": "TPU", - "filament_vendor": "Snapmaker" - }, - "OFysxCep": { - "filaments": [ - "OrcaFilamentLibrary/FilAr PETG Coral" - ], - "name": "FilAr PETG Coral", - "filament_type": "PETG", - "filament_vendor": "FilAr" - }, - "OFyxayW4": { - "filaments": [ - "BBL/AliZ PLA", - "OrcaFilamentLibrary/AliZ PLA" - ], - "name": "AliZ PLA", - "filament_type": "PLA", - "filament_vendor": "Aliz" - }, - "OFz1a1fy": { - "filaments": [ - "BBL/BETA PETG Metallic" - ], - "name": "BETA PETG Metallic", - "filament_type": "PETG", - "filament_vendor": "BETA" - }, - "OFz5oHgf": { - "filaments": [ - "MagicMaker/Generic PEEK" - ], - "name": "Generic PEEK", - "filament_type": "PEEK", - "filament_vendor": "Generic" - }, - "OFzAWsca": { - "filaments": [ - "Qidi/Qidi TPU 95A-HF" - ], - "name": "Qidi TPU 95A-HF", - "filament_type": "TPU", - "filament_vendor": "QIDI" - }, - "OFzB4uOs": { - "filaments": [ - "Sovol/Sovol Zero PLA Basic HS Nozzle" - ], - "name": "Sovol Zero PLA Basic HS Nozzle", - "filament_type": "PLA", - "filament_vendor": "Generic" - }, - "OFzRtFM9": { - "filaments": [ - "Prusa/Generic ASA HF" - ], - "name": "Generic ASA HF", - "filament_type": "ASA", - "filament_vendor": "Generic" - }, - "OFzS7zt4": { - "filaments": [ - "Anycubic/Anycubic PA" - ], - "name": "Anycubic PA", - "filament_type": "PA", - "filament_vendor": "Anycubic" - }, - "OFzY7N3Z": { - "filaments": [ - "Artillery/Artillery PLA" - ], - "name": "Artillery PLA", - "filament_type": "PLA", - "filament_vendor": "Artillery" - }, - "OFzaq7Yg": { - "filaments": [ - "BBL/BETA TPU 98A" - ], - "name": "BETA TPU 98A", - "filament_type": "TPU", - "filament_vendor": "BETA" - }, - "OFzk5oAo": { - "filaments": [ - "BBL/addnorth ABS rABS" - ], - "name": "addnorth ABS rABS", - "filament_type": "ABS", - "filament_vendor": "addnorth" - }, - "OFzrUUxc": { - "filaments": [], - "name": "DREMC ABS", - "filament_type": "ABS", - "filament_vendor": "DREMC" - }, - "OFztQ7rO": { - "filaments": [ - "LH/LHS ABS" - ], - "name": "LHS ABS", - "filament_type": "ASA", - "filament_vendor": "LH Stinger" - }, - "OFzwA5Z9": { - "filaments": [ - "Flashforge/FusRock PET-GF" - ], - "name": "FusRock PET-GF", - "filament_type": "PET-GF", - "filament_vendor": "FusRock" - }, - "OFzyIxba": { - "filaments": [ - "BBL/Bambu PVA", - "OrcaFilamentLibrary/Bambu PVA" - ], - "name": "Bambu PVA", - "filament_type": "PVA", - "filament_vendor": "Bambu Lab" - } - } -} diff --git a/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml b/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml index 668f51334b..fa7c329b4b 100644 --- a/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml +++ b/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml @@ -223,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 diff --git a/scripts/orca_extra_profile_check.py b/scripts/orca_extra_profile_check.py deleted file mode 100644 index e95e2c29e8..0000000000 --- a/scripts/orca_extra_profile_check.py +++ /dev/null @@ -1,660 +0,0 @@ -import os -import json -import argparse -from pathlib import Path - -from orca_id_tool import generate_preset_setting_id, check_filament_ids - -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(profiles_dir, vendor_name): - """ - Make sure filament_id is not longer than 8 characters, otherwise AMS won't work properly. - - Runs tree-wide, every vendor alike (BBL included: the id format is what - matters, not the vendor). Every .json file under the vendor's filament - directory is still parsed through the duplicate-key hook below, so that - coverage is unchanged; only the length rule itself is scoped to presets - the vendor's index (.json filament_list) actually references. A - file the index does not reference never loads, so its filament_id length - cannot break AMS -- and some vendors (e.g. SeeMeCNC) ship such orphaned - files pre-dating this check, with no bearing on what ships. - """ - error = 0 - vendor_path = profiles_dir / vendor_name / "filament" - if not vendor_path.exists(): - return 0 - - referenced = set() - vendor_file = profiles_dir / (vendor_name + ".json") - if vendor_file.exists(): - try: - with open(vendor_file, 'r', encoding='UTF-8') as fp: - index = json.load(fp) - for entry in index.get('filament_list', []): - sub_path = entry.get('sub_path') - if sub_path: - referenced.add((profiles_dir / vendor_name / sub_path).resolve()) - except Exception as e: - print_error(f"Error loading vendor profile {vendor_file}: {e}") - error += 1 - - # 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 and file_path.resolve() in referenced: - 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/orca_id_tool.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 - "python scripts/orca_id_tool.py --generate --setting-id". - (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 ' - f'"python scripts/orca_id_tool.py --generate --setting-id"' - ) - 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 ' - f'"python scripts/orca_id_tool.py --generate --setting-id"' - ) - 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 "python scripts/orca_id_tool.py --generate --setting-id"' - ) - 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 "python scripts/orca_id_tool.py --generate --setting-id"' - ) - 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(profiles_dir, vendor_name) - 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) - - # Global filament_id check (see scripts/orca_id_tool.py): effective ids - # are resolved loader-faithfully and validated against the sanctioned snapshot - # (scripts/filament_id_snapshot.json). Runs once over the whole tree. - errors_found += check_filament_ids(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_id_tool.py b/scripts/orca_id_tool.py deleted file mode 100755 index 956aec3569..0000000000 --- a/scripts/orca_id_tool.py +++ /dev/null @@ -1,1429 +0,0 @@ -#!/usr/bin/env python3 -""" -Assign and validate the deterministic ids of OrcaSlicer system profiles: the -per-product filament_id and the per-preset setting_id. - -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, - not the snapshot. 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. - * Reserved id spaces that are never minted into or altered: - - GF* Bambu AMS/RFID catalog: frozen, no preset of any - vendor (including BBL) may declare one; the - generated resources/printers/bambu_filament_ids.json - carries the correspondence instead - - QD_* Qidi device protocol: the box composes these ids - at runtime, they are not preset ids, and no - preset may declare one - - P + 7 hex chars (case-insensitive) and the literal "null" - user-custom presets (CreatePresetsDialog.cpp) - * scripts/filament_id_snapshot.json is the sanctioned-state snapshot: one - entry per id, carrying the product triple it is minted from and the - "Vendor/Filament" presets claiming it. It must exactly equal the tree-derived - state at all times, so any id/claim/triple change shows up as a reviewable - diff to that file (the maintainer gate). It sanctions state, never - exceptions: no check consults it to excuse a preset from the rules above. - -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, and - the validator (orca_extra_profile_check.py) imports the rule from here. - Uniqueness is therefore automatic: two presets collide only if they share - vendor + type + name, which the validator 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. filament_id has no such exemption - — the GF* catalog space is frozen and ownerless, so 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. - -Run from anywhere: - python scripts/orca_id_tool.py --generate write the ids every profile should carry - python scripts/orca_id_tool.py --dry-run preview that; writes nothing - python scripts/orca_id_tool.py --check validate filament_id state (what CI runs) - python scripts/orca_id_tool.py --update-snapshot re-record the sanctioned filament_id state -Narrow --generate with --filament-id / --setting-id and --vendor VENDOR (repeatable). -""" - -import argparse -import json -import os -import re -import sys -import uuid - -# 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")) -SNAPSHOT_PATH = os.path.join(SCRIPTS_DIR, "filament_id_snapshot.json") -# 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" - -# 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") - -OF_ID_RE = re.compile(r"^OF[0-9A-Za-z]{6}$") -# User-custom id space minted by CreatePresetsDialog.cpp ("P" + md5(name)[0:7]); -# reserved case-insensitively, together with its "null" sentinel. -USER_CUSTOM_ID_RE = re.compile(r"^P[0-9A-Fa-f]{7}$", re.IGNORECASE) -# 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_id_tool.py --generate" -UPDATE_HINT = 'run "python scripts/orca_id_tool.py --update-snapshot" and commit the diff for maintainer review' -BAMBU_MAP_HINT = 'regenerate the map with "python scripts/update_bambu_filament_ids.py" and commit the diff for maintainer review' - - -# Same output helpers/format as orca_extra_profile_check.py (not imported from -# there to avoid a circular import: that script imports check_filament_ids). -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 the - filament_id snapshot — 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 -# --------------------------------------------------------------------------- - -def load_json(path): - with open(path, "r", encoding="utf-8-sig") as f: - return json.load(f) - - -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 walks, and what orca_extra_profile_check.py walks: - setting_id is a per-file property, so a bundle whose index has not landed yet - must still be assignable — otherwise the validator flags files the tool - 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 with the tree-derived snapshot sections plus the working data - the checks and the assign pass need. All claims are "Vendor/Filament" strings - over INSTANTIATED system filaments, 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 - - # id -> set of "Vendor/Filament" claims over instantiated presets. Every id - # occurring in the tree is a key; ids only ever DECLARED (e.g. on a root - # none of whose descendants instantiate) keep an empty claim list, so that - # the snapshot exactly equals the tree-derived state. - ids = {} - 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) - ids.setdefault(fid, set()) - 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) - ids.setdefault(eff, set()).add(f"{vendor}/{base_name(rec['name'])}") - if not rec.get("filament_id") and OF_ID_RE.match(eff): - inherited.append((vendor, rec, eff, triple)) - - # Cross-bundle triple divergence (check 5, 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, - "ids": {fid: sorted(claims) for fid, claims in ids.items()}, - "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}, - } - - -# --------------------------------------------------------------------------- -# Snapshot IO -# --------------------------------------------------------------------------- - -def snapshot_from_analysis(analysis): - """One entry per id, in id order: the product triple it is minted from and - the "Vendor/Filament" claims on it. Requires exactly one declared triple per - id (update_snapshot refuses any other state; check 3 rejects it anyway).""" - ids = {} - for fid, claims in sorted(analysis["ids"].items()): - [(vendor, ftype, filament_name)] = analysis["triples"][fid] - ids[fid] = {"filaments": sorted(claims), "name": filament_name, - "filament_type": ftype, "filament_vendor": vendor} - return {"ids": ids} - - -def snapshot_triple(entry): - return [entry["filament_vendor"], entry["filament_type"], entry["name"]] - - -def load_snapshot(path): - """Return the snapshot dict, or None when the file does not exist.""" - if not os.path.exists(path): - return None - data = load_json(path) - data.setdefault("ids", {}) - return data - - -def write_snapshot(path, obj): - """Deterministic serialization: snapshot_from_analysis order, indent 1, LF, - trailing newline.""" - with open(path, "w", encoding="utf-8", newline="\n") as f: - json.dump(obj, f, indent=1, ensure_ascii=False) - f.write("\n") - - -# --------------------------------------------------------------------------- -# Reserved namespaces -# --------------------------------------------------------------------------- - -def reserved_space_owner(fid): - """(is_reserved, owner_vendor or None) for the frozen id spaces.""" - if fid.startswith("GF"): - return True, None # Bambu AMS/RFID catalog: frozen, no vendor (not even BBL) may declare it - if fid.startswith("QD_"): - return True, None # dissolved Qidi device-protocol space: NO vendor may declare it - if USER_CUSTOM_ID_RE.match(fid) or fid == "null": - return True, None # user-custom space: no system vendor may own it - return False, None - - -def reserved_space_desc(fid, owner): - """Human description of a reserved space for error messages.""" - if owner: - return f"owned by {owner}" - if fid.startswith("GF"): - return "Bambu AMS/RFID catalog; frozen, no preset may declare it" - if fid.startswith("QD_"): - return "Qidi device protocol; composed by the device, never a preset id" - return "reserved for user-custom presets" - - -# --------------------------------------------------------------------------- -# Checks (imported and called tree-wide by orca_extra_profile_check.py) -# --------------------------------------------------------------------------- - -def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, - 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 the snapshot, not BBL. - 2. Snapshot equality, both directions: every id in the tree, the filaments - claiming it and the triple its declarers resolve must equal the snapshot - entry exactly (the snapshot diff is the maintainer gate). - 3. 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). - 4. Reserved namespaces (GF*/QD_*/P-hex/"null", all ownerless) must not be - claimed by any vendor. - 5. 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. - 6. 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). - - Nothing is grandfathered: the snapshot sanctions state, never exceptions. - """ - _utf8_console() - errors = 0 - analysis = analyze_tree(profiles_dir) - snapshot = load_snapshot(snapshot_path) - if snapshot is None: - print_error(f"filament_id snapshot not found at {snapshot_path}; {UPDATE_HINT}") - return 1 - for msg in analysis["read_errors"]: - print_error(msg) - errors += 1 - - snap_ids = snapshot["ids"] - tree_ids = analysis["ids"] - - # -- 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. snapshot equality (both directions) ----------------------------- - tree_triples = analysis["triples"] - for fid in sorted(tree_ids): - entry = snap_ids.get(fid) - if entry is None: - print_error( - f'filament_id "{fid}" is not sanctioned by ' - f"scripts/filament_id_snapshot.json; {UPDATE_HINT}") - errors += 1 - continue - for claim in tree_ids[fid]: - if claim not in entry["filaments"]: - print_error( - f'filament_id "{fid}" claim "{claim}" is not sanctioned by ' - f"scripts/filament_id_snapshot.json; {UPDATE_HINT}") - errors += 1 - # Every tree id has at least one declarer; the snapshot records one - # triple per id, so a divergent declarer is a mismatch in both directions. - sanctioned = snapshot_triple(entry) - for t in tree_triples[fid]: - if t != sanctioned: - print_error( - f'filament_id "{fid}" triple "{"/".join(t)}" is not sanctioned by ' - f'scripts/filament_id_snapshot.json, which records ' - f'"{"/".join(sanctioned)}"; {UPDATE_HINT}') - errors += 1 - for fid in sorted(snap_ids): - if fid not in tree_ids: - print_error( - f'filament_id stability: snapshot id "{fid}" vanished from the tree; ' - f"{UPDATE_HINT}") - errors += 1 - continue - for claim in snap_ids[fid]["filaments"]: - if claim not in tree_ids[fid]: - print_error( - f'filament_id stability: snapshot claim "{claim}" of id "{fid}" ' - f"vanished from the tree; {UPDATE_HINT}") - errors += 1 - - # -- 3. 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), then ' - f"--update-snapshot") - errors += 1 - # (3b) 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 - # (3d) 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 - - # -- 4. reserved namespaces ---------------------------------------------- - for fid in sorted(tree_ids): - is_reserved, owner = reserved_space_owner(fid) - if not is_reserved: - continue - for claim in tree_ids[fid]: - vendor = claim.split("/", 1)[0] - if vendor == owner: - continue - space = reserved_space_desc(fid, owner) - print_error( - f'filament_id "{fid}" of "{claim}" is in a reserved id space ' - f"({space}) and must not be claimed by system presets of other vendors") - errors += 1 - - # -- 5. 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") - - # -- 6. 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 = tree_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 - - -# --------------------------------------------------------------------------- -# --update-snapshot -# --------------------------------------------------------------------------- - -def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, dry_run=False): - """Regenerate the snapshot from the tree. - - Refuses to sanction a tree it could not read whole, a reserved-namespace id - (or a claim on one) and an id declared under more than one triple: none of - them can ever pass --check, so writing them into the snapshot would only - hide the mistake until CI. - Idempotent: a second run over an unchanged tree changes nothing. Returns 0 - on success. - """ - analysis = analyze_tree(profiles_dir) - # A tree that could not be read whole cannot be sanctioned: the snapshot - # would silently drop the unreadable bundle's ids and claims, and the diff - # would read as a deliberate removal. - refusals = len(analysis["read_errors"]) - for msg in analysis["read_errors"]: - print_error(msg) - - for vendor in sorted(analysis["vendor_ids"]): - for fid in sorted(analysis["vendor_ids"][vendor]): - is_reserved, owner = reserved_space_owner(fid) - if is_reserved and vendor != owner: - print_error( - f'refusing to sanction filament_id "{fid}" ({vendor}): reserved id ' - f"space, {reserved_space_desc(fid, owner)}") - refusals += 1 - for fid, ts in sorted(analysis["triples"].items()): - if len(ts) > 1: - print_error( - f'refusing to sanction filament_id "{fid}": declared under {len(ts)} ' - f'triples ({"; ".join("/".join(t) for t in ts)}); one id names one ' - f"product (check 3)") - refusals += 1 - if refusals: - return 1 - - new_snap = snapshot_from_analysis(analysis) - old_snap = load_snapshot(snapshot_path) - old_ids = old_snap["ids"] if old_snap else {} - - # Diff summary. - added_ids = sorted(set(new_snap["ids"]) - set(old_ids)) - removed_ids = sorted(set(old_ids) - set(new_snap["ids"])) - added_claims = sum( - len(set(entry["filaments"]) - set(old_ids.get(fid, {}).get("filaments", []))) - for fid, entry in new_snap["ids"].items()) - removed_claims = sum( - len(set(entry["filaments"]) - set(new_snap["ids"].get(fid, {}).get("filaments", []))) - for fid, entry in old_ids.items()) - changed = new_snap != (old_snap or {"ids": {}}) - - if changed and not dry_run: - write_snapshot(snapshot_path, new_snap) - - print_info(f"snapshot ids : {len(new_snap['ids'])} (+{len(added_ids)} / -{len(removed_ids)})") - print_info(f"claims added : {added_claims}") - print_info(f"claims removed : {removed_claims}") - if changed and dry_run: - print_success(f"dry run: {snapshot_path} would be rewritten; nothing written") - elif changed: - print_success(f"snapshot written to {snapshot_path}") - else: - print_success("snapshot already up to date; nothing changed") - return 0 - - -# --------------------------------------------------------------------------- -# 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 -# --------------------------------------------------------------------------- - -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 "GF*" 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 3). - A declaration is left alone exactly when it already equals the one id its - triple mints (check 3). Two products minting one id (check 3d) 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. Never reads or touches the - snapshot — run --update-snapshot afterwards and review the diff. 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 orca_extra_profile_check.py 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 - - -# --------------------------------------------------------------------------- -# CLI -# --------------------------------------------------------------------------- - -EXAMPLES = """\ -examples: - orca_id_tool.py --generate - give every profile the id its identity mints, in every vendor bundle - orca_id_tool.py --dry-run - preview exactly that; writes nothing - orca_id_tool.py --generate --setting-id - setting_id only (filament, process and machine presets) - orca_id_tool.py --generate --filament-id --vendor Creality --vendor Elegoo - filament_id only, and only in those two bundles - orca_id_tool.py --check - validate filament_id state against the snapshot (the filament_id half - of scripts/orca_extra_profile_check.py, which is what CI runs) - orca_id_tool.py --update-snapshot - re-record the sanctioned filament_id state after a --generate run - -a maintenance round: - --dry-run -> --generate -> --update-snapshot -> --check -> commit the diff -""" - - -def build_parser(): - parser = argparse.ArgumentParser( - prog="orca_id_tool.py", allow_abbrev=False, - formatter_class=argparse.RawDescriptionHelpFormatter, - description="Assign and validate the deterministic ids of OrcaSlicer system\n" - "profiles: the per-product filament_id and the per-preset setting_id.\n" - "\n" - "Both are pure functions of the profile's own identity, so this tool\n" - "never invents an id: it writes the one the rules already imply, and\n" - "leaves a conforming tree alone.", - epilog=EXAMPLES) - modes = parser.add_argument_group("modes (pick one; no mode prints this help)") - modes.add_argument("--generate", action="store_true", - help="write the id every profile should carry: filament_id from " - "each filament's (filament_vendor, filament_type, name) " - "triple, setting_id from each preset's (vendor, type, name). " - "Idempotent and byte-preserving") - modes.add_argument("--check", action="store_true", - help="validate filament_id state against " - "scripts/filament_id_snapshot.json; exit nonzero on errors") - modes.add_argument("--update-snapshot", action="store_true", - help="re-record the sanctioned filament_id state in " - "scripts/filament_id_snapshot.json; commit the diff for " - "maintainer review") - narrow = parser.add_argument_group("narrowing --generate") - narrow.add_argument("--filament-id", action="store_true", - help="write filament_id only, skipping setting_id") - narrow.add_argument("--setting-id", action="store_true", - help="write setting_id only, skipping filament_id") - narrow.add_argument("--vendor", metavar="VENDOR", action="append", default=[], - help="write only in this vendor 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") - parser.add_argument("--dry-run", "--dryrun", dest="dry_run", action="store_true", - help="report what would change and write nothing; with no mode of " - "its own it previews --generate") - parser.add_argument("--profiles", default=PROFILES_DIR, - help="profiles directory (default: resources/profiles)") - parser.add_argument("--snapshot", default=None, metavar="PATH", - help="the sanctioned filament_id state of that tree (default: " - "scripts/filament_id_snapshot.json, which describes " - "resources/profiles and no other tree)") - return parser - - -def main(argv=None): - _utf8_console() - argv = sys.argv[1:] if argv is None else list(argv) - parser = build_parser() - if not argv: - parser.print_help() - return 0 - args = parser.parse_args(argv) - - modes = [flag for flag, on in (("--generate", args.generate), - ("--check", args.check), - ("--update-snapshot", args.update_snapshot)) if on] - if len(modes) > 1: - parser.error(f"{' and '.join(modes)} cannot be combined; pick one mode") - if args.filament_id and args.setting_id: - parser.error("--filament-id and --setting-id each exclude the other; " - "pass neither to write both") - narrowing = [flag for flag, on in (("--filament-id", args.filament_id), - ("--setting-id", args.setting_id), - ("--vendor", bool(args.vendor))) if on] - if not modes: - if args.dry_run: - mode = "--generate" # --dry-run previews the writing mode - elif narrowing: - parser.error(f"{', '.join(narrowing)} narrows --generate; " - f"add --generate (or --dry-run to preview it)") - else: - parser.print_help() - return 0 - else: - mode = modes[0] - if narrowing and mode != "--generate": - parser.error(f"{', '.join(narrowing)} applies to --generate, not {mode}") - - snapshot_path = args.snapshot or SNAPSHOT_PATH - if (args.snapshot is None and mode in ("--check", "--update-snapshot") - and os.path.abspath(args.profiles) != os.path.abspath(PROFILES_DIR)): - # The repo snapshot is the sanctioned state of resources/profiles alone: - # checking another tree against it is meaningless, and re-recording one - # into it would overwrite the tracked file with a foreign tree's state. - parser.error(f"{mode} reads and writes the sanctioned state of the tree it is " - f"given, so --profiles needs --snapshot PATH for that tree too") - - if mode == "--check": - errors = check_filament_ids(args.profiles, snapshot_path) - if errors: - print_error(f"filament_id check: {errors} error(s)") - return 1 - print_success("filament_id check: no errors") - return 0 - - if mode == "--update-snapshot": - return update_snapshot(args.profiles, snapshot_path, dry_run=args.dry_run) - - vendors = sorted(set(args.vendor)) or None - if vendors: - unknown = sorted(set(vendors) - set(list_profile_dirs(args.profiles))) - if unknown: - for v in unknown: - print_error(f'unknown vendor "{v}" in {args.profiles}') - return 1 - - # Both by default. filament_id runs first so its keys are in place before the - # setting_id pass reads the files back. - do_filament = args.filament_id or not args.setting_id - do_setting = args.setting_id or not args.filament_id - changed = set() # one file the two passes both touch is still one file - filament_files = errors = 0 - if do_filament: - filament_files, e = generate_filament_ids( - args.profiles, vendors, args.dry_run, changed) - errors += e - if do_setting: - _n, e = generate_setting_ids(args.profiles, vendors, args.dry_run, changed) - errors += e - - summary = (f"dry run: {len(changed)} file(s) would change; nothing written" - if args.dry_run else f"{len(changed)} file(s) changed") - if errors: - print_error(f"{summary}; {errors} error(s)") - else: - print_success(summary) - if filament_files and not args.dry_run: - # A filament_id write may or may not move the sanctioned state (an id - # repaired back to the value the snapshot already records does not), so - # regenerate and let the diff — empty or not — say. - print_warning('now run "python scripts/orca_id_tool.py --update-snapshot" ' - "and commit any resulting diff for maintainer review") - return 1 if errors else 0 - - -if __name__ == "__main__": - sys.exit(main()) 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/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index 3e7a6d2aec..001763fca9 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Tests for scripts/orca_id_tool.py (stdlib unittest, no external deps). +"""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 """ @@ -17,7 +17,7 @@ import uuid sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) -import orca_id_tool as afi # noqa: E402 +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__), "..", "..")) @@ -55,13 +55,12 @@ def preset(name, filament_id=None, inherits=None, instantiation=True, class SyntheticTree: - """A throwaway resources/profiles-shaped directory plus a snapshot path.""" + """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) - self.snapshot = os.path.join(self.dir, "filament_id_snapshot.json") def cleanup(self): shutil.rmtree(self.dir, ignore_errors=True) @@ -110,16 +109,6 @@ class SyntheticTree: with open(idx_path, "w", encoding="utf-8") as f: json.dump(index, f, indent=4, ensure_ascii=False) - def remove_preset(self, vendor, name): - os.remove(self.preset_path(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"] = [ - e for e in index["filament_list"] if e["name"] != name] - 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 = {} @@ -135,17 +124,11 @@ class SyntheticTree: # -- pipeline wrappers --------------------------------------------------- - def update_snapshot(self, dry_run=False): - buf = io.StringIO() - with contextlib.redirect_stdout(buf): - rc = afi.update_snapshot(self.profiles, self.snapshot, dry_run) - return rc, buf.getvalue() - 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, self.snapshot, **kwargs) + 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 @@ -164,22 +147,22 @@ class SyntheticTree: changed, errors = afi.generate_filament_ids(self.profiles, vendors, dry_run) return changed, errors, buf.getvalue() - def cli(self, *flags): + 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, "--profiles", self.profiles, - "--snapshot", self.snapshot]) + 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 (sanctioned by - the snapshot below) 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). + 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, [ @@ -197,8 +180,6 @@ def make_clean_tree(apla_id="AX01", generic_id="OGFL99"): preset("Generic PLA @P1", inherits="Generic PLA @System", compatible_printers=["P1 0.4 nozzle"]), ]) - rc, _out = t.update_snapshot() - assert rc == 0 return t @@ -210,10 +191,9 @@ class SyntheticTreeCase(unittest.TestCase): class OfCleanTreeCase(unittest.TestCase): """Like SyntheticTreeCase, but the baseline filament/generic already carry - real OF-format ids (check 1 now rejects "AX01"/"OGFL99" unconditionally, - with no snapshot exemption), so an otherwise-untouched tree still passes - check_filament_ids. Tests that specifically need a non-OF baseline to - remint (TestRemint, TestUpdateSnapshot) keep using SyntheticTreeCase + 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): @@ -229,7 +209,7 @@ class OfCleanTreeCase(unittest.TestCase): class TestMint(unittest.TestCase): def test_namespace_literal(self): - # Frozen: derived from the setting_id namespace; baked into the snapshot. + # 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")) @@ -426,26 +406,6 @@ class TestTripleResolution(unittest.TestCase): ("MyVendor", "PLA", "MyPLA")) -# --------------------------------------------------------------------------- -# reserved namespaces -# --------------------------------------------------------------------------- - -class TestReservedSpaces(unittest.TestCase): - def test_owners(self): - # Bambu AMS/RFID catalog: reserved, but no vendor (not even BBL) may declare it - self.assertEqual(afi.reserved_space_owner("GFL99"), (True, None)) - # Qidi device protocol: reserved, but no vendor may declare it - self.assertEqual(afi.reserved_space_owner("QD_X4_PLA"), (True, None)) - self.assertEqual(afi.reserved_space_owner("P1234abc"), (True, None)) - self.assertEqual(afi.reserved_space_owner("pAbCdEf1"), (True, None)) # case-insensitive - self.assertEqual(afi.reserved_space_owner("null"), (True, None)) - self.assertEqual(afi.reserved_space_owner("OF5CgdDq"), (False, None)) - self.assertEqual(afi.reserved_space_owner("P1234abcd"), (False, None)) # 8 hex chars: not the user space - - def test_gf_is_reserved_and_ownerless(self): - self.assertEqual(afi.reserved_space_owner("GFA00"), (True, None)) - - # --------------------------------------------------------------------------- # checks on synthetic trees # --------------------------------------------------------------------------- @@ -468,22 +428,10 @@ class TestChecks(OfCleanTreeCase): self.assertIn('is not a minted "OF" id', out) self.assertIn("BOGUS_9", out) - def test_check2_new_claim_needs_snapshot_update(self): - self.t.write_preset("VendorA", preset("ANEW @P2", inherits="APLA @base", - compatible_printers=["P2"])) - errors, out = self.t.check() - self.assertGreater(errors, 0) - self.assertIn('claim "VendorA/ANEW" is not sanctioned', out) - self.assertIn("--update-snapshot", out) - - def test_check2_vanished_claim_is_stability_error(self): - self.t.remove_preset("VendorA", "APLA @P1") - errors, out = self.t.check() - self.assertGreater(errors, 0) - self.assertIn("stability", out) - self.assertIn('"VendorA/APLA"', out) - - def test_check2_triple_change_needs_snapshot_update(self): + 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, @@ -491,26 +439,15 @@ class TestChecks(OfCleanTreeCase): filament_type="PETG"), register=False) errors, out = self.t.check() - self.assertGreater(errors, 0) - self.assertIn('triple "AVendor/PETG/APLA" is not sanctioned', out) - self.assertIn('which records "AVendor/PLA/APLA"', out) - # Sanctioning the new triple is not enough: the old id is no longer its - # mint (check 3, nothing grandfathered) — the identity fix is a re-mint, - # reported on the root and again under the variant inheriting it. - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - 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) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) errors, out = self.t.check() self.assertEqual(errors, 0, out) - def test_check3_of_id_must_match_triple_mint(self): + 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")) @@ -521,39 +458,20 @@ class TestChecks(OfCleanTreeCase): self.assertIn("does not match the mint of its triple", out) self.assertIn(afi.generate_filament_id("BV", "PLA", "BNEW"), out) - def test_check3_no_grandfathering_of_a_wrong_declaration(self): - # Sanctioning the tree does not excuse a declaration from its mint. - self.t.write_preset("VendorA", preset("CNEW @base", filament_id="OFZZZZZZ", - instantiation=False, - filament_vendor="CV", filament_type="PLA")) - self.t.write_preset("VendorA", preset("CNEW @P1", inherits="CNEW @base", - compatible_printers=["P1"])) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - errors, out = self.t.check() - self.assertEqual(errors, 2, out) # the declaration, and the variant inheriting it - self.assertIn("does not match the mint of its triple", out) - self.assertIn('"CNEW @P1" (VendorA/filament/CNEW @P1.json) inherits filament_id', out) - - def test_check3_inherited_id_must_be_the_mint_of_own_triple(self): + 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.assertGreater(errors, 0) + 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) - # ... and sanctioning the tree does not excuse it either. - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - errors, out = self.t.check() - self.assertEqual(errors, 1, out) - def test_check3_lists_every_preset_inheriting_a_wrong_id(self): + 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 @@ -570,11 +488,10 @@ class TestChecks(OfCleanTreeCase): 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 unsanctioned id (check 2), the declaration (3a), and both presets - # inheriting it (3b). - self.assertEqual(errors, 4, out) + # The declaration (2a), and both presets inheriting it (2b). + self.assertEqual(errors, 3, out) - def test_check3_reports_an_inherited_mismatch_even_when_its_own_product_misdeclares_the_id(self): + 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 @@ -591,11 +508,11 @@ class TestChecks(OfCleanTreeCase): 'not match the mint of its triple', out) self.assertIn('"Tuned PLA @P1" (VendorA/filament/Tuned PLA @P1.json) inherits ' 'filament_id', out) - # The unsanctioned claim and triple (check 2), the declaration (3a) and - # the inherited id (3b): four distinct errors, nothing folded away. - self.assertEqual(errors, 4, out) + # The declaration (2a) and the inherited id (2b): two distinct errors, + # nothing folded away. + self.assertEqual(errors, 2, out) - def test_check3_reports_a_collision_between_two_products(self): + 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. @@ -619,13 +536,12 @@ class TestChecks(OfCleanTreeCase): 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 identity error — no product is pushed off its id — and the - # unsanctioned id (check 2) is the only other one. + # 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, 2, out) + self.assertEqual(errors, 1, out) - def test_check3_renamed_tuned_generic_is_an_identity_error(self): + 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", @@ -635,7 +551,7 @@ class TestChecks(OfCleanTreeCase): self.assertIn("Tuned PLA @P1", out) self.assertIn("inherits filament_id", out) - def test_check3_own_key_on_an_instantiated_preset_is_fine(self): + 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, @@ -645,7 +561,7 @@ class TestChecks(OfCleanTreeCase): errors, out = self.t.check() self.assertEqual(errors, 0, out) - def test_check3_inheriting_a_real_filament_of_another_product_is_fine(self): + 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") @@ -653,8 +569,6 @@ class TestChecks(OfCleanTreeCase): inherits="Generic PLA @System", filament_vendor="BV", compatible_printers=["P1"])) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) errors, out = self.t.check() self.assertEqual(errors, 0, out) # With a wrong key it is a plain mint mismatch: the parent plays no @@ -669,11 +583,12 @@ class TestChecks(OfCleanTreeCase): self.assertGreater(errors, 0) self.assertIn("does not match the mint of its triple", out) - def test_check4_reserved_namespace_claims(self): - for fid, marker in [("GFX99", "Bambu AMS/RFID catalog"), - ("QD_X_PLA", "composed by the device"), - ("P1a2b3c4", "user-custom"), - ("null", "user-custom")]: + 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, @@ -684,25 +599,19 @@ class TestChecks(OfCleanTreeCase): compatible_printers=["P1"])) errors, out = self.t.check() self.assertGreater(errors, 0) - self.assertIn("reserved id space", out) - self.assertIn(marker, out) + self.assertIn(f'filament_id "{fid}"', out) + self.assertIn('is not a minted "OF" id', out) - def test_check3c_unresolvable_instantiated_filament(self): + 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) - def test_missing_snapshot_is_an_error(self): - os.remove(self.t.snapshot) - errors, out = self.t.check() - self.assertEqual(errors, 1) - self.assertIn("snapshot not found", out) - -class TestCheck5(OfCleanTreeCase): - def test_5a_empty_vendor_is_hard_error(self): +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, @@ -710,17 +619,11 @@ class TestCheck5(OfCleanTreeCase): self.t.write_preset("VendorA", preset("NVPLA @P1", inherits="NVPLA @base", compatible_printers=["P1"])) errors, out = self.t.check() - self.assertGreater(errors, 0) - self.assertIn("resolves empty filament_vendor", out) - self.assertIn('filament_vendor "Generic"', out) - # No grandfathering: sanctioning the tree does not silence check 5a. - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - 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_5b_divergent_filament_triples(self): + 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, @@ -732,18 +635,12 @@ class TestCheck5(OfCleanTreeCase): filament_vendor="MV", filament_type="PETG")) errors, out = self.t.check() - self.assertGreater(errors, 0) + self.assertEqual(errors, 1, out) self.assertIn("divergent triples", out) self.assertIn("MV/PLA/MPLA", out) self.assertIn("MV/PETG/MPLA", out) - # No grandfathering: sanctioning the tree does not silence check 5b. - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - errors, out = self.t.check() - self.assertEqual(errors, 1, out) - self.assertIn("divergent triples", out) - def test_5_cross_bundle_divergence_is_warning_only(self): + 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, @@ -751,8 +648,6 @@ class TestCheck5(OfCleanTreeCase): preset("APLA @PB", inherits="APLA @base", compatible_printers=["PB 0.4 nozzle"]), ]) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) errors, out = self.t.check() self.assertEqual(errors, 0, out) self.assertIn("[WARNING]", out) @@ -760,7 +655,7 @@ class TestCheck5(OfCleanTreeCase): self.assertIn('"APLA"', out) -class TestCheck6(OfCleanTreeCase): +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") @@ -862,101 +757,6 @@ class TestCheck6(OfCleanTreeCase): self.assertIn('declares no "bambu_id"', out) -# --------------------------------------------------------------------------- -# --update-snapshot -# --------------------------------------------------------------------------- - -class TestUpdateSnapshot(SyntheticTreeCase): - def test_idempotent_and_deterministic(self): - with open(self.t.snapshot, "rb") as f: - first = f.read() - rc, out = self.t.update_snapshot() - self.assertEqual(rc, 0) - self.assertIn("nothing changed", out) - with open(self.t.snapshot, "rb") as f: - self.assertEqual(f.read(), first) - self.assertTrue(first.endswith(b"\n")) - self.assertNotIn(b"\r", first) - snap = json.loads(first.decode("utf-8")) - self.assertEqual(list(snap), ["ids"]) # state only, no exception lists - self.assertEqual(list(snap["ids"]), sorted(snap["ids"])) - self.assertEqual(snap["ids"]["AX01"], { - "filaments": ["VendorA/APLA"], "name": "APLA", - "filament_type": "PLA", "filament_vendor": "AVendor"}) - self.assertEqual(snap["ids"]["OGFL99"], { - "filaments": ["OrcaFilamentLibrary/Generic PLA", "VendorA/Generic PLA"], - "name": "Generic PLA", "filament_type": "PLA", "filament_vendor": "Generic"}) - # Key order is part of the on-disk format. - self.assertEqual(list(snap["ids"]["AX01"]), - ["filaments", "name", "filament_type", "filament_vendor"]) - - def test_refuses_a_tree_it_could_not_read(self): - # A bundle that does not parse contributes no ids, so sanctioning the - # rest would record the loss as a deliberate removal. - with open(self.t.snapshot, "rb") as f: - before = f.read() - with open(os.path.join(self.t.profiles, "VendorA", - "filament", "APLA @base.json"), "w", - encoding="utf-8") as f: - f.write("{ not json") - rc, out = self.t.update_snapshot() - self.assertEqual(rc, 1, out) - self.assertIn("unreadable filament profile", out) - with open(self.t.snapshot, "rb") as f: - self.assertEqual(f.read(), before) - - def test_refuses_an_id_declared_under_two_triples(self): - # VendorB re-declares APLA's id for a different product: one id, two - # triples. No single entry can describe it, and check 3 rejects it anyway. - self.t.add_vendor("VendorB", [ - preset("BPLA @base", filament_id="AX01", instantiation=False, - filament_vendor="BVendor", filament_type="PLA"), - preset("BPLA @P1", inherits="BPLA @base", compatible_printers=["P1"]), - ]) - with open(self.t.snapshot, "rb") as f: - before = f.read() - rc, out = self.t.update_snapshot() - self.assertEqual(rc, 1) - self.assertIn('refusing to sanction filament_id "AX01": declared under 2 triples ' - '(AVendor/PLA/APLA; BVendor/PLA/BPLA)', out) - with open(self.t.snapshot, "rb") as f: - self.assertEqual(f.read(), before) # nothing written on refusal - - def test_refuses_reserved_namespace_ids(self): - self.t.write_preset("VendorA", preset("CNEW @base", filament_id="GFX99", - instantiation=False, - filament_vendor="CV", - filament_type="PLA")) - self.t.write_preset("VendorA", preset("CNEW @P1", inherits="CNEW @base", - compatible_printers=["P1"])) - with open(self.t.snapshot, "rb") as f: - before = f.read() - rc, out = self.t.update_snapshot() - self.assertEqual(rc, 1) - self.assertIn("refusing to sanction", out) - with open(self.t.snapshot, "rb") as f: - self.assertEqual(f.read(), before) # nothing written on refusal - - def test_dry_run_reports_without_writing(self): - self.t.write_preset("VendorA", preset("ANEW @P2", inherits="APLA @base", - compatible_printers=["P2"])) - with open(self.t.snapshot, "rb") as f: - before = f.read() - rc, out = self.t.update_snapshot(dry_run=True) - self.assertEqual(rc, 0) - self.assertIn("would be rewritten", out) - self.assertIn("claims added : 1", out) - with open(self.t.snapshot, "rb") as f: - self.assertEqual(f.read(), before) - # the real run writes exactly what the dry run reported - rc, out = self.t.update_snapshot() - self.assertEqual(rc, 0) - self.assertIn("snapshot written", out) - snap = load_json_file(self.t.snapshot) - self.assertEqual(snap["ids"]["AX01"]["filaments"], - ["VendorA/ANEW", "VendorA/APLA"]) - - # --------------------------------------------------------------------------- # --generate: one rule for inserts and rewrites alike # --------------------------------------------------------------------------- @@ -1040,7 +840,7 @@ class TestAssign(OfCleanTreeCase): 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 3). + # 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")) @@ -1058,8 +858,6 @@ class TestAssign(OfCleanTreeCase): 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. - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) errors, out = self.t.check() self.assertEqual(errors, 0, out) @@ -1536,7 +1334,7 @@ class TestRemint(SyntheticTreeCase): 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 run always + 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): @@ -1544,47 +1342,24 @@ class TestCli(unittest.TestCase): 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()) - self.assertIn("--generate", buf.getvalue()) - # ... and so does any invocation naming no mode: help, and no work - before = self.t.bytes_map() - rc, out = self.t.cli() - self.assertEqual(rc, 0) - self.assertIn("usage:", out) + for command in ("check", "generate-id", "normalize", "trim", "update-index"): + self.assertIn(command, buf.getvalue()) self.assertEqual(self.t.bytes_map(), before) - def test_another_tree_needs_its_own_snapshot(self): - # --profiles retargets the tree, but the sanctioned state of that tree - # is not the repo snapshot: checking against it is meaningless and - # re-recording into it would overwrite the tracked file. - with open(afi.SNAPSHOT_PATH, "rb") as f: - repo_snapshot = f.read() - for mode in ("--check", "--update-snapshot"): - with self.assertRaises(SystemExit) as caught: - with contextlib.redirect_stderr(io.StringIO()): - afi.main([mode, "--profiles", self.t.profiles]) - self.assertEqual(caught.exception.code, 2, mode) - with open(afi.SNAPSHOT_PATH, "rb") as f: - self.assertEqual(f.read(), repo_snapshot) - # Named explicitly, both modes run against that tree. - rc, out = self.t.cli("--update-snapshot") - self.assertEqual(rc, 0, out) - # --generate never reads the snapshot, so it keeps working without one. - buf = io.StringIO() - with contextlib.redirect_stdout(buf): - rc = afi.main(["--dry-run", "--profiles", self.t.profiles]) - self.assertEqual(rc, 0, buf.getvalue()) - 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", "--filament-id", "--setting-id", + afi.main(["generate-id", "--filament-id", "--setting-id", "--profiles", self.t.profiles]) self.assertEqual(caught.exception.code, 2) @@ -1593,14 +1368,14 @@ class TestCli(unittest.TestCase): 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") + 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_alone_previews_generate(self): + def test_dry_run_previews_generate_id(self): before = self.t.bytes_map() - rc, out = self.t.cli("--dry-run") + rc, out = self.t.cli("generate-id", "--dry-run") self.assertEqual(rc, 0, out) self.assertIn("would ", out) self.assertIn("nothing written", out) @@ -1615,7 +1390,7 @@ class TestCli(unittest.TestCase): filament_type="PLA", compatible_printers=["P1"])) before = self.t.bytes_map() - rc, out = self.t.cli("--generate") + rc, out = self.t.cli("generate-id") self.assertEqual(rc, 0, out) after = self.t.bytes_map() @@ -1629,7 +1404,7 @@ class TestCli(unittest.TestCase): def test_dryrun_is_the_same_flag(self): before = self.t.bytes_map() - rc, out = self.t.cli("--dryrun") + 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) @@ -1637,7 +1412,7 @@ class TestCli(unittest.TestCase): def test_generate_vendor_writes_only_in_that_bundle(self): before = self.t.bytes_map() - rc, out = self.t.cli("--generate", "--vendor", "VendorA") + 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]) @@ -1646,7 +1421,7 @@ class TestCli(unittest.TestCase): 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") + 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 @@ -1654,13 +1429,13 @@ class TestCli(unittest.TestCase): def test_generate_unknown_vendor_returns_1(self): before = self.t.bytes_map() - rc, out = self.t.cli("--generate", "--vendor", "Nope") + 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", "--setting-id") + 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 @@ -1671,7 +1446,7 @@ class TestCli(unittest.TestCase): "APLA @P1")) def test_filament_id_only_inserts_no_setting_id(self): - rc, out = self.t.cli("--generate", "--filament-id") + 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"], @@ -1680,24 +1455,42 @@ class TestCli(unittest.TestCase): self.assertNotIn( "setting_id", load_json_file(self.t.preset_path("VendorA", name))) - def test_check_mode_returns_1_on_errors(self): - # What CI keys off: --check exits nonzero when the tree does not match - # the snapshot it is validated against. + 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") + rc, out = self.t.cli("check") self.assertEqual(rc, 1) - self.assertIn("error(s)", out) - self.assertEqual(self.t.bytes_map(), before) # --check never writes + 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 - ["--mint", "A/B/C"], # removed mode - ["--drop-redundant-ids", "VendorA"], # removed mode - ["--assign"], # removed mode - ["--generate", "--check"], # two modes - ["--vendor", "VendorA"], # narrowing without a mode - ["--filament-id"], # narrowing without a mode - ["--check", "--vendor", "VendorA"]): # narrowing on --check + 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()), \ @@ -1712,7 +1505,7 @@ class TestCli(unittest.TestCase): @unittest.skipUnless(os.path.isdir(REAL_PROFILES), "resources/profiles not present") class TestRealTree(unittest.TestCase): - def test_shipped_snapshot_matches_tree(self): + def test_shipped_filament_ids_pass(self): buf = io.StringIO() with contextlib.redirect_stdout(buf): errors = afi.check_filament_ids(REAL_PROFILES) @@ -1722,7 +1515,7 @@ class TestRealTree(unittest.TestCase): # The exact CI invocation, return code included. buf = io.StringIO() with contextlib.redirect_stdout(buf): - rc = afi.main(["--check"]) + rc = afi.main(["check"]) self.assertEqual(rc, 0, buf.getvalue()) def test_every_instantiated_filament_resolves_an_id(self): @@ -1774,10 +1567,10 @@ class TestReviewFixes(OfCleanTreeCase): self.assertIn(path, str(caught.exception)) self.assertIn("test edit", str(caught.exception)) - def test_check3_skips_of_id_inherited_from_other_vendor(self): + 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 new claim must - # trip only the snapshot gate, never mint conformance. + # 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, @@ -1786,22 +1579,13 @@ class TestReviewFixes(OfCleanTreeCase): self.t.write_preset(OFL, preset("Generic PLA Matte @System", inherits="Generic PLA Matte @base", compatible_printers=[])) - rc, _ = self.t.update_snapshot() - self.assertEqual(rc, 0) 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.assertNotIn("does not match the mint", out) - self.assertIn("not sanctioned", out) - self.assertEqual(errors, 1, out) - # After sanctioning the claim the tree is fully green again. - rc, _ = self.t.update_snapshot() - self.assertEqual(rc, 0) - errors, out = self.t.check() self.assertEqual(errors, 0, out) - def test_check3c_prints_expected_mint(self): + 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", 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 index 95e447d03c..f27438788f 100644 --- a/scripts/tests/test_setting_id.py +++ b/scripts/tests/test_setting_id.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Tests for the setting_id half of scripts/orca_id_tool.py (stdlib unittest, no +"""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 @@ -17,7 +17,7 @@ import uuid sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) -import orca_id_tool as afi # noqa: E402 +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") @@ -246,7 +246,7 @@ class TestBase62Tail(unittest.TestCase): class TestAssignment(SettingTreeCase): def test_instantiation_is_read_exactly_as_the_validator_reads_it(self): - # orca_extra_profile_check.py tests `instantiation == "true"` strictly. + # 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"), @@ -852,7 +852,7 @@ class TestCli(SettingTreeCase): self.t.write("VendorA", "machine", preset("P1 0.4 nozzle", type_name="machine")) - rc, out = self.main(["--generate", "--setting-id", + rc, out = self.main(["generate-id", "--setting-id", "--profiles", self.t.profiles]) self.assertEqual(rc, 0, out) @@ -874,13 +874,13 @@ class TestCli(SettingTreeCase): 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", "--setting-id", "--dry-run", + 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", "--setting-id", + rc, out = self.main(["generate-id", "--setting-id", "--profiles", self.t.profiles]) self.assertEqual(rc, 0, out) self.assertIn("1 file(s) changed", out) @@ -888,7 +888,7 @@ class TestCli(SettingTreeCase): afi.generate_preset_setting_id("VendorA", "filament", "A PLA @P1")) - def test_setting_id_without_generate_is_a_usage_error(self): + 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]) diff --git a/scripts/update_bambu_filament_ids.py b/scripts/update_bambu_filament_ids.py index 539376599e..457a0347aa 100644 --- a/scripts/update_bambu_filament_ids.py +++ b/scripts/update_bambu_filament_ids.py @@ -1,7 +1,7 @@ #!/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_id_tool.py) +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. @@ -54,7 +54,7 @@ import tempfile import datetime sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) -from orca_id_tool import ( # noqa: E402 +from orca_profile_tool import ( # noqa: E402 BAMBU_MAP_PATH, OFL, PROFILES_DIR, diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 218070fa61..0c9bd0b1ee 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -73,6 +73,7 @@ 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" @@ -85,6 +86,8 @@ using namespace nlohmann; #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" @@ -189,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; @@ -424,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__) @@ -462,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; @@ -1381,12 +1405,68 @@ 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. @@ -4810,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) { @@ -5969,6 +6107,53 @@ int CLI::run(int argc, char **argv) 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") { @@ -6009,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 @@ -6717,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: "< + +#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 202c317e7f..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 @@ -304,6 +309,8 @@ set(lisbslic3r_sources Layer.cpp Layer.hpp LayerRegion.cpp + LayOnFace.cpp + LayOnFace.hpp libslic3r.cpp libslic3r.h Line.cpp @@ -506,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 @@ -617,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 @@ -669,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() 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/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index e2091da1db..09899aa4c2 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -175,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"; @@ -1950,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); @@ -6008,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); @@ -6404,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) { @@ -7658,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 = ""; diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 501b5d0264..81fc81b488 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1028,11 +1028,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; @@ -1085,11 +1095,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)); @@ -1428,6 +1450,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)); @@ -1915,11 +1946,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; } @@ -1935,12 +1964,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) { @@ -1953,10 +1979,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; - } } } @@ -1970,9 +1994,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; @@ -6580,6 +6603,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); } @@ -6875,6 +6900,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); @@ -7615,7 +7641,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) @@ -7634,7 +7660,24 @@ std::string GCode::extrude_perimeters(const Print &print, const std::vector 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) diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 29e4638a94..8cf4aa03fb 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -106,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 @@ -167,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 @@ -524,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/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index e9be0171e4..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); } } @@ -2735,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; @@ -2832,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) { @@ -2847,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; 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/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index e80433f4ae..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; @@ -1879,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), @@ -2977,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(); @@ -3021,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 @@ -3874,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(); @@ -3984,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(); @@ -4101,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(); @@ -5155,7 +5179,7 @@ WipeTower::ToolChangeResult WipeTower::only_generate_out_wall(bool is_new_mode) // 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(); return construct_tcr(writer, false, old_tool, true, false, 0.f, false); diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 9303f09691..5426c9bd85 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -521,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; @@ -680,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 4e752bd772..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; @@ -2226,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 @@ -2652,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 232cad1a6b..eb3a2562fb 100644 --- a/src/libslic3r/GCode/WipeTower2.hpp +++ b/src/libslic3r/GCode/WipeTower2.hpp @@ -267,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/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 b7ec08f856..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 diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 714d45ad9b..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; } diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 8da1340fa9..815b93c362 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -1569,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(); diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index a6b38889a5..9f6ec856ba 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -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); @@ -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/Preset.cpp b/src/libslic3r/Preset.cpp index d4209abe1f..1002f5be89 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -545,7 +545,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/orca_id_tool.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"); @@ -1058,6 +1058,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", @@ -1320,6 +1321,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", @@ -1445,7 +1448,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", diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 73052678e8..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/orca_id_tool.py and recomputed here when a profile ships without it. -// MUST stay byte-identical to scripts/orca_id_tool.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, diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 54e5db27e4..dc731b63c4 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -6783,7 +6783,7 @@ 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/orca_id_tool.py. Only instantiated presets carry an id; + // 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") @@ -7619,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; } @@ -7711,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 diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 88455fabf3..5a8f34e706 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -617,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. diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 9c4edabfdb..833b811535 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -360,6 +360,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" @@ -964,6 +966,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) { @@ -1408,6 +1781,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) { @@ -2620,6 +3003,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)) { diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 9822c5520c..9c1782e047 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -1160,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. @@ -1174,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; } @@ -1394,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/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 7c34fb9542..02d1b50198 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2549,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."); @@ -5537,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"); @@ -6282,6 +6302,7 @@ void PrintConfigDef::init_fff_params() 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 " @@ -6673,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)); @@ -6700,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"); @@ -6712,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"); @@ -11923,6 +11974,19 @@ 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."); @@ -11943,6 +12007,26 @@ 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. Use - to write them to stdout."); @@ -12062,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."); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 6beaeed104..727246ef73 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1353,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)) @@ -1627,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)) @@ -1788,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)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index bb2a355daa..3b7e889472 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1501,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" diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 2b28622db4..36274669b0 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -684,6 +684,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 @@ -788,6 +792,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) 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/AMSDryControl.cpp b/src/slic3r/GUI/AMSDryControl.cpp index eb5ddb5d4e..17d7d62ad8 100644 --- a/src/slic3r/GUI/AMSDryControl.cpp +++ b/src/slic3r/GUI/AMSDryControl.cpp @@ -1197,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; } 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..6d9454a829 --- /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] = [this, 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, k_dress] { + if (m_dressup_type) m_dressup_type->SetSelection(0); open_feature(k_dress); }; + m_verb_actions["btn:dress#1"] = [this, open_feature, k_dress] { + 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, k_bool, 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, k_pat, 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_base, &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, mate_base, 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, base](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, base](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, [this, 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..9c438c7d06 --- /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') ? into_u8(_L("Enter a number")) : into_u8(_L("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/ColorDecomposeSupport.cpp b/src/slic3r/GUI/ColorDecomposeSupport.cpp index ea67564208..cfd0d02532 100644 --- a/src/slic3r/GUI/ColorDecomposeSupport.cpp +++ b/src/slic3r/GUI/ColorDecomposeSupport.cpp @@ -395,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 ba91ffb7c2..f40c71ec4a 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -1041,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); @@ -1055,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"}) @@ -1128,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 index 6f9128841b..17cf902217 100644 --- a/src/slic3r/GUI/ConfigValueFormatter.cpp +++ b/src/slic3r/GUI/ConfigValueFormatter.cpp @@ -188,6 +188,17 @@ wxString get_string_value(const std::string& opt_key, const DynamicPrintConfig& 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" || diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 49477ac7dd..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" @@ -3436,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) { @@ -3453,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) { diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index f2a915f8d2..a5ab7bd5d8 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 @@ -1826,6 +1829,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(); } @@ -2047,14 +2060,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. @@ -2120,6 +2143,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(); @@ -3202,7 +3232,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(); @@ -3270,6 +3304,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) { @@ -3642,6 +3734,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) { @@ -4206,6 +4312,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) { @@ -4310,6 +4433,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) @@ -4543,8 +4669,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; @@ -4910,6 +5040,8 @@ bool GLCanvas3D::is_camera_rotate(const wxMouseEvent& evt, const std::mapconfig(); + 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)) @@ -7917,13 +8146,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) @@ -9596,6 +9925,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) { diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 1919b975b1..ada132072b 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; @@ -542,6 +545,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; @@ -569,6 +593,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; @@ -882,6 +910,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); } @@ -1051,6 +1088,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; @@ -1190,6 +1228,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; @@ -1252,6 +1292,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(); diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 2132a6689f..97213d170b 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -350,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; 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/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/GLGizmoSketch.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSketch.cpp new file mode 100644 index 0000000000..88bd636563 --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoSketch.cpp @@ -0,0 +1,459 @@ +#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 L(s) Slic3r::GUI::I18N::translate((s)).c_str() +#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(L("Pocket (Cut)"), ok)) apply_pocket(); + } else if (is_revolve) { + if (btn(L("Revolve"), ok)) apply_revolve(); + } else { + if (btn(L("Extrude"), ok)) apply_extrude(); + } + + if (ImGui::Button(L("Clear All"), {-1,0})) clear_all(); + if (ImGui::Button(L("Close"), {-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/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 9cff834346..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++)); 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/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index eeaadd0cbd..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); } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index ee37f3602e..288a666901 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -38,6 +38,10 @@ #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" // BBS @@ -1063,7 +1067,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); @@ -1281,6 +1293,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. @@ -1321,9 +1346,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(); @@ -1354,6 +1396,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 diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index b38a107a99..6851935059 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,6 +68,9 @@ namespace GUI class Tab; class PrintHostQueueDialog; class Plater; +#ifdef SLIC3R_CAD +class DesignPanel; +#endif class MainFrame; class WebViewPanel; class ParamsDialog; @@ -403,6 +409,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/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 893260f934..ba0d9580dc 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1053,7 +1053,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 @@ -3501,7 +3507,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)); @@ -3552,16 +3558,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)); @@ -5956,7 +5964,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(); @@ -5981,15 +5989,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); } } } diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index e913ebaabf..c05775a963 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -428,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(); @@ -857,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/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 8406f37714..1cdf7204df 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -91,6 +91,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" @@ -8328,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(); @@ -9453,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); @@ -9669,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); @@ -10216,6 +10237,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(); @@ -13709,6 +13740,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() @@ -13718,6 +13757,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) @@ -15669,8 +15713,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) diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 20fe93b3f7..628c9069ca 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -9,6 +9,7 @@ #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" @@ -367,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); @@ -1739,6 +1741,21 @@ void PreferencesDialog::create_items() SPEED_DIAL_RECENT_COUNT_MAX); g_sizer->Add(item_speed_dial_recents); +#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 @@ -1815,6 +1832,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/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 82de9fca68..57818dca82 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -416,12 +417,54 @@ std::set project_used_filament_slots(const PresetBundle& bundle, const D 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: the mixed slot's colour chip, the -// component filament's colour chip, and the reason. "Cancel" is the safe choice and keeps the -// dialog open; "Publish anyway" continues. +// 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: @@ -437,47 +480,37 @@ public: content->AddSpacer(FromDIP(10)); const int swatch = FromDIP(20); - for (const MixedDependencyIssue& issue : issues) { - auto* row = new wxBoxSizer(wxHORIZONTAL); - - // The mixed slot as just its own chip (gradient-aware, numbered like its tab); - // falls back to a plain label when the chip cannot be built. - const wxString mix_label = wxString::Format(_L("Filament %d (mixed)"), int(issue.mixed_slot) + 1); - const wxBitmap mix_bmp = mixed_filament_chip_bitmap(full, issue.mixed_slot, swatch); - if (mix_bmp.IsOk()) { - auto* bmp = new wxStaticBitmap(this, wxID_ANY, mix_bmp); - bmp->SetToolTip(mix_label); - row->Add(bmp, 0, wxALIGN_CENTER_VERTICAL); - } else { - auto* label = new wxStaticText(this, wxID_ANY, mix_label); - label->SetFont(Label::Body_12); - row->Add(label, 0, wxALIGN_CENTER_VERTICAL); + // 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; + }; - auto* needs = new wxStaticText(this, wxID_ANY, _L("needs")); - needs->SetFont(Label::Body_12); - needs->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#6B6B6B"))); - row->Add(needs, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, FromDIP(6)); - - // The component filament's colour chip, numbered like the tab strips; the slot - // name stays on hover to keep the row itself short. + for (const MixedDependencyIssue& issue : issues) { std::string hex = filament_color_hex(full, issue.component_slot); if (hex.empty()) hex = "#D9D9D9"; - if (wxBitmap* chip = get_extruder_color_icon(hex, std::to_string(issue.component_slot + 1), swatch, swatch)) { - auto* comp_bmp = new wxStaticBitmap(this, wxID_ANY, *chip); - comp_bmp->SetToolTip(wxString::Format(_L("Filament %d"), int(issue.component_slot) + 1)); - row->Add(comp_bmp, 0, wxALIGN_CENTER_VERTICAL); - } + const wxBitmap* comp_bmp = get_extruder_color_icon(hex, std::to_string(issue.component_slot + 1), swatch, swatch); - auto* reason = new wxStaticText(this, wxID_ANY, - issue.reason == MixedDependencyIssue::Reason::Disabled ? _L("not enabled") : - _L("material not published")); - reason->SetFont(Label::Body_12); - reason->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#989898"))); - row->Add(reason, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); + 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)); - content->Add(row, 0, wxLEFT, FromDIP(10)); + 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)); } diff --git a/src/slic3r/GUI/SettingsIndex.cpp b/src/slic3r/GUI/SettingsIndex.cpp index 994ef496d6..fed344ff71 100644 --- a/src/slic3r/GUI/SettingsIndex.cpp +++ b/src/slic3r/GUI/SettingsIndex.cpp @@ -22,7 +22,7 @@ namespace Search { static std::string get_key(const std::string &opt_key, Preset::Type type) { return std::to_string(int(type)) + ";" + opt_key; } -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); } template // void change_opt_key(std::string& opt_key, DynamicPrintConfig* config) @@ -79,6 +79,7 @@ void SettingsIndex::append_options(DynamicPrintConfig *config, Preset::Type type 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; @@ -155,29 +156,46 @@ bool SettingsIndex::apply(DynamicPrintConfig *config, Preset::Type type, ConfigO const Option &SettingsIndex::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(m_options.begin(), m_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 == m_options.end()) { variant_index = -2 ; return m_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(m_options.begin(), m_options.end(), Option({key})); + if (it == m_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, m_options.end(), Option({boost::nowide::widen(get_key(opt_key3, type))})); - if (it == m_options.end() || it->opt_key().compare(0, opt_key3.length(), opt_key3) != 0) { - variant_index = -2; // Not found - return m_options[0]; + const std::wstring prefix = key + L"#"; + it = std::lower_bound(it, m_options.end(), Option({prefix})); + if (it == m_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, m_options.end(), Option({indexed_key})); + if (it == m_options.end() || it->key != indexed_key) + return not_found(); + if (!has_variant) + variant_index = -1; } - auto it2 = it; - ++it2; - if (it2 != m_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 m_options[it - m_options.begin()]; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 6f958266cc..768d2023cc 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2022,6 +2022,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\?"), @@ -2037,6 +2051,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) { @@ -2793,6 +2824,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"); @@ -3056,6 +3088,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"); @@ -5137,6 +5171,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"); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 5a182cd959..2e925fe23f 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1490,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 = index.get_option(opt_key, type, variant_index); + Search::Option option = index.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]; @@ -1518,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) { @@ -1553,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 = index.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 the index 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, @@ -1584,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/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/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/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 69bfa4217e..5fd5898a1b 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -1711,7 +1711,7 @@ void PresetUpdater::priv::check_new_vendors(const std::set& system_ GUI::wxGetApp().plater()->get_notification_manager()->push_notification( GUI::NotificationType::PresetUpdateFinished, GUI::NotificationManager::NotificationLevel::ImportantNotificationLevel, - _u8L("Configuration package: ") + vendor_id + _u8L(" updated to ") + cur_ver.to_string()); + Slic3r::format(_u8L("Configuration package: %1% updated to %2%"), vendor_id, cur_ver.to_string())); } }); } @@ -1806,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/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 c403152c4e..f79a3c54c2 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -85,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/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_support_material.cpp b/tests/fff_print/test_support_material.cpp index 4564c0b034..97a9cea9e1 100644 --- a/tests/fff_print/test_support_material.cpp +++ b/tests/fff_print/test_support_material.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include @@ -128,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). diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index bc5a0a1e80..185dce37da 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -37,6 +37,7 @@ add_executable(${_TEST_NAME}_tests test_triangle_selector.cpp test_meshboolean.cpp test_marchingsquares.cpp + test_lay_on_face.cpp test_model.cpp test_utils.cpp test_timeutils.cpp @@ -51,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 5c38859a12..02d392140b 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -3,6 +3,8 @@ #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" @@ -15,6 +17,8 @@ #include #include +#include +#include #include #include @@ -143,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) 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_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_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 73d244cf42..6ec6ba9b1e 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -553,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. 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_setting_id.cpp b/tests/libslic3r/test_preset_setting_id.cpp index 8347fa7089..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/orca_id_tool.py). The C++ generate_preset_setting_id() MUST stay byte-identical +// 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 "import sys; sys.path.insert(0, 'scripts'); from orca_id_tool 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_toolordering_nozzle_group.cpp b/tests/libslic3r/test_toolordering_nozzle_group.cpp index d01ccf5856..d9a5d70406 100644 --- a/tests/libslic3r/test_toolordering_nozzle_group.cpp +++ b/tests/libslic3r/test_toolordering_nozzle_group.cpp @@ -1025,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_wipe_tower.cpp b/tests/libslic3r/test_wipe_tower.cpp index 2987dce9da..277e11eceb 100644 --- a/tests/libslic3r/test_wipe_tower.cpp +++ b/tests/libslic3r/test_wipe_tower.cpp @@ -6,6 +6,8 @@ #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; @@ -91,3 +93,197 @@ TEST_CASE("Brim width estimate matches each generator's loop quantization", "[Wi 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/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()