Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8abd9b44d3 | ||
|
|
be6c67758a | ||
|
|
3d7682e292 | ||
|
|
77bd987979 | ||
|
|
3559fc883b | ||
|
|
f296c7c221 | ||
|
|
21a31660d2 | ||
|
|
db0e14ceab | ||
|
|
81b8b01a01 | ||
|
|
2f4c9ab66d | ||
|
|
d766854af7 | ||
|
|
2355bb998d | ||
|
|
e8b63da1e2 | ||
|
|
013ac898ba | ||
|
|
5c7cb6bed5 | ||
|
|
3aefae016f | ||
|
|
e245f5d069 | ||
|
|
96f2c8e698 | ||
|
|
d855bab19d | ||
|
|
cde889a7c3 | ||
|
|
045504c880 | ||
|
|
6166bac17a | ||
|
|
165a1e9f4c | ||
|
|
c215d0291b | ||
|
|
d926f7c490 | ||
|
|
2db770b672 | ||
|
|
2a46197322 | ||
|
|
15fd3fc97c | ||
|
|
00f778e863 | ||
|
|
dc1e8b6dc3 | ||
|
|
753054974b | ||
|
|
eacc236ccb | ||
|
|
345369e005 | ||
|
|
18c5d31fb2 | ||
|
|
61d2d4355a | ||
|
|
ab023f3f6d | ||
|
|
b073aa4d23 | ||
|
|
8247514ae2 | ||
|
|
00f55639d3 | ||
|
|
68d754d946 | ||
|
|
dc5a48bdfd | ||
|
|
05083bb6ab | ||
|
|
a393b21642 | ||
|
|
a7c8dcc58d | ||
|
|
3514249197 | ||
|
|
7f2598d0d6 |
@@ -21,7 +21,6 @@ Paths below are relative to this skill. Commands run from the repository root.
|
|||||||
| Add a printer or nozzle; change models, variants, assets or extruder vectors | [machine-profiles.md](references/machine-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) |
|
| 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) |
|
| Create a vendor bundle; diagnose loading or inheritance; migrate preset names | [vendor-bundle.md](references/vendor-bundle.md) |
|
||||||
| Name a preset; check what a name must equal | [naming.md](references/naming.md) |
|
|
||||||
| Change ids; diagnose AMS identity | [ids.md](references/ids.md), then `docs/HLSD/filament_id.md` for identity changes |
|
| 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) |
|
| 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) |
|
| Run checks, interpret failures, test another tree or verify in the app | [validation.md](references/validation.md) |
|
||||||
@@ -45,10 +44,7 @@ Paths below are relative to this skill. Commands run from the repository root.
|
|||||||
update in-tree references too. See [migration rules](references/vendor-bundle.md#renamed_from).
|
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
|
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;
|
needs a non-empty `compatible_printers` in its own file. Library fallbacks may omit it;
|
||||||
library printer-specific tunes use a non-empty list. One variant may be claimed by only one
|
library printer-specific tunes use a non-empty list. Keep same-product tunes disjoint.
|
||||||
profile per filament product (`filament_id`); an overlap is resolved by moving the variant to the
|
|
||||||
most specific preset, which is preferred over deleting a profile. See
|
|
||||||
[one variant, one profile](references/filament-profiles.md#overlapping-coverage-one-variant-one-profile-per-product).
|
|
||||||
7. **Preset values are strings or arrays of strings.** Use `"instantiation": "false"`, not `false`.
|
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.
|
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).
|
Wrong types can abort loading; see [failure scopes](references/vendor-bundle.md#failure-modes-ranked-by-blast-radius).
|
||||||
@@ -91,8 +87,7 @@ Paths below are relative to this skill. Commands run from the repository root.
|
|||||||
```
|
```
|
||||||
|
|
||||||
On Windows use `py -3` instead of `python3`, and `scripts\check_profile.bat -Vendor "<Vendor>"`
|
On Windows use `py -3` instead of `python3`, and `scripts\check_profile.bat -Vendor "<Vendor>"`
|
||||||
/ `scripts\check_profile.bat`. Logs land in a per-user cache dir (see
|
/ `scripts\check_profile.bat`. Logs: `.test/check_profiles/logs/<check>.log`.
|
||||||
[validation.md](references/validation.md)).
|
|
||||||
Id checks remain tree-wide under `--vendor`; filament-only bundles skip the default slice check.
|
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.
|
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
|
5. **Verify the changed behavior.** Slice newly added non-default processes explicitly, and
|
||||||
|
|||||||
@@ -103,57 +103,6 @@ name.
|
|||||||
- Copying a base's full printer list onto a nozzle-specific variant produces duplicate combobox entries —
|
- Copying a base's full printer list onto a nozzle-specific variant produces duplicate combobox entries —
|
||||||
a real shipped bug twice over.
|
a real shipped bug twice over.
|
||||||
|
|
||||||
## Overlapping coverage: one variant, one profile per product
|
|
||||||
|
|
||||||
`filament_id` is the **product** key, not the preset key — every variant of one product shares it
|
|
||||||
(`<filament_vendor>/<filament_type>/<name-before-@>`). So if one printer variant appears in the
|
|
||||||
`compatible_printers` of two presets of that product, the slicer cannot tell them apart at AMS match time.
|
|
||||||
The C++ validator reports `Ambiguous AMS filament match: N presets share filament_id "X" … printer "Y"`.
|
|
||||||
`orca_profile_tool.py check` does **not** see it and passes. Resolve the overlap by **specificity**: keep
|
|
||||||
the variant on the most specific profile and remove it from every more general one. Deleting a profile is
|
|
||||||
the least preferred fix — moving coverage keeps the tune that users rely on.
|
|
||||||
|
|
||||||
Judge specificity from the profile's `compatible_printers` — how many variants it actually covers — and
|
|
||||||
use the name only as a secondary, easily-vague hint; decide by the lists, with a best judgement call on
|
|
||||||
the name. Naming conventions differ by vendor: BBL's is the reference (`@<Vendor> <Model>` for a whole
|
|
||||||
model, `@<Vendor> <Model> <nozzle> nozzle` for one variant, `@<Vendor>` for a vendor-wide generic), but
|
|
||||||
others vary (`@<printer model>`, a printer serial, or Creality's `@<Model>-all`). A name never overrides
|
|
||||||
the list — see [preset naming](naming.md) for the shapes.
|
|
||||||
|
|
||||||
Specificity, most to least:
|
|
||||||
|
|
||||||
1. **Variant-specialized** — lists a single printer variant (BBL-style
|
|
||||||
`... @<Vendor> <Model> <nozzle> nozzle`).
|
|
||||||
2. **Model-specialized** — lists the variants of one printer model (BBL-style `... @<Vendor> <Model>`).
|
|
||||||
It should cover every variant of its model, not only the nozzle it was authored for.
|
|
||||||
3. **Family / series** — lists variants spanning a printer family or series.
|
|
||||||
4. **Generic / catch-all** — vendor-wide, covering many unrelated models (often the bare
|
|
||||||
`Generic <mat> @<Vendor>`).
|
|
||||||
|
|
||||||
Rules:
|
|
||||||
|
|
||||||
- A model-specialized profile is extended to **all** variants of its model, and each variant it thereby
|
|
||||||
starts covering is removed from the family and generic profiles that also listed it — including variants
|
|
||||||
that had no overlap before. Apply it per nozzle, not just 0.4.
|
|
||||||
- Apply it **per product**: trim only the material that has a specialized profile from the generic; a
|
|
||||||
material whose product has no specialized profile keeps the variant in the generic.
|
|
||||||
- Never strip coverage a variant has nowhere else to get. If a variant has no variant-level specialized
|
|
||||||
profile, the next level down keeps it; when the model has specialized profiles, the model-level one wins
|
|
||||||
over the family/generic.
|
|
||||||
- Moving coverage is preferred over deleting. If a profile must be deleted, remove the more general
|
|
||||||
one, not the specialized profile that carries the tune.
|
|
||||||
- After moving coverage, repoint the affected `default_filament_profile` (machine) and clean the model's
|
|
||||||
`default_materials`: they should name the most specific profile that covers the variant, and should not
|
|
||||||
keep generic entries that no longer cover the model. This rule applies equally when adding or fixing
|
|
||||||
defaults.
|
|
||||||
|
|
||||||
Multiple profiles of one product with **disjoint** `compatible_printers` is the intended end state.
|
|
||||||
Adding coverage to the specialized profile and removing it from the generic is the preferred direction.
|
|
||||||
|
|
||||||
**Detection caveat:** `orca_profile_tool.py check` is blind to this; only the C++ validator behind the full
|
|
||||||
`./scripts/check_profile.sh` reports it (`validate_system`). Always confirm with that, not the vendor-scoped
|
|
||||||
loop.
|
|
||||||
|
|
||||||
## Alias shadowing
|
## Alias shadowing
|
||||||
|
|
||||||
A printer-specific filament in either the library or a vendor bundle supersedes the library fallback
|
A printer-specific filament in either the library or a vendor bundle supersedes the library fallback
|
||||||
|
|||||||
@@ -1,60 +0,0 @@
|
|||||||
# Preset naming
|
|
||||||
|
|
||||||
A preset's `name` is the loader's key, not decoration. The index registers it; `inherits`,
|
|
||||||
`compatible_printers` and the `default_*` keys reference it by the exact string; `renamed_from` depends
|
|
||||||
on it; and `setting_id` / `filament_id` hash it (see [ids.md](ids.md)). Two presets of one type in a
|
|
||||||
bundle may not share a name (`check_preset_name_uniqueness`). Treat a name change as an identity change,
|
|
||||||
not a relabel.
|
|
||||||
|
|
||||||
Naming is convention only where the loader does not parse it. What the loader actually acts on:
|
|
||||||
|
|
||||||
| Type | Shape | Acted on |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `machine_model` | `<Model>` | the exact string, named by a variant's `printer_model` |
|
|
||||||
| `machine` | `<Model> <nozzle> nozzle` | the exact string, named by `compatible_printers`; `printer_variant` must equal a nozzle diameter |
|
|
||||||
| `process` | `<lh>mm <Quality> @<target>` | the exact string when referenced or selected; the `@<target>` half is a label |
|
|
||||||
| `filament` | `<Product> @<target>` | text before the first `@` is the **alias**, used for shadowing; the rest is a label |
|
|
||||||
|
|
||||||
## `machine_model`
|
|
||||||
|
|
||||||
`<Model>` — the vendor-prefixed model name (`Bambu Lab X1 Carbon`, `Creality K1`, `Prusa CORE One`). A
|
|
||||||
variant names it verbatim in `printer_model`; a mismatch makes the variant invalid. `check_name_consistency`
|
|
||||||
forces the index entry to equal the file's `name`, and the variant's `printer_model` targets this string
|
|
||||||
([A `machine_model` is not a config preset](machine-profiles.md#a-machine_model-is-not-a-config-preset)).
|
|
||||||
It is also the `<Model>_cover.png` and bed-asset stem.
|
|
||||||
|
|
||||||
## `machine` (variant)
|
|
||||||
|
|
||||||
`<Model> <nozzle> nozzle` is near-universal (`Bambu Lab X1 Carbon 0.4 nozzle`). `printer_variant` holds
|
|
||||||
the bare nozzle (`0.4`) and must be an exact member of the model's `nozzle_diameter` list — the hard
|
|
||||||
rules are in [The `machine` variant](machine-profiles.md#the-machine-variant). Casing varies
|
|
||||||
(`nozzle` / `Nozzle`): match the bundle, not this page. A variant that is not nozzle-specific (a special
|
|
||||||
toolhead, a multi-material build) may drop the suffix — still an exact reference. Bases are named
|
|
||||||
`fdm_machine_common` / `fdm_<vendor>_common`.
|
|
||||||
|
|
||||||
## `process`
|
|
||||||
|
|
||||||
`<layer height>mm <quality> @<target>` — [process-profiles.md](process-profiles.md#naming) has the
|
|
||||||
quality ladder and the `fdm_process_*` base names. The `@<target>` is a human label, not a reference: it
|
|
||||||
usually does not equal a real variant, and compatibility comes from the resolved `compatible_printers`
|
|
||||||
list or condition.
|
|
||||||
|
|
||||||
## `filament`
|
|
||||||
|
|
||||||
`<Product> @<target>`. The product half is what `filament_id` hashes and what survives as the **alias** up
|
|
||||||
to the first `@`; the target half is a label except for reserved forms:
|
|
||||||
|
|
||||||
- `@base` — a non-instantiated product root. `@base` is convention; a base is really identified by
|
|
||||||
`instantiation: "false"` and no `setting_id` ([the three-part shape](filament-profiles.md#the-three-part-shape)).
|
|
||||||
- `@System` — the OrcaFilamentLibrary selectable shim. The literal `Generic <mat> @System` is
|
|
||||||
load-bearing for 3MF/project recovery, beyond the alias rule ([alias shadowing](filament-profiles.md#alias-shadowing)).
|
|
||||||
- `@<Vendor>`, `@<Vendor> <Model>`, `@<Vendor> <Model> <nozzle> nozzle` — printer tunes, BBL's shape.
|
|
||||||
Other vendors differ (a bare model, a printer serial, Creality's `@<Model>-all`). Specificity is judged
|
|
||||||
from `compatible_printers`, not the name
|
|
||||||
([one variant, one profile](filament-profiles.md#overlapping-coverage-one-variant-one-profile-per-product)).
|
|
||||||
|
|
||||||
## Not the same as the filename
|
|
||||||
|
|
||||||
The loader keys off `name`, and a filename that disagrees usually still loads. Index `name` must equal the
|
|
||||||
file's `name`, and the filename should match `sub_path`; a mismatch that differs only in case breaks
|
|
||||||
another platform ([cross-platform paths](validation.md#cross-platform-paths)).
|
|
||||||
@@ -79,15 +79,8 @@ and written in the preset's own file — golden rule 6, with the flattened-vs-ow
|
|||||||
inherited or copied the base's full printer list, and for two presets of one product with overlapping
|
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.
|
lists — duplicate combobox entries and an ambiguous AMS match.
|
||||||
|
|
||||||
Two presets of one product (`filament_id`) must not share a variant. Resolve it by specificity: move the
|
|
||||||
variant to the most specific preset and remove it from the more general ones — preferred over deleting a
|
|
||||||
profile. Then repoint the machine's `default_filament_profile` and the model's `default_materials` at the
|
|
||||||
profile that now covers it. See
|
|
||||||
[one variant, one profile](filament-profiles.md#overlapping-coverage-one-variant-one-profile-per-product).
|
|
||||||
|
|
||||||
*Why:* real shipped bugs twice (`b7b3418baf` "showing up everywhere", `ff83aa41ef` duplicate Flashforge
|
*Why:* real shipped bugs twice (`b7b3418baf` "showing up everywhere", `ff83aa41ef` duplicate Flashforge
|
||||||
entries). The Python `check` passes on an overlap; only the full `check_profile.sh` (`validate_system`)
|
entries).
|
||||||
reports `Ambiguous AMS filament match`.
|
|
||||||
|
|
||||||
## 6. Model ↔ variant ↔ process consistency
|
## 6. Model ↔ variant ↔ process consistency
|
||||||
|
|
||||||
@@ -135,11 +128,7 @@ numbers nobody measured.
|
|||||||
## 11. `default_materials` (checked by CI)
|
## 11. `default_materials` (checked by CI)
|
||||||
|
|
||||||
`check` fails on a `default_materials` / `default_filament_profile` name that resolves to no system
|
`check` fails on a `default_materials` / `default_filament_profile` name that resolves to no system
|
||||||
filament, so a dangling entry no longer reaches review. When compatibility moves between profiles of a
|
filament, so a dangling entry no longer reaches review. Scope the run while working on one vendor:
|
||||||
product, the machine's `default_filament_profile` and the model's `default_materials` must be repointed at
|
|
||||||
the most specific profile that still covers the variant, dropping generic entries that no longer apply —
|
|
||||||
the same [specificity rule](filament-profiles.md#overlapping-coverage-one-variant-one-profile-per-product)
|
|
||||||
applies when adding or fixing defaults. Scope the run while working on one vendor:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 scripts/orca_profile_tool.py check --vendor "<Vendor>" # py -3 on Windows
|
python3 scripts/orca_profile_tool.py check --vendor "<Vendor>" # py -3 on Windows
|
||||||
|
|||||||
@@ -20,11 +20,8 @@ default Windows client refuses to run a checked-out `.ps1` at all. The `.ps1` fi
|
|||||||
probing `py -3`, then `python`, then `python3`; run the tool by hand with `py -3` for the same reason.
|
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
|
Every check in the run happens even after an earlier one fails; the script exits non-zero if any did, and writes
|
||||||
`logs/<check>.log` plus, on failure, `pr_comment.md` under a per-user cache dir — the same report CI posts on the PR.
|
`.test/check_profiles/logs/<check>.log` plus, on failure, `.test/check_profiles/pr_comment.md` — the same
|
||||||
That dir is `~/Library/Caches/orca-profile-check` on macOS, `${XDG_CACHE_HOME:-~/.cache}/orca-profile-check` on Linux
|
report CI posts on the PR. A stale `.test/check_profiles/.lock` after a crash must be removed by hand.
|
||||||
and `%LOCALAPPDATA%\orca-profile-check` on Windows; it is named apart from OrcaSlicer's own per-user dirs and sits
|
|
||||||
outside the checkout, so every worktree shares one copy. `--work-dir` / `-WorkDir` overrides it. A stale `.lock`
|
|
||||||
there after a crash must be removed by hand.
|
|
||||||
|
|
||||||
## The five checks
|
## The five checks
|
||||||
|
|
||||||
@@ -153,10 +150,9 @@ Two things it therefore does **not** enforce:
|
|||||||
|
|
||||||
Built from `src/dev-utils/OrcaSlicer_profile_validator.cpp` (`-DORCA_TOOLS=ON`).
|
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
|
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 the
|
Debug, and `check_profile.ps1` adds MinSizeRel — else they download the nightly into
|
||||||
`validator` subdirectory of the per-user cache dir (see above). Pass `--download` / `-Download` to
|
`.test/check_profiles/validator`. Pass `--download` / `-Download` to match CI exactly, since a stale
|
||||||
match CI exactly, since a stale local build is used silently. Windows looks for
|
local build is used silently. Windows looks for `OrcaSlicer_profile_validator.exe`.
|
||||||
`OrcaSlicer_profile_validator.exe`.
|
|
||||||
|
|
||||||
If your build lives somewhere else entirely, point at it with `--validator` / `-Validator`, or set
|
If your build lives somewhere else entirely, point at it with `--validator` / `-Validator`, or set
|
||||||
`ORCA_PROFILE_VALIDATOR` (`$env:ORCA_PROFILE_VALIDATOR` in PowerShell).
|
`ORCA_PROFILE_VALIDATOR` (`$env:ORCA_PROFILE_VALIDATOR` in PowerShell).
|
||||||
@@ -227,7 +223,7 @@ Keep stems tidy too, but a space immediately before `.json` is not a trailing pa
|
|||||||
| `references unknown compatible_printers "<p>"` | the printer was renamed or deleted; fix the reference |
|
| `references unknown compatible_printers "<p>"` | the printer was renamed or deleted; fix the reference |
|
||||||
| `references renamed compatible_printers "<old>" (now "<new>")` | in-tree references must name the current preset; `renamed_from` does not excuse them |
|
| `references renamed compatible_printers "<old>" (now "<new>")` | in-tree references must name the current preset; `renamed_from` does not excuse them |
|
||||||
| `Filament preset "<f>" 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) |
|
| `Filament preset "<f>" 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 by [specificity](filament-profiles.md#overlapping-coverage-one-variant-one-profile-per-product) — the specialized profile keeps the variant, the general ones drop it; prefer this over deleting a profile — or fix an `inherits` pointing at another material's `@base`. `orca_profile_tool.py check` does not catch this; only `validate_system` here does |
|
| `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 |
|
| `Layer height cannot exceed nozzle diameter.` / `Line width too small` | `Print::validate()` flow rules |
|
||||||
| `[ERROR] … no <V>.json list references it, so it never loads` | `update-index`, or delete the file |
|
| `[ERROR] … no <V>.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] … references it and it declares no profile type` | set the correct `type` explicitly, then `normalize` and `update-index` |
|
||||||
|
|||||||
@@ -330,13 +330,12 @@ jobs:
|
|||||||
# sources are unchanged, so a re-run of the same commit would skip the
|
# sources are unchanged, so a re-run of the same commit would skip the
|
||||||
# OrcaSlicer module and ship no test asset. A per-run value in that module's
|
# OrcaSlicer module and ship no test asset. A per-run value in that module's
|
||||||
# env keeps it rebuilding; orca_deps stays cached, and the compiler cache
|
# env keeps it rebuilding; orca_deps stays cached, and the compiler cache
|
||||||
# still serves the rebuild. run-tests on the same module builds the test
|
# still serves the rebuild.
|
||||||
# binaries.
|
- name: Inject commit hash and flatpak-builder cache buster into Flatpak manifest
|
||||||
- name: Inject commit hash, run-tests and cache buster into Flatpak manifest
|
|
||||||
env:
|
env:
|
||||||
flatpak_builder_cache_buster: ${{ github.run_id }}-${{ github.run_attempt }}
|
flatpak_builder_cache_buster: ${{ github.run_id }}-${{ github.run_attempt }}
|
||||||
run: |
|
run: |
|
||||||
sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n run-tests: true\n build-options:\n env:\n flatpak_builder_cache_buster: \"$flatpak_builder_cache_buster\"\n git_commit_hash: \"$git_commit_hash\"|}" \
|
sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n flatpak_builder_cache_buster: \"$flatpak_builder_cache_buster\"\n git_commit_hash: \"$git_commit_hash\"|}" \
|
||||||
scripts/flatpak/com.orcaslicer.OrcaSlicer.yml
|
scripts/flatpak/com.orcaslicer.OrcaSlicer.yml
|
||||||
shell: bash
|
shell: bash
|
||||||
# flatpak-builder's --ccache only wraps cc and gcc, and the manifest builds
|
# flatpak-builder's --ccache only wraps cc and gcc, and the manifest builds
|
||||||
@@ -382,6 +381,9 @@ jobs:
|
|||||||
save-cache: false
|
save-cache: false
|
||||||
arch: ${{ matrix.variant.arch }}
|
arch: ${{ matrix.variant.arch }}
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
|
# run-tests fires the module's build-only test-commands; keep-build-dirs
|
||||||
|
# retains the binaries for the packaging step below.
|
||||||
|
run-tests: true
|
||||||
keep-build-dirs: true
|
keep-build-dirs: true
|
||||||
# The build has just touched everything it can use, so an object untouched
|
# The build has just touched everything it can use, so an object untouched
|
||||||
# for a week is dead, usually orphaned by a flag change.
|
# for a week is dead, usually orphaned by a flag change.
|
||||||
@@ -447,13 +449,10 @@ jobs:
|
|||||||
# the bounds checks are compiled in, so a stripped exe still catches them.
|
# the bounds checks are compiled in, so a stripped exe still catches them.
|
||||||
find "$d/build_flatpak/tests" -type f -perm -u+x -exec strip --strip-unneeded {} + 2>/dev/null || true
|
find "$d/build_flatpak/tests" -type f -perm -u+x -exec strip --strip-unneeded {} + 2>/dev/null || true
|
||||||
# At runtime the tests read tests/ (TEST_DATA_DIR), scripts/, and under
|
# At runtime the tests read tests/ (TEST_DATA_DIR), scripts/, and under
|
||||||
# resources/ the shipped profiles (PROFILES_DIR), the printers/ maps, and
|
# resources/ the shipped profiles (PROFILES_DIR) and the printers/ maps.
|
||||||
# the icon SVGs (NativeCommands icon names are checked against them).
|
|
||||||
find "$d" -mindepth 1 -maxdepth 1 -type d \
|
find "$d" -mindepth 1 -maxdepth 1 -type d \
|
||||||
! -name tests ! -name build_flatpak ! -name scripts ! -name resources -exec rm -rf {} +
|
! -name tests ! -name build_flatpak ! -name scripts ! -name resources -exec rm -rf {} +
|
||||||
find "$d/resources" -mindepth 1 -maxdepth 1 ! -name profiles ! -name printers ! -name images -exec rm -rf {} +
|
find "$d/resources" -mindepth 1 -maxdepth 1 ! -name profiles ! -name printers -exec rm -rf {} +
|
||||||
# Only the SVGs are read; the png/ico/icns/gif assets are ~35MB of dead weight.
|
|
||||||
find "$d/resources/images" -mindepth 1 -maxdepth 1 ! -name '*.svg' -exec rm -rf {} + 2>/dev/null || true
|
|
||||||
tar -cf flatpak-test-asset.tar flatpak_app "$d"
|
tar -cf flatpak-test-asset.tar flatpak_app "$d"
|
||||||
- name: Upload flatpak test asset
|
- name: Upload flatpak test asset
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
|
|||||||
@@ -448,26 +448,9 @@ jobs:
|
|||||||
|
|
||||||
- name: Install nsis
|
- name: Install nsis
|
||||||
if: runner.os == 'Windows' && !vars.SELF_HOSTED
|
if: runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||||
shell: pwsh
|
|
||||||
# The Chocolatey community feed intermittently 504s, and `choco install`
|
|
||||||
# exits 0 when package resolution fails that way. Unchecked, the job then
|
|
||||||
# builds for ~25 minutes before `cpack -G NSIS` reports a missing makensis.
|
|
||||||
# Retry the install and verify makensis itself, so a real failure stops here.
|
|
||||||
run: |
|
run: |
|
||||||
dir "C:/Program Files (x86)/Windows Kits/10/Include"
|
dir "C:/Program Files (x86)/Windows Kits/10/Include"
|
||||||
$nsisDir = Join-Path ${env:ProgramFiles(x86)} 'NSIS'
|
choco install nsis
|
||||||
$makensis = Join-Path $nsisDir 'makensis.exe'
|
|
||||||
for ($attempt = 1; $attempt -le 3 -and -not (Test-Path $makensis); $attempt++) {
|
|
||||||
if ($attempt -gt 1) { Start-Sleep -Seconds (15 * $attempt) }
|
|
||||||
Write-Host "::group::choco install nsis (attempt $attempt)"
|
|
||||||
choco install nsis --yes --no-progress
|
|
||||||
Write-Host "::endgroup::"
|
|
||||||
}
|
|
||||||
if (-not (Test-Path $makensis)) {
|
|
||||||
throw "NSIS install failed: $makensis not found after 3 attempts."
|
|
||||||
}
|
|
||||||
& $makensis /VERSION
|
|
||||||
$nsisDir | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8
|
|
||||||
|
|
||||||
- name: Build slicer Win
|
- name: Build slicer Win
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
|
|||||||
@@ -52,4 +52,5 @@ internal_docs/
|
|||||||
__pycache__/
|
__pycache__/
|
||||||
*.pyc
|
*.pyc
|
||||||
*.opc
|
*.opc
|
||||||
|
/.test/
|
||||||
docs/superpowers/
|
docs/superpowers/
|
||||||
@@ -0,0 +1,581 @@
|
|||||||
|
# Texture Displacement - Technical Notes
|
||||||
|
|
||||||
|
Branch: `feature/texture_displacement`. Reference for the feature as it stands: what it does, how the
|
||||||
|
algorithms work, and where the code lives.
|
||||||
|
|
||||||
|
## What it does
|
||||||
|
|
||||||
|
A paint-style gizmo (`GLGizmoTextureDisplacement`) that lets you:
|
||||||
|
- Paint one or more "layers" onto a model's surface, each a height-map texture with its own
|
||||||
|
depth/tiling/rotation/offset/invert/tile-mode/projection-mode/blend-mode.
|
||||||
|
- Pick a texture from a shipped library (`resources/textures/displacement/`) or import your own
|
||||||
|
(saved into `<data_dir>/textures/displacement/`, kept separate so app updates can't clobber it).
|
||||||
|
- Combine overlapping layers with image-editor-style blend modes (Add/Subtract/Multiply/Divide).
|
||||||
|
- Preview the true displaced result live, before baking (background job, not on the UI thread).
|
||||||
|
- Preview via a fast GPU shader instead (no real geometry movement) for a lighter-weight alternative.
|
||||||
|
- Bake into real mesh geometry on demand, restricted to the painted area only.
|
||||||
|
- Remesh and subdivide so a low-poly model has enough vertices to show fine detail.
|
||||||
|
- Unwrap a painted patch with a real CGAL LSCM parameterization and view it in a dedicated,
|
||||||
|
dockable 2D "UV Editor" pane.
|
||||||
|
|
||||||
|
## Standard vs Pro mode
|
||||||
|
|
||||||
|
A two-position slider in the panel header, right of the Dock/Undock button.
|
||||||
|
|
||||||
|
**Pro** shows every mesh-preparation control; Remesh, Subdivide and Bake are run separately by the user,
|
||||||
|
in whatever order they like.
|
||||||
|
|
||||||
|
**Standard** hides all of it and folds one fixed recipe into the Bake button, because a height map only
|
||||||
|
ever *moves vertices that already exist* - painting onto an imported 12-triangle box and pressing Bake
|
||||||
|
would otherwise do nothing visible. Standard's Bake is:
|
||||||
|
|
||||||
|
1. `plan_remesh()` + `replace_mesh_keep_all_paint()` - isotropic remesh to 1 mm, sharp edges above 40
|
||||||
|
degrees protected. Gives the subdivider an even starting density whatever the input looked like.
|
||||||
|
2. `plan_adaptive_subdivision()` + `apply_adaptive_subdivision()` - feature-adaptive refinement, max
|
||||||
|
edge 20 mm, detail 0.02 mm, min edge 0.02 mm.
|
||||||
|
3. `bake()` - the ordinary background displacement job.
|
||||||
|
|
||||||
|
Both preparation stages are *planned* before the undo snapshot and *applied* after it, so a stage with
|
||||||
|
nothing to do is skipped without leaving an empty undo step. The standalone Pro buttons share the same
|
||||||
|
plan/apply split.
|
||||||
|
|
||||||
|
**All three stages sit under one undo step.** `Plater::take_snapshot()` records the state *before* the
|
||||||
|
change, so a single snapshot taken at the top of `bake_standard()` means one Undo returns the mesh to
|
||||||
|
exactly what was imported. `TextureDisplacementBakeInput::take_snapshot` lets the caller say who owns
|
||||||
|
the undo step - true for the Pro-mode button, false for the pipeline, whose background job commits long
|
||||||
|
after that snapshot's scope has closed.
|
||||||
|
|
||||||
|
The presets live in one place (`STD_*` constants) and `apply_standard_mode_presets()` pins the hidden
|
||||||
|
controls to them every frame while Standard is active, so the live preview cannot disagree with what
|
||||||
|
Bake will do. Switching to Standard also closes the subdivision preview, whose controls have just gone.
|
||||||
|
|
||||||
|
One control survives into Standard: **"Added triangles (k)"**, the subdivision budget. It is deliberately
|
||||||
|
*not* pinned - pinning would fight the user's own slider every frame - because unlike the rest of the
|
||||||
|
recipe its right value depends on the part rather than on the method (a big model, or a fine texture,
|
||||||
|
simply needs more triangles). Default 1500. The widget is one lambda shared by both layouts.
|
||||||
|
|
||||||
|
Standard remeshes *after* painting, so the remesh has to preserve paint: `ModelVolume::restore_painting()`
|
||||||
|
only remaps the four standard channels, so `replace_mesh_keep_all_paint()` additionally runs
|
||||||
|
`TriangleSelector::remap_painting()` over the eight texture-displacement masks. The Pro Remesh button
|
||||||
|
goes through the same helper. If the remap comes back empty the pipeline stops with a message rather
|
||||||
|
than baking a flat mesh.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
### Data model (per `ModelVolume`)
|
||||||
|
|
||||||
|
Each of up to `TEXTURE_DISPLACEMENT_MAX_LAYERS` (8) layers gets its **own independent
|
||||||
|
`FacetsAnnotation`** paint mask - the same `TriangleSelector`/`FacetsAnnotation` machinery every other
|
||||||
|
paint gizmo (FdmSupports, Seam, MMU, FuzzySkin) already uses, just one full instance per layer slot
|
||||||
|
instead of one per volume. This is what makes layered/blended painting work for free: the same triangle
|
||||||
|
can be `ENFORCER` in layer 2's mask and layer 5's mask simultaneously, and at bake/preview time each
|
||||||
|
layer displaces the surface left by the previous one (image-editor-layer semantics).
|
||||||
|
|
||||||
|
Whole-stack settings (border handling, post-process smoothing) live beside the layers in
|
||||||
|
`texture_displacement_options` (`TextureDisplacementOptions`), since they belong to no single layer.
|
||||||
|
|
||||||
|
### Bake algorithm (`libslic3r/TextureDisplacement.cpp`)
|
||||||
|
|
||||||
|
`build_texture_displacement(base_mesh, layers, facets_data, options)` is **accumulate-then-displace,
|
||||||
|
and topology-preserving**: the returned mesh has exactly the input's vertices and triangles, in the
|
||||||
|
same order - only the positions of displaced vertices differ.
|
||||||
|
|
||||||
|
1. `its_compactify_vertices()` on a copy of the input. In practice a no-op (it only drops
|
||||||
|
*unreferenced* vertices, and preserves the order and indices of the rest). It is there to
|
||||||
|
guarantee the index alignment step 3 depends on.
|
||||||
|
2. Area-weighted vertex normals of the **undisplaced** mesh, computed once. Every layer both projects
|
||||||
|
and displaces along these, so a vertex covered by several layers moves along one single well-defined
|
||||||
|
direction. Where the paint does *not* cover every triangle around a vertex, the normal is recomputed
|
||||||
|
from the painted triangles alone (the union over all layers, so it stays one direction per vertex):
|
||||||
|
on the rim of a fully painted top face the whole-mesh normal is the 45-degree bisector it shares with
|
||||||
|
the side wall, and displacing along that flares the rim outwards instead of raising it. Interior
|
||||||
|
vertices are unaffected - all their triangles are painted, so the two normals coincide. Paint
|
||||||
|
coverage per original triangle comes straight off `TriangleSplittingData::triangles_to_split`.
|
||||||
|
3. For each layer in slot order: deserialize its stored paint mask into a `TriangleSelector` against
|
||||||
|
the **base mesh** (never against a previous layer's output), then
|
||||||
|
`selector.get_facets_strict(ENFORCER)` → the painted patch. Two facts are exploited:
|
||||||
|
- `get_facets_strict()` returns the mesh's **entire** referenced vertex array regardless of which
|
||||||
|
state was asked for - only `.indices` is filtered by state. So `get_facets_strict(ENFORCER)`
|
||||||
|
and `get_facets_strict(NONE)` share identical vertex indexing, which is what lets boundary
|
||||||
|
detection be a plain index check instead of a position-hash lookup.
|
||||||
|
- The selector's vertex array *starts with* the mesh's own vertices (extra ones created where a
|
||||||
|
brush stroke split a triangle are appended after them), and `get_facets_strict()` emits the
|
||||||
|
referenced ones in order. Combined with step 1, **selector vertex index `i` is our vertex `i`**.
|
||||||
|
Split vertices live past the end of our array and are simply skipped - they sit on the paint
|
||||||
|
boundary anyway (splitting only happens at partial coverage).
|
||||||
|
4. A vertex used by at least one **unpainted** triangle is a border vertex. Whether it moves is
|
||||||
|
`TextureDisplacementOptions::displace_border`, and it does by default. Nothing can tear: the bake is
|
||||||
|
topology-preserving, so a border vertex is *one* vertex shared by both regions and moving it simply
|
||||||
|
tilts the unpainted triangles that use it. Pinning it instead clamps the outermost ring of relief to
|
||||||
|
zero, which on a fully painted face collapses the pattern into a ring of steep ramps at the edge; it
|
||||||
|
is kept as an option for when the relief must not spill past the paint at all. Either way the border
|
||||||
|
drives the `edge_smoothing` falloff.
|
||||||
|
5. Per interior vertex: sample the height texture (`sample_layer_height()`, see Projection methods)
|
||||||
|
and fold `height * depth_mm * (invert ? -1 : 1)` into that vertex's running total via the layer's
|
||||||
|
`TextureBlendMode` (see Blend modes). A `visited` set makes each layer fold in exactly **once**
|
||||||
|
per vertex, no matter how many of the patch's triangles share it - otherwise a Multiply/Subtract
|
||||||
|
layer would apply two or three times over depending on local triangle fan-out.
|
||||||
|
6. Move each touched vertex along its (step 2) normal by its accumulated total.
|
||||||
|
7. Optionally (`TextureDisplacementOptions::smooth_*`) relax the result - see Post-process smoothing.
|
||||||
|
|
||||||
|
### Post-process smoothing
|
||||||
|
|
||||||
|
`smooth_mesh_vertices(mesh, movable, strength, iterations)` - Laplacian relaxation, run after all layers
|
||||||
|
have been folded in, restricted to the vertices flagged in `movable`. Each pass moves a movable vertex a
|
||||||
|
`strength` fraction of the way to the average of its one-ring, read from a **snapshot** of the previous
|
||||||
|
pass so the result does not depend on vertex order (a Gauss-Seidel sweep would smooth several times as
|
||||||
|
hard at the end of the array as at the start). Neighbours come from a CSR-style adjacency built once per
|
||||||
|
call. Topology-preserving, like the bake.
|
||||||
|
|
||||||
|
Its job is to round off the hard steps a bitmap height map leaves behind - a different knob from
|
||||||
|
`TextureDisplacementLayer::smoothing`, which blurs the *height map* before it is ever sampled.
|
||||||
|
|
||||||
|
Two ways in, sharing one set of settings on the volume:
|
||||||
|
- The **"Smooth result"** checkbox + "Smoothing (%)" / "Passes" ride along with Preview and Bake.
|
||||||
|
`movable` is exactly the set of vertices the displacement moved, so the untouched part of the model
|
||||||
|
keeps its exact geometry and the ring just outside the displaced set anchors the relaxation (the
|
||||||
|
relief cannot creep outward).
|
||||||
|
- **"Smooth baked mesh now"** (`GLGizmoTextureDisplacement::smooth_model()`) applies the same settings to
|
||||||
|
the volume's *committed* geometry, for relief that is already baked in. `movable` there is the painted
|
||||||
|
triangles' vertices. Because smoothing never touches the triangle list, this is the one geometry
|
||||||
|
operation in the gizmo that keeps **every** paint channel verbatim - it saves and restores the eight
|
||||||
|
texture-displacement masks around `set_mesh()` rather than remapping or dropping them.
|
||||||
|
|
||||||
|
**"Ignore outer ring"** (`smooth_skip_border`, on by default) drops the patch's own outermost ring of
|
||||||
|
vertices from `movable`. That ring's neighbours *outside* the paint never move, so relaxing it drags the
|
||||||
|
rim of the relief down toward the flat surface and the pattern comes out half-melted where it meets the
|
||||||
|
edge. Held out, the border keeps the full depth the texture asked for and only the interior relaxes.
|
||||||
|
Turning it off softens the outer edge deliberately (a blunter version of the per-layer edge-smoothing
|
||||||
|
falloff). This is the *smoothing* rim, independent of whether that rim is displaced at all
|
||||||
|
(`displace_border`, step 4 above); both default to keeping the border sharp.
|
||||||
|
|
||||||
|
### Blend modes
|
||||||
|
|
||||||
|
`TextureBlendMode` {Add, Subtract, Multiply, Divide}, per layer, applied per vertex against the
|
||||||
|
total accumulated by the layers **below** it (lower slots). The quantity blended is a signed
|
||||||
|
displacement in **mm**, not a pixel value.
|
||||||
|
|
||||||
|
Add/Subtract are self-explanatory. Multiply/Divide are *scaling* operations and so need a unit
|
||||||
|
convention: they treat the layer's own value as a **factor relative to 1 mm**. That makes `depth_mm`
|
||||||
|
a gain, and - the property that makes a Multiply layer usable as a mask - a layer with depth 1 mm
|
||||||
|
sampling a white (1.0) texel multiplies by exactly 1, i.e. leaves the layers below unchanged.
|
||||||
|
Divide floors its divisor's magnitude at 0.05: a black texel samples to *exactly* zero, so the divisor
|
||||||
|
really does hit zero in ordinary use, and an unbounded `1/0` would fling vertices thousands of mm away
|
||||||
|
and poison the mesh's bounding box (and every plate/print-volume check downstream). The floor doubles as
|
||||||
|
a cap on how far Divide can amplify the relief beneath it: at most 20×.
|
||||||
|
|
||||||
|
The **lowest painted layer ignores its blend mode**: it has nothing beneath it, and Multiply/Divide
|
||||||
|
against an implicit zero base would annihilate (or blow up) it. Enforced in
|
||||||
|
`build_texture_displacement()` (the first layer to reach a given vertex always folds in additively) and
|
||||||
|
surfaced in the UI, which labels that layer "Base layer" instead of offering a control that does nothing.
|
||||||
|
|
||||||
|
### Projection methods
|
||||||
|
|
||||||
|
Five choices per layer (`TextureProjectionMethod`), all funneling through `apply_uv_transform()`
|
||||||
|
(scale by `1/tiling_scale`, rotate by `rotation_deg`, add `offset`). They are dispatched by
|
||||||
|
`sample_layer_height()`, which returns a **height**, not a UV - because Triplanar takes three
|
||||||
|
texture samples per vertex and so has no single UV that represents it.
|
||||||
|
|
||||||
|
- **Triplanar** (default) - samples the texture on all three world planes (`(y,z)`, `(x,z)`, `(x,y)`)
|
||||||
|
and blends the three by the vertex's own normal raised to `TRIPLANAR_BLEND_SHARPNESS` (4). Hard-picking
|
||||||
|
the single axis most aligned with the normal instead is discontinuous wherever that dominant axis
|
||||||
|
flips: on a +X face the planar coordinate is `(y, z)`, on a −Y face it is `(x, z)`, so at the shared
|
||||||
|
edge `u` jumps. A weighted blend is continuous across the transition by construction, since the weight
|
||||||
|
of the axis being left behind falls smoothly to zero. This removes the hard *seam*; some cross-fade
|
||||||
|
blurring in the band right at a 90° edge is inherent to triplanar mapping. A genuinely seam-free wrap
|
||||||
|
around a box needs a real unwrap - that is what the LSCM mode is for.
|
||||||
|
- **Cylindrical** - wraps around an axis through the patch centroid, axis auto-picked as the world
|
||||||
|
axis *least* aligned with the average normal (perpendicular to the outward radial normal, as a
|
||||||
|
cylinder's own axis would be). `u = angle * local_radius` (arc length in mm), `v = distance along
|
||||||
|
axis`. An approximation, not an exact fit for arbitrary geometry, and the axis/centre are not
|
||||||
|
user-overridable.
|
||||||
|
- **Spherical** - longitude/latitude around the centroid, scaled by local radius. Same caveat.
|
||||||
|
- **LSCM** - real UV unwrap via `MeshBoolean::cgal::parameterize_lscm()` (CGAL's
|
||||||
|
`Surface_mesh_parameterization` package, LSCM algorithm). Computed **once per patch** (not
|
||||||
|
per-vertex like the others - it's a single global least-squares solve), then each vertex looks up
|
||||||
|
its precomputed UV. Requires the patch to be a single topological disk (one connected component,
|
||||||
|
one boundary loop) - `compute_lscm_uvs()` returns empty and the layer falls back to Triplanar if not
|
||||||
|
(e.g. multiple disconnected painted islands, or a fully closed patch). CGAL's parameterizer needs a
|
||||||
|
mesh with no isolated/unreferenced vertices, but `get_facets_strict()` returns the *whole* mesh's
|
||||||
|
vertex array - so `compact_patch_with_map()` builds a clean sub-mesh plus an index map back to the
|
||||||
|
original vertex numbering, purely local to this file.
|
||||||
|
- **ViewProjected** ("From view") - a flat projection along a fixed direction captured from the 3D
|
||||||
|
camera, like a slide projector. `capture_view_projection()` takes the camera's right/up axes,
|
||||||
|
transforms them into the volume's *local* frame (so the projection rides along if the part is later
|
||||||
|
moved), and stores them as `TextureDisplacementLayer::view_project_right/up` (unit vectors, so the
|
||||||
|
projected coordinate stays in mm and `tiling_scale` keeps meaning mm). `sample_layer_height()`
|
||||||
|
projects `Vec2f(dot(pos, right), dot(pos, up))`. Single-valued per point, so - like LSCM but unlike
|
||||||
|
blended Triplanar - the fast preview and UV-check overlay precompute it per vertex
|
||||||
|
(`compute_layer_vertex_uvs()`) and drive the shader's `use_vertex_uv` path. Faces angled away from
|
||||||
|
the projector smear; that is inherent to view projection.
|
||||||
|
|
||||||
|
Two companions to this mode:
|
||||||
|
- **Projection frame overlay** (`TextureProjectorFrame`, see below) - a semi-transparent window
|
||||||
|
dragged over the 3D view whose border becomes the projection's edge. Applying it stores an exact
|
||||||
|
**projective** map in `view_project_matrix`, which supersedes the affine `right`/`up` axes above
|
||||||
|
for that layer (`view_project_projective`).
|
||||||
|
- **"Project only on visible"** (`select_visible_faces()`) - repaints the layer with exactly the
|
||||||
|
facets the camera can see, so the projected area matches the viewpoint the projector was captured
|
||||||
|
from. Two tests: a facing test (normal vs. view direction, per triangle - under perspective the
|
||||||
|
view direction varies across the model, so it is taken from the eye to each centroid), then
|
||||||
|
`MeshRaycaster::get_unobscured_idxs()` on the survivors to drop facets hidden behind other
|
||||||
|
geometry, so a concave part's far inner wall is correctly excluded. One ray query per front-facing
|
||||||
|
facet, hence click-driven (on the checkbox and on each "Capture current view"), never per frame.
|
||||||
|
It **replaces** the layer's paint rather than adding to it - "project onto what I can see" would
|
||||||
|
otherwise accumulate every angle the user had ever looked from.
|
||||||
|
|
||||||
|
### Manual seams and island cutting
|
||||||
|
|
||||||
|
`TextureDisplacementLayer::lscm_seam_edges` - undirected mesh-vertex-index edge pairs the unwrap is
|
||||||
|
forced to cut along, on top of the dihedral-angle seams. `segment_into_charts()` takes a set of these
|
||||||
|
(translated from mesh → compacted-patch numbering inside `compute_patch_unwrap()`) and refuses to
|
||||||
|
union two triangles across a marked edge whatever their angle. Both the unwrap cache key and the
|
||||||
|
gizmo's `UVEditorState` include the seam list, so marking a seam (which leaves the paint mask
|
||||||
|
untouched) still forces a re-solve. Like the paint masks, seams are mesh-index-space and so dropped on
|
||||||
|
any topology change.
|
||||||
|
|
||||||
|
Two ways to write to it:
|
||||||
|
- **Mark seam (manual)** - a "Mark seams" click mode (`m_seam_edit_mode`) that suppresses painting. A
|
||||||
|
click raycasts the volume (`m_c->raycaster()->raycasters()[idx]->unproject_on_mesh()`, `idx` = the
|
||||||
|
volume's slot among model-part volumes), finds the facet's edge nearest the hit point, and toggles it.
|
||||||
|
Marked edges render as a red overlay (`render_seam_overlay()`), pulled toward the camera so they read
|
||||||
|
on top. This is the Blender mark-seam workflow.
|
||||||
|
- **Cut island (auto)** - `cut_island()` takes the selected chart's triangles (back-mapped from the
|
||||||
|
unwrap via `source_vertex`), finds their 3D bounding box, and marks every edge that straddles the
|
||||||
|
mid-plane perpendicular to the longest axis. The re-unwrap then splits the chart across its narrow
|
||||||
|
waist. Exposed as the UV pane's **Cut** button.
|
||||||
|
|
||||||
|
### UV-check overlays (checker / distortion)
|
||||||
|
|
||||||
|
`resources/shaders/{110,140}/texture_displacement_uvcheck.{vs,fs}`, one shader with a `mode` uniform,
|
||||||
|
drawn over the painted patch (`rebuild_uvcheck_mesh()`/`render_uvcheck_mesh()`, P3N3T2: `normal.x` =
|
||||||
|
distortion, `tex_coord` = uv), pulled forward with a polygon offset. **Checker** samples a procedural
|
||||||
|
checkerboard at the layer's uv (per-vertex for LSCM/ViewProjected, in-shader triplanar otherwise) -
|
||||||
|
squares that stay square mean low distortion. **Distortion** colours each triangle blue→green→red by
|
||||||
|
`log2(uv_area / surface_area)` centred on the patch's *median* stretch (so a globally-scaled unwrap
|
||||||
|
reads as uniformly ideal and only relative stretch shows), averaged to vertices. A separate **Show mesh
|
||||||
|
wireframe** toggle draws the whole volume's triangle edges, rebuilt only when the vertex count changes
|
||||||
|
(not per stroke).
|
||||||
|
|
||||||
|
### Tiling
|
||||||
|
|
||||||
|
`DecodedHeightTexture::sample(uv, tile_enabled, tile_method)`. Two tile methods when enabled
|
||||||
|
(Repeat, MirroredRepeat). **When `tile_enabled` is false, sampling outside `[0,1)` returns `0`
|
||||||
|
directly** rather than clamping the *coordinate* into range, which would smear the border row/column of
|
||||||
|
pixels outward to infinity in every direction (streaky lines radiating out from the painted patch).
|
||||||
|
|
||||||
|
### Subdivision — two modes
|
||||||
|
|
||||||
|
**Uniform (`subdivide_mesh_uniform()`)** — whole-mesh, 1-to-4 split. Recursive edge-midpoint split with
|
||||||
|
a shared per-pass midpoint cache (keyed by sorted vertex-index pair) so triangles sharing an edge get
|
||||||
|
the *same* new vertex - capped at `max_iterations` (default 6). Whole-mesh so it never leaves a
|
||||||
|
T-junction, at the cost of densifying everywhere. Wired as a "Subdivide steps" slider (**0–5**, 0 =
|
||||||
|
no subdivision), Apply snaps back to 0. Drops texture-displacement paint (no remap) via the standard
|
||||||
|
`save_painting()`/`set_mesh()`/`restore_painting()` dance; the other four channels are remapped.
|
||||||
|
|
||||||
|
**Adaptive (`subdivide_mesh_adaptive()`)** — refine **only the painted area**, by **Rivara longest-edge
|
||||||
|
bisection**, which is *conformal by construction*. Only **terminal** edges are ever bisected - an edge
|
||||||
|
that is the longest edge of *every* triangle sharing it - which splits both those triangles along one
|
||||||
|
shared midpoint at once, so a hanging node is never created. The edge to split for a triangle that wants
|
||||||
|
refining is found by **longest-edge propagation (LEPP)**: walk to the longest edge of ever-longer-edged
|
||||||
|
neighbours until a terminal one is reached, and bisect that. Edge length strictly increases along the
|
||||||
|
path (ties broken by mesh-vertex key, which both sides of an edge compute identically), so the walk
|
||||||
|
cannot cycle, and Rivara's result is that repeating it refines the original triangle in a bounded number
|
||||||
|
of bisections. The transition triangles it pulls in just outside the painted patch are the graded band
|
||||||
|
that makes the size change conformal.
|
||||||
|
|
||||||
|
The win: a small decal on a big model no longer quadruples the *whole* model's triangle count.
|
||||||
|
|
||||||
|
**Run to completion, worst-first, against a triangle budget.** The refinement loop is not a fixed number
|
||||||
|
of sweeps: it holds every triangle that is over its criteria in a max-heap keyed by *how many times over*
|
||||||
|
it is, pops the worst, walks its LEPP, bisects, and re-scores. Edge adjacency (`nb[e]`, the triangle
|
||||||
|
across each edge) is built **once** and maintained incrementally through each bisection, so the cost
|
||||||
|
scales with the refined region rather than with the whole model. `max_triangles` is the only bound;
|
||||||
|
stopping on it leaves a perfectly valid, still-conformal mesh that spent its budget on the largest
|
||||||
|
errors. A fixed sweep count instead spends itself grading the *coarse surroundings* - whose edges are
|
||||||
|
the longest, so they win every terminal-edge contest - and never reaches the painted patch.
|
||||||
|
|
||||||
|
**It carries the paint forward**, which is what makes it usable (uniform subdivide drops paint). Because
|
||||||
|
the refinement is *driven by* the paint, the remap is trivial: `subdivide_mesh_adaptive()` fills an
|
||||||
|
`out_source[new_tri] = input_tri` map (children inherit their parent), and the gizmo rebuilds each
|
||||||
|
layer's mask on the new mesh - a new triangle is painted iff its source was fully painted in that
|
||||||
|
layer. `collect_paint_region()` derives both:
|
||||||
|
- the union refine-region: **exactly** the original triangles the brush touched, read straight off
|
||||||
|
`TriangleSplittingData::triangles_to_split` (`serialize()` records an entry per original triangle that
|
||||||
|
is either split - i.e. partially painted, the patch boundary - or carries a non-default state). No
|
||||||
|
dilation: marking every triangle that shares a *vertex* with the patch drags in a whole fan of huge
|
||||||
|
unpainted neighbours and refines *those* down to the resolution floor, since the height field the
|
||||||
|
detail test samples is not restricted to the painted area. The conformal closure already grades the
|
||||||
|
size change outward on its own.
|
||||||
|
- the per-layer fully-painted-triangle sets (a `get_facets_strict(ENFORCER)` sub-triangle with all three
|
||||||
|
*original* vertex indices == a whole, fully-painted original triangle; a partial stroke's sub-triangles
|
||||||
|
always carry a split vertex).
|
||||||
|
|
||||||
|
The other four channels ride the normal `restore_painting()` remap.
|
||||||
|
|
||||||
|
Both modes share the gizmo's Preview/Apply/Done flow; the **"Only painted area (adaptive)"** checkbox
|
||||||
|
picks the mode, and the adaptive preview follows the paint live (`rebuild_preview()` refreshes the
|
||||||
|
wireframe while the subdivide preview is open in adaptive mode). The panel shows the previewed triangle
|
||||||
|
count.
|
||||||
|
|
||||||
|
**Feature-adaptive (follow texture detail).** A sub-mode of adaptive (the **"Follow texture detail"**
|
||||||
|
checkbox) that puts triangles where the *displaced surface actually bends*, not evenly. A flat region or
|
||||||
|
a linear **ramp** needs no extra vertices (linear interpolation is exact for a ramp); what needs them is
|
||||||
|
**curvature** - the *second* derivative, not the gradient. So the extra predicate is a **chord-error**
|
||||||
|
test: sample the combined displacement at the triangle's three edge midpoints *and its centroid*
|
||||||
|
(sampling the interior is what catches a bump sitting inside a triangle, the blind spot of an edge-only
|
||||||
|
test) and take the largest departure from the flat triangle's barycentric interpolation. Refine while
|
||||||
|
that exceeds `chord_tolerance_mm` ("Detail (mm)"). Zero chord error on a ramp ⇒ untouched; high on a
|
||||||
|
bump/ridge/noise ⇒ refined until captured. Same conformal machinery, so still crack-free. The
|
||||||
|
per-triangle error is cached and recomputed only for the children of a split.
|
||||||
|
|
||||||
|
Four knobs bracket it, and all four matter:
|
||||||
|
- **"Max edge (mm)"** (`target_edge_length_mm`) is a **baseline that applies in feature mode too**.
|
||||||
|
Without it the chord test aliases: a big triangle over a fine pattern can sample four points that all
|
||||||
|
land at similar heights, report no error, and stall before refinement ever starts. The baseline
|
||||||
|
guarantees a sampling density fine enough for the curvature test to see the texture at all.
|
||||||
|
- **"Detail (mm)"** is the chord tolerance above.
|
||||||
|
- **"Min edge (mm)"** is a hard floor under both, and is what guarantees termination across a sharp
|
||||||
|
texture *step*, where the error never falls however fine the mesh gets.
|
||||||
|
- **"Added triangles (k)"** is the budget, passed as `max_triangles` (the model's own triangle count plus
|
||||||
|
the slider, so the control still means something on an already-dense model).
|
||||||
|
|
||||||
|
The height field is `make_combined_displacement_sampler()` - it mirrors `build_texture_displacement()`'s
|
||||||
|
per-layer setup (decode, patch centroid, cylinder axis, blend order, "lowest layer folds additively")
|
||||||
|
but evaluated per point. Two deliberate simplifications, both erring toward *more* detail (safe -
|
||||||
|
over-refinement is never a crack): every sampleable layer is sampled at every point (no per-point paint
|
||||||
|
test), and edge-smoothing falloff is ignored. The first is *why* the refine region must not be dilated -
|
||||||
|
outside the paint the sampler still reports full relief. **LSCM layers are skipped** (no per-point UV); a
|
||||||
|
purely LSCM stack yields a null sampler and the code falls back to the length baseline alone. Per-vertex
|
||||||
|
heights are sampled lazily, so a small patch on a huge model never pays for the rest of it.
|
||||||
|
|
||||||
|
### Fast preview (GPU-only, no CPU meshing)
|
||||||
|
|
||||||
|
`resources/shaders/{110,140}/texture_displacement_bump.{vs,fs}`, registered as
|
||||||
|
`"texture_displacement_bump"`. Shades the *displaced* surface without moving geometry - active-layer
|
||||||
|
only, selected from the View row, and the default when the gizmo opens (`m_use_bump_preview = true`).
|
||||||
|
Vertex format is `GLModel::Geometry::EVertexLayout::P3N3T2`: `normal.x` carries the per-vertex paint
|
||||||
|
weight (0/1), `normal.y` flags the UV island currently being dragged, and `tex_coord` carries a
|
||||||
|
precomputed texture UV, so it can use `GLModel` normally instead of a hand-rolled VBO/VAO manager.
|
||||||
|
|
||||||
|
The mesh is **flat** (vertices not shared between triangles): every corner of a painted triangle gets
|
||||||
|
weight 1, every corner of an unpainted one weight 0. A coarse mesh needs that - one painted face of a raw
|
||||||
|
cube has no strictly-interior vertex, so per-vertex weighting would either bleed onto the neighbours or
|
||||||
|
vanish outright. Duplicating vertices costs no shading quality here because the shader takes its surface
|
||||||
|
normal from screen-space derivatives of position, not from a per-vertex normal.
|
||||||
|
|
||||||
|
**Both preview meshes work in the patch's vertex space, not the mesh's.** Those agree only until a
|
||||||
|
*brush* stroke splits a triangle: `get_facets_strict()` then appends the split vertices, so the patch
|
||||||
|
array is longer. `rebuild_bump_preview_mesh()` and `rebuild_uvcheck_mesh()` therefore index
|
||||||
|
`patch.vertices` throughout. The weight buffer is rebuilt at the same cadence as the true-displacement
|
||||||
|
preview (stroke-end/slider-release) but from the **live** `TriangleSelector` state, not the flushed model
|
||||||
|
facets, so it does not lag by a full model round-trip.
|
||||||
|
|
||||||
|
The perturbed normal is the analytic one for a height field `H = ±depth_mm · h(uv)` displaced along
|
||||||
|
`N` over any orthonormal surface tangent pair `T`/`B`:
|
||||||
|
|
||||||
|
N' = normalize(N − (dH/da)·T − (dH/db)·B), a = dot(p,T), b = dot(p,B)
|
||||||
|
|
||||||
|
The two slopes have to be genuine **mm-per-mm** derivatives for the preview's apparent depth to match
|
||||||
|
the bake's.
|
||||||
|
|
||||||
|
**Two projection paths (`use_vertex_uv` uniform):**
|
||||||
|
- **Triplanar (`use_vertex_uv = 0`)** - `uv` and the `T`/`B` axes are both derived in-shader from
|
||||||
|
the dominant normal component, mirroring `project_planar()`/`apply_uv_transform()`, and the slope is
|
||||||
|
formed analytically. `T`/`B` are the projection's axis-aligned pair, exact only when the face is
|
||||||
|
axis-aligned; the shader drops the along-normal component to keep the gradient in the surface. Here
|
||||||
|
one `uv` unit is exactly `tiling_scale` mm, so the `1/tiling_scale` gradient factor is right.
|
||||||
|
- **Precomputed UV (`use_vertex_uv = 1`, used for LSCM and ViewProjected)** - `uv` comes per-vertex from
|
||||||
|
the CPU (`compute_layer_vertex_uvs()`, so island placement + tiling/rotation/offset are already folded
|
||||||
|
in), and the perturbed normal is built with **Mikkelsen's method** ("Bump Mapping Unparametrized
|
||||||
|
Surfaces on the GPU"): the surface gradient taken directly from the screen-space derivatives of the
|
||||||
|
*sampled height* and position. **This makes no uv→mm scale assumption**, which is essential, because an
|
||||||
|
LSCM map is **conformal, not isometric**: it is globally area-scaled but the *local* mm-per-uv varies
|
||||||
|
across the chart, so a single global `1/tiling_scale` factor gets the apparent depth wrong. `dFdx(h)`
|
||||||
|
captures the true on-screen rate of change however the chart is stretched. This path is also what makes
|
||||||
|
the fast preview follow the UV editor: move an island and its uv - hence its shading - moves with it
|
||||||
|
(the mesh rebuilds on drag-end, `on_island_edited(finished)` → `rebuild_preview()` →
|
||||||
|
`rebuild_bump_preview_mesh()`). The branch is uniform and the paint weight gates by multiply, so the
|
||||||
|
texture derivatives stay well defined. A triangle straddling a seam has a discontinuous uv → the
|
||||||
|
`det≈0` guard skips it (a localised preview-only artifact, never in the bake).
|
||||||
|
|
||||||
|
**Parallax (triplanar path).** Perturbing the shading normal alone welds the pattern to the base surface:
|
||||||
|
it does not slide as the camera orbits, and does not get deeper as `depth_mm` grows. The triplanar path
|
||||||
|
therefore shades at the point the *displaced* surface would show at this pixel, found by **ray marching**
|
||||||
|
(parallax occlusion mapping). A point at ray parameter `s`, i.e. `P + V·s` (`P` the base point, `V` the
|
||||||
|
unit direction to the eye), sits at height `s·dot(V,n)` above the undisplaced surface. The displaced
|
||||||
|
surface lives in a shell between the extreme values of `amp·(h − midlevel)` - taken from both ends of
|
||||||
|
`h ∈ [0,1]`, so it holds for an inverted layer and a raised midlevel too, where the surface sits *below*
|
||||||
|
the undisplaced one. The march starts at the top of that shell, where the ray is outside the surface by
|
||||||
|
construction, and steps inward until the ray height drops below the sampled height. That crossing *is*
|
||||||
|
the visible point.
|
||||||
|
|
||||||
|
Solving `Q = P + V·(H(Q)/dot(V,n))` by fixed-point iteration instead is geometrically exact but the
|
||||||
|
divisor goes to zero edge-on; the sample then lands a large fraction of a tile away and the iteration
|
||||||
|
oscillates, which reads as a second, flat copy of the pattern ghosted over the real one. Clamping the
|
||||||
|
step to one tile does not help - a tile-sized shift lands on the neighbouring tile, the same pattern
|
||||||
|
again. Offset limiting (stepping along the tangential part of `V`) is stable but understates parallax
|
||||||
|
enough that the relief still flattens as soon as the camera tilts. Marching has neither problem.
|
||||||
|
|
||||||
|
The hit is interpolated between the last two samples, which keeps `PARALLAX_STEPS` (24) affordable, and
|
||||||
|
the whole march is skipped when sweeping the shell would move the sample point less than half a texel -
|
||||||
|
the head-on case, so the common view pays almost nothing. The 140 variant samples with
|
||||||
|
`textureLod(…, 0.0)` inside the loop, since implicit derivatives are undefined in non-uniform control
|
||||||
|
flow. Two uniforms exist for this: `midlevel` (parallax needs the real height, not just its derivative)
|
||||||
|
and `eye_model_pos` (the camera in the volume's local frame).
|
||||||
|
|
||||||
|
Parallax cannot change the model's silhouette or cast shadows; the View row's Normal mode is one click
|
||||||
|
away for that. The LSCM path stays plain Mikkelsen bump - it has no closed-form uv, so there is no cheap
|
||||||
|
way to re-project a marched position. One further approximation: the GPU sampler's wrap mode stands in
|
||||||
|
for `tile_enabled`/`tile_method`, so with tiling *off* the GPU repeats where the CPU returns 0 outside
|
||||||
|
`[0,1)`.
|
||||||
|
|
||||||
|
### On-canvas "Adjust Texture" gizmo
|
||||||
|
|
||||||
|
A per-active-layer toggle ("Adjust placement") that disables painting and shows a flat pan panel (free
|
||||||
|
2D drag on both axes) plus two arrows along the patch's own U/V axes (constrained single-axis drag).
|
||||||
|
Anchored to the painted patch's centroid/average-normal (`compute_layer_paint_anchor()`). Hit-testing is
|
||||||
|
screen-space distance/point-to-segment, not real 3D ray intersection against the handle geometry - simple
|
||||||
|
and good enough at this handle size.
|
||||||
|
|
||||||
|
### Projection frame overlay (ViewProjected)
|
||||||
|
|
||||||
|
`src/slic3r/GUI/TextureProjectorFrame.hpp/.cpp` - a semi-transparent, resizable `wxFrame` the user
|
||||||
|
drags **over the 3D view**, like a slide projector's gate. Whatever the model shows through it is what
|
||||||
|
the texture is projected onto, and the window's border becomes the hard edge of the displacement.
|
||||||
|
Press **Apply projection frame** and the gizmo reads the window's rectangle and commits it.
|
||||||
|
|
||||||
|
The window is deliberately **dumb**: it owns no placement state and reports nothing continuously. Its
|
||||||
|
position and size *are* the placement, read on demand at Apply - which is also when the expensive
|
||||||
|
visible-facet raycast runs. So dragging it is free and nothing recomputes until asked.
|
||||||
|
|
||||||
|
Plain 2D (`wxPaintDC`), not a `wxGLCanvas`: a second GL canvas would have to share the app's one real
|
||||||
|
`wxGLContext`. It only ever draws a bitmap and a border.
|
||||||
|
|
||||||
|
**The projective mapping (`apply_projection_frame()`)**. The frame defines a **screen-space** rectangle,
|
||||||
|
but the bake samples from a **local-space** position, so the two have to be reconciled.
|
||||||
|
`view_project_right/up` can only express an *affine* projection - exact under an orthographic camera, but
|
||||||
|
wrong under perspective, where the near end of a part projects larger than the far end and no pair of
|
||||||
|
axes reproduces that. So the layer instead stores a full projective map (`view_project_matrix`, row-major
|
||||||
|
3×4, `uv = (row0·p̃/row2·p̃, row1·p̃/row2·p̃)`), built like this:
|
||||||
|
|
||||||
|
- `K = projection · view · (instance · volume)`, i.e. local → clip, the same product the renderer uses.
|
||||||
|
Note `Camera::get_projection_matrix()` is typed `Transform3d` (nominally affine) but its perspective
|
||||||
|
form explicitly writes a `(0, 0, −1, 0)` bottom row into the underlying 4×4, so `clip.w = −z_eye` is
|
||||||
|
genuinely carried. The build therefore multiplies **`.matrix()` products** (plain `Matrix4d`), never
|
||||||
|
`Transform3d` products, which would not compose that row correctly.
|
||||||
|
- Window coordinates follow `igl::project`'s convention (as `CameraUtils::project` does), with y
|
||||||
|
measured downward. Writing `uv = (win − rect_origin) / rect_size` makes u and v affine in
|
||||||
|
`ndc = clip.xyz / clip.w`; multiplying through by `clip.w` leaves a plain linear combination of `K`'s
|
||||||
|
rows, which is exactly the 3×4 matrix - the perspective divide survives intact.
|
||||||
|
- `w > 0` is checked rather than divided blindly. A point behind the projector has `w < 0` and divides
|
||||||
|
to a plausible-looking but **mirrored** uv - the classic way a projected decal reappears on the back
|
||||||
|
of a model. `project_uv_projective()` returns false there and the caller treats it as no height.
|
||||||
|
|
||||||
|
The map already includes placement, so `apply_uv_transform()` is **not** applied on top of it - the
|
||||||
|
window's own position and size are the placement, and the tiling/rotation/offset sliders would shove
|
||||||
|
the result off the frame the user just aligned. A "Clear" button drops back to the affine path where
|
||||||
|
those controls mean something again.
|
||||||
|
|
||||||
|
Apply also sets `tile_enabled = false`, so `DecodedHeightTexture::sample()` returns 0 outside `[0,1)`
|
||||||
|
and the border is a hard edge rather than the first seam of an endless repeat, and repaints the layer
|
||||||
|
via `select_visible_faces(&matrix)` - the frame's uv square clips the selection, which both matches the
|
||||||
|
paint to the border and keeps the ray queries proportional to the framed area instead of the model.
|
||||||
|
|
||||||
|
Owned by the gizmo and **destroyed** (not just hidden) in `on_shutdown()`. Closing it only hides it, so
|
||||||
|
reopening keeps it where it was left.
|
||||||
|
|
||||||
|
### UV Editor pane
|
||||||
|
|
||||||
|
`UVEditorCanvas` (`src/slic3r/GUI/UVEditorCanvas.hpp/.cpp`) - a standalone `wxGLCanvas` rendering the
|
||||||
|
flattened LSCM islands (per-island wireframe + outline + fill) over the height texture (background
|
||||||
|
quad tiled across the whole unwrap), with mouse pan/zoom. It is wrapped in a **`UVEditorPanel`**
|
||||||
|
(same file) that adds a button row (Frame / Snap / Avg scale / Cut / Join / Unjoin) and a status line
|
||||||
|
along the bottom naming the current gesture and the shortcuts in play. The *panel* is what is
|
||||||
|
registered as a `wxAuiPaneInfo` pane on `Plater`'s `m_aui_mgr`; `Plater::show_uv_editor(bool)`
|
||||||
|
shows/hides it (deferred via `CallAfter`, since the gizmo calls it mid-3D-frame), and
|
||||||
|
`get_uv_editor_canvas()` returns the inner canvas the gizmo talks to.
|
||||||
|
|
||||||
|
Deliberately **shares the app's one real `wxGLContext`** (`wxGetApp().init_glcontext(*this)`, the
|
||||||
|
same call `View3D`/`Preview`/`AssembleView` make) rather than creating an independent context like
|
||||||
|
`SkipPartCanvas` does elsewhere in this codebase - this is what lets it reuse the already-registered
|
||||||
|
`"flat"`/`"flat_texture"` shaders and `GLModel` as-is, instead of needing its own shader
|
||||||
|
compilation/VBO management.
|
||||||
|
|
||||||
|
**Geometry is uploaded once, in the unwrap's own (raw, mm) coordinates**, one `GLModel` set per island;
|
||||||
|
each island is then drawn through its own 2x3 affine (`island_transform_matrix()` composed with the
|
||||||
|
layer's tiling/rotation/offset) passed as the `flat` shader's `view_model_matrix`. A drag updates one
|
||||||
|
matrix per island and touches no vertex buffer - `on_island_edited(!finished)` calls only
|
||||||
|
`set_island_transforms()`, and the full `set_islands()` rebuild happens solely when the unwrap itself
|
||||||
|
changes (`unwrap_changed` in `update_uv_editor()`).
|
||||||
|
|
||||||
|
**Gestures** (canvas-owned, reported to the gizmo as incremental deltas via `IslandEditFn`): left-drag
|
||||||
|
= move, right-drag or **R** = rotate (hold **Shift** to snap to 15° steps - quantised on the
|
||||||
|
*cumulative* rotation, not each delta, so it doesn't judder, and accumulated incrementally so it
|
||||||
|
survives crossing ±180°), **S** = scale (R/S modal, click/Enter to confirm, Esc to cancel), wheel =
|
||||||
|
zoom about the cursor, middle-drag = pan, **Home**/**F** = frame all. Scale writes
|
||||||
|
`TextureIsland::scale`; "Avg scale" (`average_island_scales()`) sets every island to the mean, so
|
||||||
|
one island scaled by hand can be matched back to its neighbours' texel density. **Snap** (canvas-owned
|
||||||
|
`m_snap_enabled`, toggled from the toolbar) sticks a dragged island's nearest boundary vertex onto a
|
||||||
|
neighbouring island's at drag-*end* only - a magnet that re-applies mid-drag is very hard to pull out
|
||||||
|
of. Toolbar commands the canvas can't service itself (Avg scale, Cut, Join, Unjoin) are forwarded to the
|
||||||
|
gizmo via `CommandFn`; view-only ones (Frame, Snap) it handles directly.
|
||||||
|
|
||||||
|
## File map
|
||||||
|
|
||||||
|
**libslic3r (core, no GUI dependency):**
|
||||||
|
- `src/libslic3r/TextureDisplacement.hpp/.cpp` - data model, bake algorithm, projection methods,
|
||||||
|
tiling, subdivision (uniform + adaptive longest-edge bisection), post-process smoothing
|
||||||
|
(`smooth_mesh_vertices()`), and `TextureDisplacementOptions` (the whole-stack settings). See doc
|
||||||
|
comments throughout, they're kept accurate and up to date.
|
||||||
|
- `src/libslic3r/MeshBoolean.hpp/.cpp` - `parameterize_lscm()` and `remesh_isotropic()` in the `cgal`
|
||||||
|
sub-namespace, reusing the existing `CGALMesh`/`_EpicMesh`/conversion-helper infrastructure already
|
||||||
|
there for mesh boolean ops. CGAL includes: `Polygon_mesh_processing/border.h`,
|
||||||
|
`Polygon_mesh_processing/connected_components.h`, `Surface_mesh_parameterization/{Error_code,
|
||||||
|
LSCM_parameterizer_3, parameterize}.h`. No new dependency - CGAL 5.6.3 is already vendored and the
|
||||||
|
`Surface_mesh_parameterization` package headers were already present.
|
||||||
|
- `src/libslic3r/Model.hpp/.cpp` - the 8 named `FacetsAnnotation` fields + accessor,
|
||||||
|
`texture_displacement_layers`, `texture_displacement_options`, and all the mirrored touch points
|
||||||
|
(see Data model above).
|
||||||
|
|
||||||
|
**GUI:**
|
||||||
|
- `src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp/.cpp` - the gizmo and its whole panel.
|
||||||
|
- `src/slic3r/GUI/TextureLibrary.hpp/.cpp` - scans the shipped + user texture folders, imports an
|
||||||
|
arbitrary image into the user folder (converting it to the 8-bit grayscale PNG libslic3r decodes),
|
||||||
|
and loads a library file's bytes for a layer. The image→grayscale-PNG conversion lives here, on the
|
||||||
|
GUI side, because libslic3r has no image toolkit; both the import path and the "pick a shipped
|
||||||
|
texture" path go through the same one function.
|
||||||
|
- `resources/textures/displacement/*.png` - the 10 shipped height maps (Bricks, Grid, Hexagons,
|
||||||
|
Knurl, Noise, Quilt, Studs, Waves, Weave, Wood Grain). All 512×512 8-bit grayscale and **seamless**
|
||||||
|
(each is periodic over the full image in both axes, so tiling shows no seam). Generated
|
||||||
|
procedurally; the whole `resources/` tree is installed recursively by CMake, so a new folder under
|
||||||
|
it ships with no build-system change.
|
||||||
|
- `src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.hpp/.cpp` - background bake commit.
|
||||||
|
- `src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.hpp/.cpp` - background preview compute
|
||||||
|
(mirrors the bake job's shape but commits nothing to the Model).
|
||||||
|
- `src/slic3r/GUI/TextureProjectorFrame.hpp/.cpp` - the semi-transparent projection-frame overlay for
|
||||||
|
ViewProjected layers (plain 2D `wxPaintDC`, no GL context - see its section above).
|
||||||
|
- `src/slic3r/GUI/UVEditorCanvas.hpp/.cpp` - the 2D UV unwrap viewer widget.
|
||||||
|
- `src/slic3r/GUI/Plater.hpp/.cpp` - `uv_editor_canvas` member, AUI pane registration,
|
||||||
|
`get_uv_editor_canvas()`/`show_uv_editor()`.
|
||||||
|
- `src/slic3r/GUI/GLShadersManager.cpp` - registers `"texture_displacement_bump"`.
|
||||||
|
- `resources/shaders/{110,140}/texture_displacement_bump.{vs,fs}` - the fast-preview shader.
|
||||||
|
- `src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp` - `PainterGizmoType::TEXTURE_DISPLACEMENT`.
|
||||||
|
- `src/slic3r/GUI/Gizmos/GLGizmosManager.hpp/.cpp` - `EType::TextureDisplacement` registration.
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
|
||||||
|
`tests/libslic3r/test_texture_displacement.cpp`. Covers `decode_height_texture` round-trip, empty-layer
|
||||||
|
no-op, full-cube uniform displacement, a second layer over the same area contributing, all four blend
|
||||||
|
modes (table-driven), the lowest layer ignoring its blend mode, border displace/pin, post-process
|
||||||
|
smoothing and its mask guarantees, and adaptive subdivision: conformality (`every_edge_used_twice` on a
|
||||||
|
partially-refined cube - an exact crack detector for a closed mesh), the target edge length actually
|
||||||
|
being reached, the triangle budget capping the result without opening a crack, curvature-driven
|
||||||
|
refinement (a Gaussian bump refines at its centre, a linear ramp adds nothing), and the max-edge
|
||||||
|
baseline.
|
||||||
|
|
||||||
|
`BUILD_TESTS` is `OFF` in the checked-in build cache; flip it on to run them:
|
||||||
|
|
||||||
|
cmake -S . -B build -DBUILD_TESTS=ON
|
||||||
|
cmake --build build --config Release --target libslic3r_tests -- -m
|
||||||
|
./build/tests/libslic3r/Release/libslic3r_tests.exe "[TextureDisplacement]" --order rand
|
||||||
@@ -0,0 +1,326 @@
|
|||||||
|
# Texture Displacement — Feature & Controls Guide
|
||||||
|
|
||||||
|
Texture Displacement is a paint-style gizmo that stamps height-map textures onto a model's surface
|
||||||
|
and turns them into real relief — engraved or embossed detail — either as a live preview or baked
|
||||||
|
into actual mesh geometry. You paint where the texture applies, stack multiple textures as blended
|
||||||
|
layers, choose how each is projected onto the surface, and (for the unwrap projection) lay the result
|
||||||
|
out by hand in a dedicated 2D **UV Editor** pane.
|
||||||
|
|
||||||
|
This document describes every feature and control. For the internal architecture and algorithms, see
|
||||||
|
`TEXTURE_DISPLACEMENT.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of contents
|
||||||
|
|
||||||
|
1. [Quick start](#quick-start)
|
||||||
|
2. [Entering the tool](#entering-the-tool)
|
||||||
|
3. [Selection modes](#selection-modes)
|
||||||
|
4. [View modes](#view-modes)
|
||||||
|
5. [Auto update](#auto-update)
|
||||||
|
6. [Texture layers](#texture-layers)
|
||||||
|
7. [Per-layer settings](#per-layer-settings)
|
||||||
|
8. [Projection methods](#projection-methods)
|
||||||
|
9. [The UV Editor](#the-uv-editor)
|
||||||
|
10. [Seams](#seams)
|
||||||
|
11. [Adjust placement (on-model)](#adjust-placement-on-model)
|
||||||
|
12. [Preparing the mesh: Subdivide & Remesh](#preparing-the-mesh-subdivide--remesh)
|
||||||
|
13. [Baking & resetting](#baking--resetting)
|
||||||
|
14. [Controls reference](#controls-reference)
|
||||||
|
15. [Tips & limitations](#tips--limitations)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick start
|
||||||
|
|
||||||
|
1. Select an object and open the **Texture displacement** gizmo from the left toolbar.
|
||||||
|
2. A texture layer is added automatically. Pick a texture from the layer's picker, or import your own.
|
||||||
|
3. **Paint** the area you want the texture to affect (or press **Select whole model**).
|
||||||
|
4. The relief appears live on the model. Tune **Depth**, **Tile size**, **Rotation**, etc.
|
||||||
|
5. If the model is low-poly, use **Subdivide** or **Remesh** so there are enough vertices for detail.
|
||||||
|
6. Press **Bake** to convert the preview into real geometry, or leave it as a live preview.
|
||||||
|
|
||||||
|
> The tool only ever affects the **painted** area. Everything you don't paint keeps its original
|
||||||
|
> surface, and bake blends the relief seamlessly into it.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Entering the tool
|
||||||
|
|
||||||
|
The gizmo lives on the left gizmo toolbar (icon: `toolbar_texture_displacement.svg`). Its settings
|
||||||
|
panel opens beside the toolbar. You can **Dock panel / Undock panel** (top of the panel) to pin it or
|
||||||
|
float it freely over the 3D view, and **Close** at the bottom exits the gizmo.
|
||||||
|
|
||||||
|
When you first open the tool on a never-textured object it starts with **one texture layer already
|
||||||
|
added**, so you can paint straight away.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Selection modes
|
||||||
|
|
||||||
|
Choose *how* you paint. All three write into the **active layer's** mask.
|
||||||
|
|
||||||
|
| Mode | What it does |
|
||||||
|
|------|--------------|
|
||||||
|
| **Brush** | Free-hand painting with a round brush. Shows a **Brush size** slider and a **Circle / Sphere** choice (circle = surface disc, sphere = 3D ball that also paints around curves). |
|
||||||
|
| **Face** | Click a single triangle to paint it. |
|
||||||
|
| **Connected area** | Click to flood-fill a region; the **Angle threshold** slider limits how far the fill spreads across changes in surface angle. |
|
||||||
|
|
||||||
|
- **Select whole model** — marks the entire model as painted for the active layer, instead of
|
||||||
|
brushing it by hand.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## View modes
|
||||||
|
|
||||||
|
A row of icon buttons labelled **View** controls how the painted area is shown. The first four are a
|
||||||
|
radio group; **Wireframe** is an independent toggle. Hover any icon for its tooltip.
|
||||||
|
|
||||||
|
| View | Meaning |
|
||||||
|
|------|---------|
|
||||||
|
| **Normal** | The true displaced geometry — exactly what **Bake** produces. Rebuilt in the background. |
|
||||||
|
| **Fast** | A GPU bump-shaded approximation of the *active layer only*. No real geometry movement — quick to update, not exact. Best while tuning or dragging islands. |
|
||||||
|
| **Checker** | A test grid painted over the unwrap so you can see stretching (squares stay square where the map isn't distorted). |
|
||||||
|
| **Distortion** | A blue→green→red heatmap of how much each area is compressed or stretched in UV space. Needs the **Unwrap (LSCM)** projection. |
|
||||||
|
| **Wireframe** | Overlays the mesh edges (white). Independent of the view above; in **Normal** view it sits on the displaced surface. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Auto update
|
||||||
|
|
||||||
|
**Auto update** (on by default) rebuilds the true displaced geometry as soon as *anything* changes —
|
||||||
|
painting, swapping textures, moving sliders. Turn it off on very heavy models to only rebuild when you
|
||||||
|
release a slider (painting still updates on stroke end).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Texture layers
|
||||||
|
|
||||||
|
You can stack up to **8** texture layers. Each has its own independent paint mask, its own texture,
|
||||||
|
and its own parameters, and they combine in slot order like layers in an image editor.
|
||||||
|
|
||||||
|
- **Add a layer** — the **+ icon** to the right of the *Texture layers* heading (reuses the tool icon
|
||||||
|
for now).
|
||||||
|
- **Remove** — the button on each layer's header row.
|
||||||
|
- **Active layer** — click a layer's header (or anywhere in its block) to make it active. The active
|
||||||
|
layer is the one you paint into and the one whose block is tinted. Only one layer is active at a time.
|
||||||
|
- **Erase all** — clears the active layer's paint.
|
||||||
|
|
||||||
|
Each layer shows a texture **picker** (large preview + name). Open it to choose from the shipped
|
||||||
|
library or import your own image (any png/jpg/bmp; it's converted to an 8-bit grayscale height map and
|
||||||
|
copied into your user texture folder so app updates can't overwrite it).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Per-layer settings
|
||||||
|
|
||||||
|
| Control | Range / options | What it does |
|
||||||
|
|---------|-----------------|--------------|
|
||||||
|
| **Depth (mm)** | 0.01–10 (log) | Maximum displacement along the surface normal. |
|
||||||
|
| **Tile size (mm)** | 0.2–200 (log) | Physical size of one texture tile on the surface. |
|
||||||
|
| **Rotation** | 0–360° | Rotates the texture on the surface. |
|
||||||
|
| **Midlevel** | 0–10 | The grey level that means "don't move". At 0 the texture only pushes outward; raise it and darker texels cut *inward* (one map both embosses and engraves). 0.5 makes mid-grey neutral. |
|
||||||
|
| **Smoothing** | 0–1 | Blurs the height texture before it displaces — rounds hard edges and removes speckle without needing a softer source image. |
|
||||||
|
| **Edge smoothing** | checkbox + **Edge amount** 0–1 | Fades the relief to flat toward the *edge of the painted area*, so it blends into the surrounding surface. A small amount softens only a thin band at the very edge; the maximum flattens the whole painted face. |
|
||||||
|
| **Invert** | checkbox | Flips the height map (peaks become valleys). |
|
||||||
|
| **Blend** | Add / Subtract / Multiply / Divide | How this layer combines with the layers **below** it where they overlap. Add/Subtract pile relief on or carve it away; Multiply/Divide scale the relief underneath (a mask). The lowest painted layer is the **Base** and always behaves additively. |
|
||||||
|
| **Tile** | checkbox + **Repeat / Mirrored repeat** | When off, the texture is placed once (a decal) instead of repeating. Mirrored repeat flips every other tile to hide seams. |
|
||||||
|
| **Projection** | see below | How the texture is mapped onto the painted surface. |
|
||||||
|
|
||||||
|
> **Midlevel warning:** cutting inward can fold the surface through itself in sharp concave corners or
|
||||||
|
> thin walls. Keep Depth small relative to the feature you're cutting into; the panel warns when a deep
|
||||||
|
> inward setting is risky.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Projection methods
|
||||||
|
|
||||||
|
How the 2D texture is wrapped onto the 3D painted area.
|
||||||
|
|
||||||
|
| Method | Best for | Notes |
|
||||||
|
|--------|----------|-------|
|
||||||
|
| **Triplanar (blended)** | Patches wrapping around edges | Projects from all three axes at once and blends, so there's no seam across a sharp edge. |
|
||||||
|
| **Cylindrical** | Round, tube-like selections | Wraps the texture around the patch's own centre/axis. |
|
||||||
|
| **Spherical** | Ball-like selections | Longitude/latitude wrap around the patch centre. |
|
||||||
|
| **Unwrap (LSCM)** | Flat, controlled layout | A real conformal unwrap. Cuts the area into pieces at sharp edges (see **Seam angle**), flattens each, and lets you lay them out by hand in the **UV Editor**. Unlocks Checker/Distortion, seams, and island editing. |
|
||||||
|
| **From view** | Decals / slide-projector look | Projects straight onto the surface from the current camera direction. Use **Capture current view** to re-lay it from wherever you're looking. |
|
||||||
|
|
||||||
|
### LSCM-only controls
|
||||||
|
|
||||||
|
These appear when a layer uses **Unwrap (LSCM)**:
|
||||||
|
|
||||||
|
- **Seam angle** (5–90°) — edges sharper than this are cut so each piece lies flat. Lower cuts more
|
||||||
|
(less stretching, more seams); raise to keep more in one piece. A box's 90° corners are cut by
|
||||||
|
default. *Ignored once you've marked any seam by hand* (your seams then define the pieces).
|
||||||
|
- **Connect islands** (on by default) — lays the unwrap out as a **connected net**: pieces that share
|
||||||
|
an edge are unfolded next to each other (a cube becomes a joined net instead of six loose squares).
|
||||||
|
They stay separate islands, so you can still move any of them by hand. Turn off for the classic
|
||||||
|
packed-grid layout.
|
||||||
|
- **Open UV editor** — shows the flattened unwrap in a side pane (see below). Opens *only* when you
|
||||||
|
turn this on — it never pops up on its own.
|
||||||
|
- **Mark seams** / **Path** / **Clear seams** — see [Seams](#seams).
|
||||||
|
- An **Unwrap: N islands, F faces, V verts** read-out tells you what the unwrap actually produced.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## The UV Editor
|
||||||
|
|
||||||
|
A dockable 2D pane (enable **Open UV editor** on an LSCM layer) showing the flattened unwrap over the
|
||||||
|
height texture. Islands are the flattened pieces; you can rearrange them freely — nothing re-packs them
|
||||||
|
behind your back. Moving an island updates the model **live** (in Fast view it tracks the cursor
|
||||||
|
smoothly, via a shader uniform — no rebuild until you release).
|
||||||
|
|
||||||
|
### Navigation
|
||||||
|
|
||||||
|
| Action | Control |
|
||||||
|
|--------|---------|
|
||||||
|
| Pan | Middle-drag |
|
||||||
|
| Zoom | Mouse wheel (zooms about the cursor) |
|
||||||
|
| Frame everything | **Home** or **F**, or the **Frame** toolbar button |
|
||||||
|
|
||||||
|
### Editing an island
|
||||||
|
|
||||||
|
| Action | Control |
|
||||||
|
|--------|---------|
|
||||||
|
| Select | Left-click an island |
|
||||||
|
| Move | Left-drag |
|
||||||
|
| Rotate | Right-drag, or press **R** then move the mouse (click/Enter to confirm, Esc to cancel) |
|
||||||
|
| Rotate snapped | Hold **Shift** while rotating — snaps to **global** 15° marks (0/15/30…). A protractor dial with tick marks and the current angle is shown. |
|
||||||
|
| Scale | Press **S** then move the mouse (click/Enter to confirm, Esc to cancel) |
|
||||||
|
| Undo / Redo | **Ctrl+Z** / **Ctrl+Shift+Z** or **Ctrl+Y** |
|
||||||
|
|
||||||
|
The **selected** island gets a bold light-green outline and a brighter wireframe; unselected islands
|
||||||
|
are a translucent light-green wash. The texture underneath repeats exactly as it will when baked.
|
||||||
|
A **status line** along the bottom always names the current gesture and the shortcuts in play.
|
||||||
|
|
||||||
|
### Toolbar
|
||||||
|
|
||||||
|
| Button | Action |
|
||||||
|
|--------|--------|
|
||||||
|
| **Frame** | Frame all islands (same as Home). |
|
||||||
|
| **Snap** | Toggle magnetic snapping — a dragged island sticks its boundary to a neighbour's when they come close. |
|
||||||
|
| **Avg scale** | Give every island the same texel density (Blender's "Average Islands Scale"). |
|
||||||
|
| **Cut** | Split the selected island across its long axis (useful for very long islands). |
|
||||||
|
| **Join** | Unfold the selected island onto its nearest neighbour along their shared edge — keeps both as separate islands with their own borders. |
|
||||||
|
| **Unjoin** | Send the selected island back to its own packed position. |
|
||||||
|
|
||||||
|
> **Checker / Distortion in the UV editor:** selecting those View modes also colours the UV pane — a
|
||||||
|
> checker background, or a per-island distortion heatmap — so you can judge stretch in 2D as well as
|
||||||
|
> on the model.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Seams
|
||||||
|
|
||||||
|
Seams are edges the unwrap is forced to cut along, on top of whatever the Seam angle cuts — the
|
||||||
|
Blender "mark seam" workflow. They let you control exactly where the unwrap splits.
|
||||||
|
|
||||||
|
Enable **Mark seams** on an active LSCM layer, then:
|
||||||
|
|
||||||
|
- **Click an edge** on the model to mark it (it turns **red**); click a red edge again to unmark it.
|
||||||
|
The edge under the cursor is highlighted **yellow** so you can see what a click will toggle.
|
||||||
|
- **Path mode** (the **Path** checkbox) — for dense meshes where clicking each edge is tedious: click a
|
||||||
|
start point, then an end point, and the whole **shortest path** between them is seamed at once. It
|
||||||
|
chains (each click extends from the last point); the start vertex is shown in **green**.
|
||||||
|
- **Ctrl+drag** rotates/pans the camera while in seam mode.
|
||||||
|
- **Clear seams** removes them all.
|
||||||
|
|
||||||
|
Once any seam is marked, the automatic Seam-angle cutting is disabled so *your* seams define the
|
||||||
|
islands — pieces you leave un-seamed merge together.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Adjust placement (on-model)
|
||||||
|
|
||||||
|
**Adjust placement** (on an active layer) lets you position the texture by dragging a handle on the
|
||||||
|
model instead of nudging the Rotation/offset numbers. The handle is a flat panel in the patch's
|
||||||
|
tangent plane (drag anywhere on it to move freely) plus U/V arrows for single-axis nudges. It's
|
||||||
|
anchored to the painted patch, so paint something first.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Preparing the mesh: Subdivide & Remesh
|
||||||
|
|
||||||
|
Displacement can only move vertices that exist, so a coarse model needs more of them first.
|
||||||
|
|
||||||
|
### Subdivide
|
||||||
|
|
||||||
|
Splits every triangle into four, **1–5 times** (each step roughly quadruples the triangle count).
|
||||||
|
|
||||||
|
- **Subdivide steps** (1–5) — how many times to split.
|
||||||
|
- **Preview subdivision** — shows the result as a **cyan wireframe** without changing the model.
|
||||||
|
- **Apply** — commits the subdivision to the geometry.
|
||||||
|
- **Done** — ends the preview and leaves the model as it is.
|
||||||
|
|
||||||
|
### Remesh
|
||||||
|
|
||||||
|
Rebuilds the whole model with triangles close to a target edge length — evens out a mesh with wildly
|
||||||
|
varying triangle sizes (CGAL isotropic remeshing).
|
||||||
|
|
||||||
|
- **Target edge (mm)** — desired triangle edge length (seeded to the model's current average).
|
||||||
|
- **Remesh** — splits the big triangles and merges the small ones to that size.
|
||||||
|
|
||||||
|
> Both Subdivide-Apply and Remesh **replace the geometry** and clear any *not-yet-baked* paint on it
|
||||||
|
> (already-baked relief is kept). If you had the mesh **Wireframe** on before, it stays on afterward.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Baking & resetting
|
||||||
|
|
||||||
|
- **Bake** — converts the current preview into real, permanent mesh geometry, restricted to the
|
||||||
|
painted area. Runs in the background; the button shows *Baking…* while it works.
|
||||||
|
- **Erase all** — clears the active layer's paint.
|
||||||
|
|
||||||
|
Baking is the exact same algorithm as the **Normal** preview, so what you see is what you get.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Controls reference
|
||||||
|
|
||||||
|
### Mouse — 3D view (while painting)
|
||||||
|
|
||||||
|
| Input | Action |
|
||||||
|
|-------|--------|
|
||||||
|
| Left-drag | Paint the active layer |
|
||||||
|
| Ctrl + drag | Rotate / pan the camera (works in seam mode too) |
|
||||||
|
| Wheel | Zoom |
|
||||||
|
|
||||||
|
### Mouse & keys — UV Editor
|
||||||
|
|
||||||
|
| Input | Action |
|
||||||
|
|-------|--------|
|
||||||
|
| Left-click | Select island |
|
||||||
|
| Left-drag | Move island |
|
||||||
|
| Right-drag | Rotate island |
|
||||||
|
| **R** / **S** | Modal rotate / scale (mouse drives it, click or Enter confirms, Esc cancels) |
|
||||||
|
| **Shift** (while rotating) | Snap to global 15° marks |
|
||||||
|
| Middle-drag | Pan |
|
||||||
|
| Wheel | Zoom about cursor |
|
||||||
|
| **Home** / **F** | Frame all islands |
|
||||||
|
| **Ctrl+Z** / **Ctrl+Shift+Z** / **Ctrl+Y** | Undo / redo |
|
||||||
|
|
||||||
|
### Seam mode
|
||||||
|
|
||||||
|
| Input | Action |
|
||||||
|
|-------|--------|
|
||||||
|
| Click edge | Mark / unmark a seam (yellow = hover, red = marked) |
|
||||||
|
| Click (Path mode) | Set start, then seam the shortest path to the next click |
|
||||||
|
| Ctrl + drag | Rotate / pan camera |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tips & limitations
|
||||||
|
|
||||||
|
- **Paint first, then bake.** The preview is free to explore; only Bake changes the real mesh.
|
||||||
|
- **Not enough detail?** Subdivide or Remesh before painting fine textures.
|
||||||
|
- **Inward cuts** (high Midlevel + big Depth) can self-intersect on thin walls or sharp concave
|
||||||
|
corners — keep Depth modest there.
|
||||||
|
- **Fast vs Normal:** Fast preview shades a bump and shows only the active layer; use it for quick
|
||||||
|
tuning and smooth UV dragging, but trust **Normal**/**Bake** for the exact result.
|
||||||
|
- **Topology changes drop unbaked paint.** Subdivide-Apply, Remesh, and Simplify replace the mesh, and
|
||||||
|
texture-displacement paint isn't remapped across that change (already-baked relief is unaffected).
|
||||||
|
- **Island placements** are tied to the current unwrap. Re-painting or changing the Seam angle can
|
||||||
|
re-segment the charts and renumber them, so a re-unwrap re-lays the connected net and discards
|
||||||
|
hand placements made before it.
|
||||||
|
- **Connect islands** is on by default; turn it off (per layer) for the classic packed-grid layout, or
|
||||||
|
if an unfold looks wrong on an unusual mesh.
|
||||||
@@ -125,7 +125,6 @@ src/slic3r/GUI/ThermalPreconditioningDialog.hpp
|
|||||||
src/slic3r/GUI/Jobs/SLAImportJob.cpp
|
src/slic3r/GUI/Jobs/SLAImportJob.cpp
|
||||||
src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp
|
src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp
|
||||||
src/slic3r/GUI/AboutDialog.cpp
|
src/slic3r/GUI/AboutDialog.cpp
|
||||||
src/slic3r/GUI/ActionRegistry.cpp
|
|
||||||
src/slic3r/GUI/AMSMaterialsSetting.cpp
|
src/slic3r/GUI/AMSMaterialsSetting.cpp
|
||||||
src/slic3r/GUI/ExtrusionCalibration.cpp
|
src/slic3r/GUI/ExtrusionCalibration.cpp
|
||||||
src/slic3r/GUI/AmsMappingPopup.cpp
|
src/slic3r/GUI/AmsMappingPopup.cpp
|
||||||
@@ -160,7 +159,6 @@ src/slic3r/GUI/SelectMachinePop.cpp
|
|||||||
src/slic3r/GUI/StatusPanel.cpp
|
src/slic3r/GUI/StatusPanel.cpp
|
||||||
src/slic3r/GUI/Monitor.cpp
|
src/slic3r/GUI/Monitor.cpp
|
||||||
src/slic3r/GUI/MsgDialog.cpp
|
src/slic3r/GUI/MsgDialog.cpp
|
||||||
src/slic3r/GUI/NativeCommands.cpp
|
|
||||||
src/slic3r/GUI/NotificationManager.hpp
|
src/slic3r/GUI/NotificationManager.hpp
|
||||||
src/slic3r/GUI/NotificationManager.cpp
|
src/slic3r/GUI/NotificationManager.cpp
|
||||||
src/slic3r/GUI/ObjectDataViewModel.cpp
|
src/slic3r/GUI/ObjectDataViewModel.cpp
|
||||||
@@ -181,8 +179,6 @@ src/slic3r/GUI/PublishDialog.cpp
|
|||||||
src/slic3r/GUI/PublishSettingsDialog.cpp
|
src/slic3r/GUI/PublishSettingsDialog.cpp
|
||||||
src/slic3r/GUI/SavePresetDialog.cpp
|
src/slic3r/GUI/SavePresetDialog.cpp
|
||||||
src/slic3r/GUI/Search.cpp
|
src/slic3r/GUI/Search.cpp
|
||||||
src/slic3r/GUI/SettingsIndex.cpp
|
|
||||||
src/slic3r/GUI/SpeedDialDialog.cpp
|
|
||||||
src/slic3r/GUI/Selection.cpp
|
src/slic3r/GUI/Selection.cpp
|
||||||
src/slic3r/GUI/SelectMachine.cpp
|
src/slic3r/GUI/SelectMachine.cpp
|
||||||
src/slic3r/GUI/PrePrintChecker.cpp
|
src/slic3r/GUI/PrePrintChecker.cpp
|
||||||
@@ -250,7 +246,6 @@ src/slic3r/GUI/TroubleshootDialog.cpp
|
|||||||
src/slic3r/Utils/3DPrinterOS.cpp
|
src/slic3r/Utils/3DPrinterOS.cpp
|
||||||
src/slic3r/Utils/AstroBox.cpp
|
src/slic3r/Utils/AstroBox.cpp
|
||||||
src/slic3r/Utils/Duet.cpp
|
src/slic3r/Utils/Duet.cpp
|
||||||
src/slic3r/Utils/UltiMaker.cpp
|
|
||||||
src/slic3r/Utils/FlashAir.cpp
|
src/slic3r/Utils/FlashAir.cpp
|
||||||
src/slic3r/Utils/MKS.cpp
|
src/slic3r/Utils/MKS.cpp
|
||||||
src/slic3r/Utils/Moonraker.cpp
|
src/slic3r/Utils/Moonraker.cpp
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M14.5,1.5v12a1,1,0,0,1-1,1H1.5a1,1,0,0,1-1-1V1.5a1,1,0,0,1,1-1h12a1,1,0,0,1,1,1Z" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polyline points="4,5 6.5,7.5 4,10" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="8" y1="10" x2="11" y2="10" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 524 B |
@@ -1 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12"><path d="M11.5,5.5v5c0,.55-.45,1-1,1H1.5c-.55,0-1-.45-1-1V1.5C.5.95.95.5,1.5.5h5M3.5,6.5v2h2l5.59-5.59c.55-.55.55-1.45,0-2s-1.45-.55-2,0L3.5,6.5Z" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-linejoin:round;"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 340 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><circle cx="7.5" cy="7.5" r="7" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="7.5" y1="4" x2="7.5" y2="11" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="4" y1="7.5" x2="11" y2="7.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 431 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><circle cx="7.5" cy="7.5" r="7" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="4" y1="7.5" x2="11" y2="7.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 315 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="5.5" y="5.5" width="4" height="4" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M7.5 0.5v4M7.5 10.5v4M0.5 7.5h4M10.5 7.5h4M5.5 2.5l2-2 2 2M5.5 12.5l2 2 2-2M2.5 5.5l-2 2 2 2M12.5 5.5l2 2-2 2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 407 B |
@@ -0,0 +1,330 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40"
|
||||||
|
version="1.1"
|
||||||
|
id="svg17"
|
||||||
|
sodipodi:docname="texture_displacement_group.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xml:space="preserve"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs17"><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect30"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.2615305,0,1 @ F,0,0,1,0,1.2615305,0,1 @ F,0,1,1,0,1.2615305,0,1 @ F,0,1,1,0,1.2615305,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect29"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect27"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect25"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect24"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect23"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect21"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect19"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect17"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect15"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><linearGradient
|
||||||
|
id="swatch7"
|
||||||
|
inkscape:swatch="solid"><stop
|
||||||
|
style="stop-color:#77eaa3;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop7" /></linearGradient><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect3"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0.49883385,0,1 @ F,0,0,1,0,0.48672135,0,1 @ F,0,0,1,0,0.5261776,0,1 @ F,0,0,1,0,0.50001454,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect2"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31-9"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31-9-1"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /></defs><sodipodi:namedview
|
||||||
|
id="namedview17"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="32"
|
||||||
|
inkscape:cx="25.28125"
|
||||||
|
inkscape:cy="18.359375"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2126"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg17" /><path
|
||||||
|
d="m 33.973006,35.500013 h -0.999987 a 0.500013,0.500013 0 0 1 0,-1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 0 34.473,33.999994 v -5.000013 a 0.5000126,0.5000126 0 0 1 1.000025,0 v 5.000013 a 1.5,1.5 0 0 1 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6" /><path
|
||||||
|
d="m 35.473026,33.999994 v -0.999987 a 0.500013,0.500013 0 0 0 -1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 1 -0.499993,0.499994 h -5.000013 a 0.5000126,0.5000126 0 0 0 0,1.000025 h 5.000013 a 1.5,1.5 0 0 0 1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7" /><path
|
||||||
|
d="m 5.9730079,35.500013 h 0.999987 a 0.500013,0.500013 0 0 0 0,-1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 1 -0.499994,-0.499993 v -5.000013 a 0.5000126,0.5000126 0 0 0 -1.000025,0 v 5.000013 a 1.5,1.5 0 0 0 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3" /><path
|
||||||
|
d="m 4.4729879,33.999994 v -0.999987 a 0.500013,0.500013 0 0 1 1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 0 0.499993,0.499994 H 10.97302 a 0.5000126,0.5000126 0 0 1 0,1.000025 H 5.9730069 a 1.5,1.5 0 0 1 -1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5" /><path
|
||||||
|
d="m 5.9730079,4.499987 h 0.999987 a 0.50001302,0.50001302 0 0 1 0,1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 0 -0.499994,0.499993 v 5.000013 a 0.5000126,0.5000126 0 0 1 -1.0000251,0 V 6.000006 A 1.5,1.5 0 0 1 5.9730079,4.499987 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9" /><path
|
||||||
|
d="m 4.4729878,6.000006 v 0.999987 a 0.50001302,0.50001302 0 0 0 1.0000261,0 V 6.000006 A 0.49999998,0.49999998 0 0 1 5.9730068,5.500012 H 10.97302 a 0.5000126,0.5000126 0 0 0 0,-1.000025 H 5.9730068 a 1.5,1.5 0 0 0 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8" /><path
|
||||||
|
d="m 33.973006,4.499986 h -0.999987 a 0.50001302,0.50001302 0 0 0 0,1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 1 34.473,6.000005 v 5.000013 a 0.5000126,0.5000126 0 0 0 1.000025,0 V 6.000005 A 1.5,1.5 0 0 0 33.973006,4.499986 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9-8" /><path
|
||||||
|
d="m 35.473026,6.000005 v 0.999987 a 0.50001305,0.50001305 0 0 1 -1.000026,0 V 6.000005 A 0.49999998,0.49999998 0 0 0 33.973007,5.500011 h -5.000013 a 0.5000126,0.5000126 0 0 1 0,-1.000025 h 5.000013 a 1.5,1.5 0 0 1 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8-2" /><g
|
||||||
|
id="g5"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5" /></g><g
|
||||||
|
id="g31"
|
||||||
|
transform="translate(-1.2926181,-1.328125)"><path
|
||||||
|
d="m 11.472656,12.726388 v 6.047224 A 1.2263883,1.2263883 45 0 0 12.699044,20 h 6.074568 A 1.2263883,1.2263883 135 0 0 20,18.773612 V 12.726388 A 1.2263883,1.2263883 45 0 0 18.773612,11.5 h -6.074568 a 1.2263883,1.2263883 135 0 0 -1.226388,1.226388 z m 1.730947,-0.0096 h 5.065451 a 0.47508735,0.47508735 45 0 1 0.475087,0.475087 v 5.303732 a 0.47508735,0.47508735 135 0 1 -0.475087,0.475087 h -5.065451 a 0.47508735,0.47508735 45 0 1 -0.475087,-0.475087 l 0,-5.303732 a 0.47508735,0.47508735 135 0 1 0.475087,-0.475087 z"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
id="path30"
|
||||||
|
inkscape:path-effect="#path-effect31"
|
||||||
|
inkscape:original-d="M 11.472656,11.5 V 20 H 20 v -8.5 z m 1.25586,1.216797 h 6.015625 v 6.253906 h -6.015625 z" /><path
|
||||||
|
d="m 11.472656,12.726388 v 6.047224 A 1.2263883,1.2263883 45 0 0 12.699044,20 h 6.074568 A 1.2263883,1.2263883 135 0 0 20,18.773612 V 12.726388 A 1.2263883,1.2263883 45 0 0 18.773612,11.5 h -6.074568 a 1.2263883,1.2263883 135 0 0 -1.226388,1.226388 z m 1.730947,-0.0096 h 5.065451 a 0.47508735,0.47508735 45 0 1 0.475087,0.475087 v 5.303732 a 0.47508735,0.47508735 135 0 1 -0.475087,0.475087 h -5.065451 a 0.47508735,0.47508735 45 0 1 -0.475087,-0.475087 l 0,-5.303732 a 0.47508735,0.47508735 135 0 1 0.475087,-0.475087 z"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
id="path30-4"
|
||||||
|
inkscape:path-effect="#path-effect31-9"
|
||||||
|
inkscape:original-d="M 11.472656,11.5 V 20 H 20 v -8.5 z m 1.25586,1.216797 h 6.015625 v 6.253906 h -6.015625 z"
|
||||||
|
transform="translate(11.058594)" /><path
|
||||||
|
d="m 11.472656,12.726388 v 6.047224 A 1.2263883,1.2263883 45 0 0 12.699044,20 h 6.074568 A 1.2263883,1.2263883 135 0 0 20,18.773612 V 12.726388 A 1.2263883,1.2263883 45 0 0 18.773612,11.5 h -6.074568 a 1.2263883,1.2263883 135 0 0 -1.226388,1.226388 z m 1.730947,-0.0096 h 5.065451 a 0.47508735,0.47508735 45 0 1 0.475087,0.475087 v 5.303732 a 0.47508735,0.47508735 135 0 1 -0.475087,0.475087 h -5.065451 a 0.47508735,0.47508735 45 0 1 -0.475087,-0.475087 l 0,-5.303732 a 0.47508735,0.47508735 135 0 1 0.475087,-0.475087 z"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
id="path30-4-3"
|
||||||
|
inkscape:path-effect="#path-effect31-9-1"
|
||||||
|
inkscape:original-d="M 11.472656,11.5 V 20 H 20 v -8.5 z m 1.25586,1.216797 h 6.015625 v 6.253906 h -6.015625 z"
|
||||||
|
transform="translate(0,11.15625)" /></g></svg>
|
||||||
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polygon points="12.5 0.5 15.5 3.5 10 9 7 6" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M6.5 7C4.7 6.8 3.2 8 2.9 9.9c-.2 1.3-.8 2.2-2.4 3 2.8 1.5 6.6 1 7.5-1.6.5-1.5.3-3.1-1.5-4.3Z" style="fill:#009688"/></svg>
|
||||||
|
After Width: | Height: | Size: 337 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="0.5" y="0.5" width="7" height="7" style="fill:#009688"/><rect x="7.5" y="7.5" width="7" height="7" style="fill:#009688"/><rect x="0.5" y="0.5" width="14" height="14" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="7.5" y1="0.5" x2="7.5" y2="14.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="0.5" y1="7.5" x2="14.5" y2="7.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 582 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M7.5 7.5 L14.5 7.5 L11 13.5 Z" style="fill:#009688"/><path d="M7.5 7.5 L11 13.5 L4 13.5 Z" style="fill:#009688"/><path d="M7.5 7.5 L4 13.5 L0.5 7.5 Z" style="fill:#009688"/><polygon points="14.5 7.5 11 13.5 4 13.5 0.5 7.5 4 1.5 11 1.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="7.5" y1="7.5" x2="14.5" y2="7.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="7.5" y1="7.5" x2="11" y2="13.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="7.5" y1="7.5" x2="4" y2="13.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="7.5" y1="7.5" x2="0.5" y2="7.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="7.5" y1="7.5" x2="4" y2="1.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="7.5" y1="7.5" x2="11" y2="1.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><line x1="2.5" y1="2.5" x2="12.5" y2="12.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="12.5" y1="2.5" x2="2.5" y2="12.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 332 B |
@@ -0,0 +1,359 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40"
|
||||||
|
version="1.1"
|
||||||
|
id="svg17"
|
||||||
|
sodipodi:docname="texture_displacement_cut.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xml:space="preserve"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs17"><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect34"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0.965625,0,1 @ F,0,0,1,0,0.965625,0,1 @ F,0,0,1,0,0.965625,0,1 @ F,0,0,1,0,0.965625,0,1 | F,0,0,1,0,0.3257813,0,1 @ F,0,1,1,0,0.3257813,0,1 @ F,0,1,1,0,0.3257813,0,1 @ F,0,1,1,0,0.3257813,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect33"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect30"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.2615305,0,1 @ F,0,0,1,0,1.2615305,0,1 @ F,0,1,1,0,1.2615305,0,1 @ F,0,1,1,0,1.2615305,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect29"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect27"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect25"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect24"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect23"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect21"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect19"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect17"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect15"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><linearGradient
|
||||||
|
id="swatch7"
|
||||||
|
inkscape:swatch="solid"><stop
|
||||||
|
style="stop-color:#77eaa3;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop7" /></linearGradient><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect3"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0.49883385,0,1 @ F,0,0,1,0,0.48672135,0,1 @ F,0,0,1,0,0.5261776,0,1 @ F,0,0,1,0,0.50001454,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect2"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31-9"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31-9-1"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /></defs><sodipodi:namedview
|
||||||
|
id="namedview17"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="32"
|
||||||
|
inkscape:cx="15.375"
|
||||||
|
inkscape:cy="16.140625"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2126"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg17" /><path
|
||||||
|
d="m 33.973006,35.500013 h -0.999987 a 0.500013,0.500013 0 0 1 0,-1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 0 34.473,33.999994 v -5.000013 a 0.5000126,0.5000126 0 0 1 1.000025,0 v 5.000013 a 1.5,1.5 0 0 1 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6" /><path
|
||||||
|
d="m 35.473026,33.999994 v -0.999987 a 0.500013,0.500013 0 0 0 -1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 1 -0.499993,0.499994 h -5.000013 a 0.5000126,0.5000126 0 0 0 0,1.000025 h 5.000013 a 1.5,1.5 0 0 0 1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7" /><path
|
||||||
|
d="m 5.9730079,35.500013 h 0.999987 a 0.500013,0.500013 0 0 0 0,-1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 1 -0.499994,-0.499993 v -5.000013 a 0.5000126,0.5000126 0 0 0 -1.000025,0 v 5.000013 a 1.5,1.5 0 0 0 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3" /><path
|
||||||
|
d="m 4.4729879,33.999994 v -0.999987 a 0.500013,0.500013 0 0 1 1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 0 0.499993,0.499994 H 10.97302 a 0.5000126,0.5000126 0 0 1 0,1.000025 H 5.9730069 a 1.5,1.5 0 0 1 -1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5" /><path
|
||||||
|
d="m 5.9730079,4.499987 h 0.999987 a 0.50001302,0.50001302 0 0 1 0,1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 0 -0.499994,0.499993 v 5.000013 a 0.5000126,0.5000126 0 0 1 -1.0000251,0 V 6.000006 A 1.5,1.5 0 0 1 5.9730079,4.499987 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9" /><path
|
||||||
|
d="m 4.4729878,6.000006 v 0.999987 a 0.50001302,0.50001302 0 0 0 1.0000261,0 V 6.000006 A 0.49999998,0.49999998 0 0 1 5.9730068,5.500012 H 10.97302 a 0.5000126,0.5000126 0 0 0 0,-1.000025 H 5.9730068 a 1.5,1.5 0 0 0 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8" /><path
|
||||||
|
d="m 33.973006,4.499986 h -0.999987 a 0.50001302,0.50001302 0 0 0 0,1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 1 34.473,6.000005 v 5.000013 a 0.5000126,0.5000126 0 0 0 1.000025,0 V 6.000005 A 1.5,1.5 0 0 0 33.973006,4.499986 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9-8" /><path
|
||||||
|
d="m 35.473026,6.000005 v 0.999987 a 0.50001305,0.50001305 0 0 1 -1.000026,0 V 6.000005 A 0.49999998,0.49999998 0 0 0 33.973007,5.500011 h -5.000013 a 0.5000126,0.5000126 0 0 1 0,-1.000025 h 5.000013 a 1.5,1.5 0 0 1 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8-2" /><g
|
||||||
|
id="g5"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5" /></g><path
|
||||||
|
d="m 16.082031,8.7625 v 22.475 a 0.965625,0.965625 45 0 0 0.965625,0.965625 h 5.85 A 0.965625,0.965625 135 0 0 23.863281,31.2375 V 8.7625 A 0.965625,0.965625 45 0 0 22.897656,7.796875 h -5.85 A 0.965625,0.965625 135 0 0 16.082031,8.7625 Z m 1.325781,-0.032031 h 5.184376 a 0.3257813,0.3257813 45 0 1 0.325781,0.3257813 V 30.94375 a 0.3257813,0.3257813 135 0 1 -0.325781,0.325781 H 17.407812 A 0.3257813,0.3257813 45 0 1 17.082031,30.94375 V 9.0562501 a 0.3257813,0.3257813 135 0 1 0.325781,-0.3257813 z"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
id="path33"
|
||||||
|
inkscape:path-effect="#path-effect34"
|
||||||
|
inkscape:original-d="m 16.082031,7.796875 v 24.40625 h 7.78125 V 7.796875 Z m 1,0.9335938 h 5.835938 V 31.269531 h -5.835938 z" /><path
|
||||||
|
style="fill:#009688;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
id="rect32"
|
||||||
|
width="1.0000267"
|
||||||
|
height="22.719467"
|
||||||
|
x="27.527292"
|
||||||
|
y="-12.430544"
|
||||||
|
transform="rotate(47.337307)"
|
||||||
|
inkscape:path-effect="#path-effect33"
|
||||||
|
sodipodi:type="rect"
|
||||||
|
d="m 28.027306,-12.430544 c 0.277007,0 0.500013,0.223006 0.500013,0.500013 V 9.7889099 c 0,0.2770071 -0.223006,0.5000131 -0.500013,0.5000131 -0.277008,0 -0.500014,-0.223006 -0.500014,-0.5000131 V -11.930531 c 0,-0.277007 0.223006,-0.500013 0.500014,-0.500013 z"
|
||||||
|
ry="0.50001335" /></svg>
|
||||||
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="0.5" y="0.5" width="14" height="14" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="0.5" y1="7.5" x2="14.5" y2="7.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="2.5" y1="0.5" x2="2.5" y2="14.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="5" y1="0.5" x2="5" y2="14.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="8.5" y1="0.5" x2="8.5" y2="14.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 688 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><circle cx="5.5" cy="3.5" r="1.25" style="fill:#949494"/><circle cx="9.5" cy="3.5" r="1.25" style="fill:#949494"/><circle cx="5.5" cy="7.5" r="1.25" style="fill:#949494"/><circle cx="9.5" cy="7.5" r="1.25" style="fill:#949494"/><circle cx="5.5" cy="11.5" r="1.25" style="fill:#949494"/><circle cx="9.5" cy="11.5" r="1.25" style="fill:#949494"/></svg>
|
||||||
|
After Width: | Height: | Size: 434 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polygon points="0.5 3 6 5.5 11.5 3 6 0.5 0.5 3" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polyline points="0.5 3 0.5 9.5 6 12 8 11.1" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polyline points="11.5 3 11.5 8" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="6" y1="5.5" x2="6" y2="12" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="10" y1="10" x2="15" y2="15" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="15" y1="10" x2="10" y2="15" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 792 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polygon points="0.5 13.5 7.5 1.5 14.5 13.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polygon points="4 7.5 11 7.5 7.5 13.5" style="fill:#009688;stroke:#009688;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 311 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="0.5" y="10.5" width="14" height="4" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polygon points="9 0.5 4.5 5.5 7.5 5.5 6 9 10.5 4 7.5 4" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 346 B |
@@ -0,0 +1,242 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40"
|
||||||
|
version="1.1"
|
||||||
|
id="svg17"
|
||||||
|
sodipodi:docname="texture_displacement_frame.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xml:space="preserve"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs17"><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect21"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect19"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect17"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect15"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><linearGradient
|
||||||
|
id="swatch7"
|
||||||
|
inkscape:swatch="solid"><stop
|
||||||
|
style="stop-color:#77eaa3;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop7" /></linearGradient><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect3"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0.49883385,0,1 @ F,0,0,1,0,0.48672135,0,1 @ F,0,0,1,0,0.5261776,0,1 @ F,0,0,1,0,0.50001454,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect2"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /></defs><sodipodi:namedview
|
||||||
|
id="namedview17"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="11.6875"
|
||||||
|
inkscape:cy="6.28125"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2126"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg17" /><path
|
||||||
|
d="m 33.973006,35.500013 h -0.999987 a 0.500013,0.500013 0 0 1 0,-1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 0 34.473,33.999994 v -5.000013 a 0.5000126,0.5000126 0 0 1 1.000025,0 v 5.000013 a 1.5,1.5 0 0 1 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6" /><path
|
||||||
|
d="m 35.473026,33.999994 v -0.999987 a 0.500013,0.500013 0 0 0 -1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 1 -0.499993,0.499994 h -5.000013 a 0.5000126,0.5000126 0 0 0 0,1.000025 h 5.000013 a 1.5,1.5 0 0 0 1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7" /><path
|
||||||
|
d="m 5.9730079,35.500013 h 0.999987 a 0.500013,0.500013 0 0 0 0,-1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 1 -0.499994,-0.499993 v -5.000013 a 0.5000126,0.5000126 0 0 0 -1.000025,0 v 5.000013 a 1.5,1.5 0 0 0 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3" /><path
|
||||||
|
d="m 4.4729879,33.999994 v -0.999987 a 0.500013,0.500013 0 0 1 1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 0 0.499993,0.499994 H 10.97302 a 0.5000126,0.5000126 0 0 1 0,1.000025 H 5.9730069 a 1.5,1.5 0 0 1 -1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5" /><path
|
||||||
|
d="m 5.9730079,4.499987 h 0.999987 a 0.50001302,0.50001302 0 0 1 0,1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 0 -0.499994,0.499993 v 5.000013 a 0.5000126,0.5000126 0 0 1 -1.0000251,0 V 6.000006 A 1.5,1.5 0 0 1 5.9730079,4.499987 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9" /><path
|
||||||
|
d="m 4.4729878,6.000006 v 0.999987 a 0.50001302,0.50001302 0 0 0 1.0000261,0 V 6.000006 A 0.49999998,0.49999998 0 0 1 5.9730068,5.500012 H 10.97302 a 0.5000126,0.5000126 0 0 0 0,-1.000025 H 5.9730068 a 1.5,1.5 0 0 0 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8" /><path
|
||||||
|
d="m 33.973006,4.499986 h -0.999987 a 0.50001302,0.50001302 0 0 0 0,1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 1 34.473,6.000005 v 5.000013 a 0.5000126,0.5000126 0 0 0 1.000025,0 V 6.000005 A 1.5,1.5 0 0 0 33.973006,4.499986 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9-8" /><path
|
||||||
|
d="m 35.473026,6.000005 v 0.999987 a 0.50001305,0.50001305 0 0 1 -1.000026,0 V 6.000005 A 0.49999998,0.49999998 0 0 0 33.973007,5.500011 h -5.000013 a 0.5000126,0.5000126 0 0 1 0,-1.000025 h 5.000013 a 1.5,1.5 0 0 1 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8-2" /><g
|
||||||
|
id="g5"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5" /></g><g
|
||||||
|
id="g5-0"
|
||||||
|
transform="translate(6.4998844,6.0000382)"
|
||||||
|
style="fill:#ff2323;fill-opacity:1"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4-1"
|
||||||
|
style="fill:#ff2323;fill-opacity:1" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5-2"
|
||||||
|
style="fill:#4e2ca6;fill-opacity:1;fill-rule:nonzero" /></g><g
|
||||||
|
id="g5-0-8"
|
||||||
|
transform="matrix(-1,0,0,1,33.44613,6.0000382)"
|
||||||
|
style="fill:#ff2323;fill-opacity:1"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4-1-3"
|
||||||
|
style="fill:#ff2323;fill-opacity:1" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5-2-5"
|
||||||
|
style="fill:#ff2323;fill-opacity:1" /></g><g
|
||||||
|
id="g5-0-8-2"
|
||||||
|
transform="rotate(180,16.723064,16.999981)"
|
||||||
|
style="fill:#ff2323;fill-opacity:1"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4-1-3-0"
|
||||||
|
style="fill:#ff2323;fill-opacity:1" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5-2-5-1"
|
||||||
|
style="fill:#ff2323;fill-opacity:1" /></g><g
|
||||||
|
id="g5-0-8-2-4"
|
||||||
|
transform="matrix(1,0,0,-1,6.4998854,33.999963)"
|
||||||
|
style="fill:#ff2323;fill-opacity:1"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4-1-3-0-0"
|
||||||
|
style="fill:#ff2323;fill-opacity:1" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5-2-5-1-6"
|
||||||
|
style="fill:#ff2323;fill-opacity:1" /></g><path
|
||||||
|
id="path13"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
d="m 10.972656,11.5 v 4.101562 1.407813 A 0.490625,0.490625 45 0 0 11.463281,17.5 h 0.0094 a 0.4999428,0.4999428 135 0 0 0.499943,-0.499943 V 15.601562 12.000236 A 0.5002363,0.5002363 135 0 1 12.472892,11.5 h 0.241952 0.503906 4.255468 a 0.4984375,0.4984375 135 0 0 0.498438,-0.498437 v -0.0018 A 0.4997516,0.4997516 45 0 0 17.472904,10.5 H 13.21875 12.714844 11.972656 a 1,1 135 0 0 -1,1 z"
|
||||||
|
inkscape:original-d="m 10.972656,10.5 v 1 4.101562 V 17.5 h 1 V 15.601562 11.5 h 0.742188 0.503906 4.753906 v -1 H 13.21875 12.714844 11.972656 Z"
|
||||||
|
inkscape:path-effect="#path-effect15" /><path
|
||||||
|
id="path16"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
d="m 10.972656,11.5 v 4.101562 1.439063 A 0.459375,0.459375 45 0 0 11.432031,17.5 h 0.04066 a 0.499968,0.499968 135 0 0 0.499968,-0.499968 l 0,-1.39847 V 12.000236 A 0.5002363,0.5002363 135 0 1 12.472892,11.5 h 0.241952 0.503906 4.271094 a 0.4828125,0.4828125 135 0 0 0.482812,-0.482812 V 11.00584 A 0.50584,0.50584 45 0 0 17.466816,10.5 H 13.21875 12.714844 11.972656 a 1,1 135 0 0 -1,1 z"
|
||||||
|
inkscape:original-d="m 10.972656,10.5 v 1 4.101562 V 17.5 h 1 V 15.601562 11.5 h 0.742188 0.503906 4.753906 v -1 H 13.21875 12.714844 11.972656 Z"
|
||||||
|
inkscape:path-effect="#path-effect17"
|
||||||
|
transform="matrix(-1,0,0,1,39.939926,2.52e-5)" /><path
|
||||||
|
id="path17"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
d="m 10.972656,11.5 v 4.101562 1.439063 A 0.459375,0.459375 45 0 0 11.432031,17.5 h 0.04066 a 0.499968,0.499968 135 0 0 0.499968,-0.499968 l 0,-1.39847 V 12.000236 A 0.5002363,0.5002363 135 0 1 12.472892,11.5 h 0.241952 0.503906 4.271094 a 0.4828125,0.4828125 135 0 0 0.482812,-0.482812 V 11.00584 A 0.50584,0.50584 45 0 0 17.466816,10.5 H 13.21875 12.714844 11.972656 a 1,1 135 0 0 -1,1 z"
|
||||||
|
inkscape:original-d="m 10.972656,10.5 v 1 4.101562 V 17.5 h 1 V 15.601562 11.5 h 0.742188 0.503906 4.753906 v -1 H 13.21875 12.714844 11.972656 Z"
|
||||||
|
inkscape:path-effect="#path-effect19"
|
||||||
|
transform="rotate(180,19.972885,20.000096)" /><path
|
||||||
|
id="path19"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
d="m 10.972656,11.5 v 4.101562 1.439063 A 0.459375,0.459375 45 0 0 11.432031,17.5 h 0.04066 a 0.499968,0.499968 135 0 0 0.499968,-0.499968 l 0,-1.39847 V 12.000236 A 0.5002363,0.5002363 135 0 1 12.472892,11.5 h 0.241952 0.503906 4.271094 a 0.4828125,0.4828125 135 0 0 0.482812,-0.482812 V 11.00584 A 0.50584,0.50584 45 0 0 17.466816,10.5 H 13.21875 12.714844 11.972656 a 1,1 135 0 0 -1,1 z"
|
||||||
|
inkscape:original-d="m 10.972656,10.5 v 1 4.101562 V 17.5 h 1 V 15.601562 11.5 h 0.742188 0.503906 4.753906 v -1 H 13.21875 12.714844 11.972656 Z"
|
||||||
|
inkscape:path-effect="#path-effect21"
|
||||||
|
transform="matrix(1,0,0,-1,0.0060898,39.99995)" /></svg>
|
||||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,387 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40"
|
||||||
|
version="1.1"
|
||||||
|
id="svg17"
|
||||||
|
sodipodi:docname="texture_displacement_join.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xml:space="preserve"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs17"><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect35"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,1,1,0,0.24375,0,1 @ F,0,1,1,0,0.24375,0,1 @ F,0,1,1,0,0.24375,0,1 @ F,0,0,1,0,0.24375,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect34"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0.965625,0,1 @ F,0,0,1,0,0.965625,0,1 @ F,0,0,1,0,0.965625,0,1 @ F,0,0,1,0,0.965625,0,1 | F,0,0,1,0,0.3257813,0,1 @ F,0,1,1,0,0.3257813,0,1 @ F,0,1,1,0,0.3257813,0,1 @ F,0,1,1,0,0.3257813,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect33"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect30"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.2615305,0,1 @ F,0,0,1,0,1.2615305,0,1 @ F,0,1,1,0,1.2615305,0,1 @ F,0,1,1,0,1.2615305,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect29"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect27"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect25"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect24"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect23"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect21"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect19"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect17"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect15"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><linearGradient
|
||||||
|
id="swatch7"
|
||||||
|
inkscape:swatch="solid"><stop
|
||||||
|
style="stop-color:#77eaa3;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop7" /></linearGradient><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect3"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0.49883385,0,1 @ F,0,0,1,0,0.48672135,0,1 @ F,0,0,1,0,0.5261776,0,1 @ F,0,0,1,0,0.50001454,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect2"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31-9"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31-9-1"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect35-7"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,1,1,0,0.24375,0,1 @ F,0,1,1,0,0.24375,0,1 @ F,0,1,1,0,0.24375,0,1 @ F,0,0,1,0,0.24375,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /></defs><sodipodi:namedview
|
||||||
|
id="namedview17"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="32"
|
||||||
|
inkscape:cx="18.3125"
|
||||||
|
inkscape:cy="22.328125"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2126"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg17" /><path
|
||||||
|
d="m 33.973006,35.500013 h -0.999987 a 0.500013,0.500013 0 0 1 0,-1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 0 34.473,33.999994 v -5.000013 a 0.5000126,0.5000126 0 0 1 1.000025,0 v 5.000013 a 1.5,1.5 0 0 1 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6" /><path
|
||||||
|
d="m 35.473026,33.999994 v -0.999987 a 0.500013,0.500013 0 0 0 -1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 1 -0.499993,0.499994 h -5.000013 a 0.5000126,0.5000126 0 0 0 0,1.000025 h 5.000013 a 1.5,1.5 0 0 0 1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7" /><path
|
||||||
|
d="m 5.9730079,35.500013 h 0.999987 a 0.500013,0.500013 0 0 0 0,-1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 1 -0.499994,-0.499993 v -5.000013 a 0.5000126,0.5000126 0 0 0 -1.000025,0 v 5.000013 a 1.5,1.5 0 0 0 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3" /><path
|
||||||
|
d="m 4.4729879,33.999994 v -0.999987 a 0.500013,0.500013 0 0 1 1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 0 0.499993,0.499994 H 10.97302 a 0.5000126,0.5000126 0 0 1 0,1.000025 H 5.9730069 a 1.5,1.5 0 0 1 -1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5" /><path
|
||||||
|
d="m 5.9730079,4.499987 h 0.999987 a 0.50001302,0.50001302 0 0 1 0,1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 0 -0.499994,0.499993 v 5.000013 a 0.5000126,0.5000126 0 0 1 -1.0000251,0 V 6.000006 A 1.5,1.5 0 0 1 5.9730079,4.499987 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9" /><path
|
||||||
|
d="m 4.4729878,6.000006 v 0.999987 a 0.50001302,0.50001302 0 0 0 1.0000261,0 V 6.000006 A 0.49999998,0.49999998 0 0 1 5.9730068,5.500012 H 10.97302 a 0.5000126,0.5000126 0 0 0 0,-1.000025 H 5.9730068 a 1.5,1.5 0 0 0 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8" /><path
|
||||||
|
d="m 33.973006,4.499986 h -0.999987 a 0.50001302,0.50001302 0 0 0 0,1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 1 34.473,6.000005 v 5.000013 a 0.5000126,0.5000126 0 0 0 1.000025,0 V 6.000005 A 1.5,1.5 0 0 0 33.973006,4.499986 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9-8" /><path
|
||||||
|
d="m 35.473026,6.000005 v 0.999987 a 0.50001305,0.50001305 0 0 1 -1.000026,0 V 6.000005 A 0.49999998,0.49999998 0 0 0 33.973007,5.500011 h -5.000013 a 0.5000126,0.5000126 0 0 1 0,-1.000025 h 5.000013 a 1.5,1.5 0 0 1 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8-2" /><g
|
||||||
|
id="g5"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5" /></g><path
|
||||||
|
id="rect35"
|
||||||
|
style="fill:#009688;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 11.154297,12.015625 c -0.277007,0 -0.5,0.222993 -0.5,0.5 v 9.050781 c 0,0.0019 -2.2e-5,0.0039 0,0.0059 -2.3e-5,0.002 0,0.0039 0,0.0059 3.45e-4,0.01513 0.0023,0.03016 0.0039,0.04492 0.02282,0.255546 0.234414,0.455078 0.496094,0.455078 h 9.050781 c 0.277007,0 0.5,-0.222993 0.5,-0.5 v -0.002 -9.048828 c 9e-5,-0.0039 0,-0.0078 0,-0.01172 0,-0.277007 -0.222993,-0.5 -0.5,-0.5 z m 0.74375,1 h 7.563281 a 0.24375,0.24375 45 0 1 0.24375,0.24375 v 7.575 a 0.24375,0.24375 135 0 1 -0.24375,0.24375 h -7.563281 a 0.24375,0.24375 45 0 1 -0.24375,-0.24375 v -7.575 a 0.24375,0.24375 135 0 1 0.24375,-0.24375 z"
|
||||||
|
inkscape:path-effect="#path-effect35"
|
||||||
|
inkscape:original-d="m 11.154297,12.015625 c -0.277007,0 -0.5,0.222993 -0.5,0.5 v 9.050781 c 0,0.0019 -2.2e-5,0.0039 0,0.0059 -2.3e-5,0.002 0,0.0039 0,0.0059 3.45e-4,0.01513 0.0023,0.03016 0.0039,0.04492 0.02282,0.255546 0.234414,0.455078 0.496094,0.455078 h 9.050781 c 0.277007,0 0.5,-0.222993 0.5,-0.5 v -0.002 -9.048828 c 9e-5,-0.0039 0,-0.0078 0,-0.01172 0,-0.277007 -0.222993,-0.5 -0.5,-0.5 z m 0.5,1 h 8.050781 v 8.0625 h -8.050781 z"
|
||||||
|
transform="translate(0.294922,2.953125)" /><path
|
||||||
|
id="rect35-3"
|
||||||
|
style="fill:#009688;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 11.154297,12.015625 c -0.277007,0 -0.5,0.222993 -0.5,0.5 v 9.050781 c 0,0.0019 -2.2e-5,0.0039 0,0.0059 -2.3e-5,0.002 0,0.0039 0,0.0059 3.45e-4,0.01513 0.0023,0.03016 0.0039,0.04492 0.02282,0.255546 0.234414,0.455078 0.496094,0.455078 h 9.050781 c 0.277007,0 0.5,-0.222993 0.5,-0.5 v -0.002 -9.048828 c 9e-5,-0.0039 0,-0.0078 0,-0.01172 0,-0.277007 -0.222993,-0.5 -0.5,-0.5 z m 0.74375,1 h 7.563281 a 0.24375,0.24375 45 0 1 0.24375,0.24375 v 7.575 a 0.24375,0.24375 135 0 1 -0.24375,0.24375 h -7.563281 a 0.24375,0.24375 45 0 1 -0.24375,-0.24375 v -7.575 a 0.24375,0.24375 135 0 1 0.24375,-0.24375 z"
|
||||||
|
inkscape:path-effect="#path-effect35-7"
|
||||||
|
inkscape:original-d="m 11.154297,12.015625 c -0.277007,0 -0.5,0.222993 -0.5,0.5 v 9.050781 c 0,0.0019 -2.2e-5,0.0039 0,0.0059 -2.3e-5,0.002 0,0.0039 0,0.0059 3.45e-4,0.01513 0.0023,0.03016 0.0039,0.04492 0.02282,0.255546 0.234414,0.455078 0.496094,0.455078 h 9.050781 c 0.277007,0 0.5,-0.222993 0.5,-0.5 v -0.002 -9.048828 c 9e-5,-0.0039 0,-0.0078 0,-0.01172 0,-0.277007 -0.222993,-0.5 -0.5,-0.5 z m 0.5,1 h 8.050781 v 8.0625 h -8.050781 z"
|
||||||
|
transform="translate(9.345703,2.953125)" /></svg>
|
||||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="5.5" y="5.5" width="4" height="4" style="fill:#009688"/><rect x="5.5" y="1.5" width="4" height="4" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="1.5" y="5.5" width="4" height="4" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="5.5" y="5.5" width="4" height="4" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="9.5" y="5.5" width="4" height="4" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="5.5" y="9.5" width="4" height="4" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 755 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><circle cx="2.5" cy="7.5" r="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="4.3" y1="6.5" x2="11.5" y2="1.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="4.3" y1="8.5" x2="11.5" y2="13.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="11.5" y="1.5" width="3" height="12" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 562 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><line x1="7.5" y1="1.5" x2="7.5" y2="12" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polyline points="3.5 8.5 7.5 12.5 11.5 8.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 330 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><line x1="7.5" y1="3" x2="7.5" y2="13.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polyline points="3.5 6.5 7.5 2.5 11.5 6.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 329 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="0.5 7.5 0.5 14.5 14.5 14.5 14.5 7.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M0.5 7.5c1.2-3 2.3-3 3.5 0s2.3 3 3.5 0 2.3-3 3.5 0 2.3 3 3.5 0" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 372 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polygon points="0.5 3.5 7.5 6.5 7.5 14.5 0.5 11.5 0.5 3.5" style="fill:#009688;fill-opacity:0.55"/><polygon points="7.5 6.5 14.5 3.5 14.5 11.5 7.5 14.5 7.5 6.5" style="fill:#009688;fill-opacity:0.3"/><polygon points="0.5 3.5 7.5 6.5 14.5 3.5 7.5 0.5 0.5 3.5" style="fill:#009688"/><polygon points="0.5 3.5 7.5 6.5 14.5 3.5 7.5 0.5 0.5 3.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polyline points="0.5 3.5 0.5 11.5 7.5 14.5 14.5 11.5 14.5 3.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="7.5" y1="6.5" x2="7.5" y2="14.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 769 B |
@@ -0,0 +1,260 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40"
|
||||||
|
version="1.1"
|
||||||
|
id="svg17"
|
||||||
|
sodipodi:docname="texture_displacement_snap.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xml:space="preserve"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs17"><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect29"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect27"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect25"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect24"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect23"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect21"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect19"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect17"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect15"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><linearGradient
|
||||||
|
id="swatch7"
|
||||||
|
inkscape:swatch="solid"><stop
|
||||||
|
style="stop-color:#77eaa3;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop7" /></linearGradient><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect3"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0.49883385,0,1 @ F,0,0,1,0,0.48672135,0,1 @ F,0,0,1,0,0.5261776,0,1 @ F,0,0,1,0,0.50001454,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect2"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /></defs><sodipodi:namedview
|
||||||
|
id="namedview17"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="45.254834"
|
||||||
|
inkscape:cx="14.363106"
|
||||||
|
inkscape:cy="12.827359"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2126"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg17" /><path
|
||||||
|
d="m 33.973006,35.500013 h -0.999987 a 0.500013,0.500013 0 0 1 0,-1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 0 34.473,33.999994 v -5.000013 a 0.5000126,0.5000126 0 0 1 1.000025,0 v 5.000013 a 1.5,1.5 0 0 1 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6" /><path
|
||||||
|
d="m 35.473026,33.999994 v -0.999987 a 0.500013,0.500013 0 0 0 -1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 1 -0.499993,0.499994 h -5.000013 a 0.5000126,0.5000126 0 0 0 0,1.000025 h 5.000013 a 1.5,1.5 0 0 0 1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7" /><path
|
||||||
|
d="m 5.9730079,35.500013 h 0.999987 a 0.500013,0.500013 0 0 0 0,-1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 1 -0.499994,-0.499993 v -5.000013 a 0.5000126,0.5000126 0 0 0 -1.000025,0 v 5.000013 a 1.5,1.5 0 0 0 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3" /><path
|
||||||
|
d="m 4.4729879,33.999994 v -0.999987 a 0.500013,0.500013 0 0 1 1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 0 0.499993,0.499994 H 10.97302 a 0.5000126,0.5000126 0 0 1 0,1.000025 H 5.9730069 a 1.5,1.5 0 0 1 -1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5" /><path
|
||||||
|
d="m 5.9730079,4.499987 h 0.999987 a 0.50001302,0.50001302 0 0 1 0,1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 0 -0.499994,0.499993 v 5.000013 a 0.5000126,0.5000126 0 0 1 -1.0000251,0 V 6.000006 A 1.5,1.5 0 0 1 5.9730079,4.499987 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9" /><path
|
||||||
|
d="m 4.4729878,6.000006 v 0.999987 a 0.50001302,0.50001302 0 0 0 1.0000261,0 V 6.000006 A 0.49999998,0.49999998 0 0 1 5.9730068,5.500012 H 10.97302 a 0.5000126,0.5000126 0 0 0 0,-1.000025 H 5.9730068 a 1.5,1.5 0 0 0 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8" /><path
|
||||||
|
d="m 33.973006,4.499986 h -0.999987 a 0.50001302,0.50001302 0 0 0 0,1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 1 34.473,6.000005 v 5.000013 a 0.5000126,0.5000126 0 0 0 1.000025,0 V 6.000005 A 1.5,1.5 0 0 0 33.973006,4.499986 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9-8" /><path
|
||||||
|
d="m 35.473026,6.000005 v 0.999987 a 0.50001305,0.50001305 0 0 1 -1.000026,0 V 6.000005 A 0.49999998,0.49999998 0 0 0 33.973007,5.500011 h -5.000013 a 0.5000126,0.5000126 0 0 1 0,-1.000025 h 5.000013 a 1.5,1.5 0 0 1 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8-2" /><g
|
||||||
|
id="g5"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5" /></g><path
|
||||||
|
d="M 20.422985,9.2501548 V 29.968905 H 28.78236 A 1.015625,1.015625 135 0 0 29.797985,28.95328 V 9.2501548 A 1.015625,1.015625 45 0 0 28.78236,8.2345298 h -7.34375 a 1.015625,1.015625 135 0 0 -1.015625,1.015625 z m 1.015625,-0.015625 h 7.34375 V 28.968905 h -7.34375 z"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
id="path23"
|
||||||
|
inkscape:path-effect="#path-effect24"
|
||||||
|
inkscape:original-d="M 20.422985,8.2345298 V 29.968905 h 9.375 V 8.2345298 Z m 1.015625,1 h 7.34375 V 28.968905 h -7.34375 z" /><path
|
||||||
|
d="m 11.047985,11.324808 v 19.616307 a 1.059034,1.059034 45 0 0 1.059034,1.059034 h 7.256932 a 1.059034,1.059034 135 0 0 1.059034,-1.059034 V 10.265774 h -8.315966 a 1.059034,1.059034 135 0 0 -1.059034,1.059034 z m 1.015625,-0.05903 h 7.34375 v 19.734375 h -7.34375 z"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
id="path23-8"
|
||||||
|
inkscape:path-effect="#path-effect25"
|
||||||
|
inkscape:original-d="m 11.047985,10.265774 v 21.734375 h 9.375 V 10.265774 Z m 1.015625,1 h 7.34375 v 19.734375 h -7.34375 z" /><path
|
||||||
|
id="use25"
|
||||||
|
style="fill:#009688;stroke-width:0.1;paint-order:stroke fill markers"
|
||||||
|
d="M 21.439453 8.234375 A 1.015625 1.015625 0 0 0 20.423828 9.25 L 20.423828 10.265625 L 12.107422 10.265625 A 1.059034 1.059034 0 0 0 11.048828 11.324219 L 11.048828 30.941406 A 1.059034 1.059034 0 0 0 12.107422 32 L 19.363281 32 A 1.059034 1.059034 0 0 0 20.423828 30.941406 L 20.423828 29.96875 L 28.783203 29.96875 A 1.015625 1.015625 0 0 0 29.798828 28.953125 L 29.798828 9.25 A 1.015625 1.015625 0 0 0 28.783203 8.234375 L 21.439453 8.234375 z M 21.439453 9.234375 L 28.783203 9.234375 L 28.783203 28.96875 L 21.439453 28.96875 L 21.439453 9.234375 z M 12.064453 11.265625 L 19.408203 11.265625 L 19.408203 31 L 12.064453 31 L 12.064453 11.265625 z " /></svg>
|
||||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polygon points="0.5 14.5 1.5 14.5 5.5 7.5 1.5 0.5 0.5 0.5 0.5 14.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="7" width="1" height="3" style="fill:#009688"/><rect x="7" y="4" width="1" height="1" style="fill:#009688"/><rect x="7" y="6" width="1" height="3" style="fill:#009688"/><rect x="7" y="10" width="1" height="1" style="fill:#009688"/><rect x="7" y="12" width="1" height="3" style="fill:#009688"/><polygon points="9.5 14.5 10.5 14.5 14.5 7.5 10.5 0.5 9.5 0.5 9.5 14.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 686 B |
@@ -0,0 +1,387 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40"
|
||||||
|
version="1.1"
|
||||||
|
id="svg17"
|
||||||
|
sodipodi:docname="texture_displacement_unjoin.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xml:space="preserve"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs17"><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect35"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,1,1,0,0.24375,0,1 @ F,0,1,1,0,0.24375,0,1 @ F,0,1,1,0,0.24375,0,1 @ F,0,0,1,0,0.24375,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect34"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0.965625,0,1 @ F,0,0,1,0,0.965625,0,1 @ F,0,0,1,0,0.965625,0,1 @ F,0,0,1,0,0.965625,0,1 | F,0,0,1,0,0.3257813,0,1 @ F,0,1,1,0,0.3257813,0,1 @ F,0,1,1,0,0.3257813,0,1 @ F,0,1,1,0,0.3257813,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect33"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect30"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.2615305,0,1 @ F,0,0,1,0,1.2615305,0,1 @ F,0,1,1,0,1.2615305,0,1 @ F,0,1,1,0,1.2615305,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect29"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect27"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect25"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,1.059034,0,1 @ F,0,1,1,0,1.059034,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect24"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,1.015625,0,1 @ F,0,0,1,0,1.015625,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect23"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect21"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect19"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect17"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.459375,0,1 @ F,0,0,1,0,0.499968,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.4828125,0,1 @ F,0,0,1,0,0.50584,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect15"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0.5002363,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><linearGradient
|
||||||
|
id="swatch7"
|
||||||
|
inkscape:swatch="solid"><stop
|
||||||
|
style="stop-color:#77eaa3;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop7" /></linearGradient><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect3"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0.49883385,0,1 @ F,0,0,1,0,0.48672135,0,1 @ F,0,0,1,0,0.5261776,0,1 @ F,0,0,1,0,0.50001454,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect2"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31-9"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect31-9-1"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 @ F,0,0,1,0,1.2263883,0,1 | F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1 @ F,0,1,1,0,0.47508735,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /><inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect35-7"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,1,1,0,0.24375,0,1 @ F,0,1,1,0,0.24375,0,1 @ F,0,1,1,0,0.24375,0,1 @ F,0,0,1,0,0.24375,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" /></defs><sodipodi:namedview
|
||||||
|
id="namedview17"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="32"
|
||||||
|
inkscape:cx="18.3125"
|
||||||
|
inkscape:cy="22.328125"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2126"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg17" /><path
|
||||||
|
d="m 33.973006,35.500013 h -0.999987 a 0.500013,0.500013 0 0 1 0,-1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 0 34.473,33.999994 v -5.000013 a 0.5000126,0.5000126 0 0 1 1.000025,0 v 5.000013 a 1.5,1.5 0 0 1 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6" /><path
|
||||||
|
d="m 35.473026,33.999994 v -0.999987 a 0.500013,0.500013 0 0 0 -1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 1 -0.499993,0.499994 h -5.000013 a 0.5000126,0.5000126 0 0 0 0,1.000025 h 5.000013 a 1.5,1.5 0 0 0 1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7" /><path
|
||||||
|
d="m 5.9730079,35.500013 h 0.999987 a 0.500013,0.500013 0 0 0 0,-1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 1 -0.499994,-0.499993 v -5.000013 a 0.5000126,0.5000126 0 0 0 -1.000025,0 v 5.000013 a 1.5,1.5 0 0 0 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3" /><path
|
||||||
|
d="m 4.4729879,33.999994 v -0.999987 a 0.500013,0.500013 0 0 1 1.000026,0 v 0.999987 a 0.49999998,0.49999998 0 0 0 0.499993,0.499994 H 10.97302 a 0.5000126,0.5000126 0 0 1 0,1.000025 H 5.9730069 a 1.5,1.5 0 0 1 -1.500019,-1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5" /><path
|
||||||
|
d="m 5.9730079,4.499987 h 0.999987 a 0.50001302,0.50001302 0 0 1 0,1.000026 h -0.999987 a 0.49999998,0.49999998 0 0 0 -0.499994,0.499993 v 5.000013 a 0.5000126,0.5000126 0 0 1 -1.0000251,0 V 6.000006 A 1.5,1.5 0 0 1 5.9730079,4.499987 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9" /><path
|
||||||
|
d="m 4.4729878,6.000006 v 0.999987 a 0.50001302,0.50001302 0 0 0 1.0000261,0 V 6.000006 A 0.49999998,0.49999998 0 0 1 5.9730068,5.500012 H 10.97302 a 0.5000126,0.5000126 0 0 0 0,-1.000025 H 5.9730068 a 1.5,1.5 0 0 0 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8" /><path
|
||||||
|
d="m 33.973006,4.499986 h -0.999987 a 0.50001302,0.50001302 0 0 0 0,1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 1 34.473,6.000005 v 5.000013 a 0.5000126,0.5000126 0 0 0 1.000025,0 V 6.000005 A 1.5,1.5 0 0 0 33.973006,4.499986 Z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-3-9-8" /><path
|
||||||
|
d="m 35.473026,6.000005 v 0.999987 a 0.50001305,0.50001305 0 0 1 -1.000026,0 V 6.000005 A 0.49999998,0.49999998 0 0 0 33.973007,5.500011 h -5.000013 a 0.5000126,0.5000126 0 0 1 0,-1.000025 h 5.000013 a 1.5,1.5 0 0 1 1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6-7-5-8-2" /><g
|
||||||
|
id="g5"><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-3-9"
|
||||||
|
id="use4" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path3-6-7-5-8"
|
||||||
|
id="use5" /></g><path
|
||||||
|
id="rect35"
|
||||||
|
style="fill:#009688;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 11.154297,12.015625 c -0.277007,0 -0.5,0.222993 -0.5,0.5 v 9.050781 c 0,0.0019 -2.2e-5,0.0039 0,0.0059 -2.3e-5,0.002 0,0.0039 0,0.0059 3.45e-4,0.01513 0.0023,0.03016 0.0039,0.04492 0.02282,0.255546 0.234414,0.455078 0.496094,0.455078 h 9.050781 c 0.277007,0 0.5,-0.222993 0.5,-0.5 v -0.002 -9.048828 c 9e-5,-0.0039 0,-0.0078 0,-0.01172 0,-0.277007 -0.222993,-0.5 -0.5,-0.5 z m 0.74375,1 h 7.563281 a 0.24375,0.24375 45 0 1 0.24375,0.24375 v 7.575 a 0.24375,0.24375 135 0 1 -0.24375,0.24375 h -7.563281 a 0.24375,0.24375 45 0 1 -0.24375,-0.24375 v -7.575 a 0.24375,0.24375 135 0 1 0.24375,-0.24375 z"
|
||||||
|
inkscape:path-effect="#path-effect35"
|
||||||
|
inkscape:original-d="m 11.154297,12.015625 c -0.277007,0 -0.5,0.222993 -0.5,0.5 v 9.050781 c 0,0.0019 -2.2e-5,0.0039 0,0.0059 -2.3e-5,0.002 0,0.0039 0,0.0059 3.45e-4,0.01513 0.0023,0.03016 0.0039,0.04492 0.02282,0.255546 0.234414,0.455078 0.496094,0.455078 h 9.050781 c 0.277007,0 0.5,-0.222993 0.5,-0.5 v -0.002 -9.048828 c 9e-5,-0.0039 0,-0.0078 0,-0.01172 0,-0.277007 -0.222993,-0.5 -0.5,-0.5 z m 0.5,1 h 8.050781 v 8.0625 h -8.050781 z"
|
||||||
|
transform="translate(-1.142612,2.9530855)" /><path
|
||||||
|
id="rect35-3"
|
||||||
|
style="fill:#009688;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 11.154297,12.015625 c -0.277007,0 -0.5,0.222993 -0.5,0.5 v 9.050781 c 0,0.0019 -2.2e-5,0.0039 0,0.0059 -2.3e-5,0.002 0,0.0039 0,0.0059 3.45e-4,0.01513 0.0023,0.03016 0.0039,0.04492 0.02282,0.255546 0.234414,0.455078 0.496094,0.455078 h 9.050781 c 0.277007,0 0.5,-0.222993 0.5,-0.5 v -0.002 -9.048828 c 9e-5,-0.0039 0,-0.0078 0,-0.01172 0,-0.277007 -0.222993,-0.5 -0.5,-0.5 z m 0.74375,1 h 7.563281 a 0.24375,0.24375 45 0 1 0.24375,0.24375 v 7.575 a 0.24375,0.24375 135 0 1 -0.24375,0.24375 h -7.563281 a 0.24375,0.24375 45 0 1 -0.24375,-0.24375 v -7.575 a 0.24375,0.24375 135 0 1 0.24375,-0.24375 z"
|
||||||
|
inkscape:path-effect="#path-effect35-7"
|
||||||
|
inkscape:original-d="m 11.154297,12.015625 c -0.277007,0 -0.5,0.222993 -0.5,0.5 v 9.050781 c 0,0.0019 -2.2e-5,0.0039 0,0.0059 -2.3e-5,0.002 0,0.0039 0,0.0059 3.45e-4,0.01513 0.0023,0.03016 0.0039,0.04492 0.02282,0.255546 0.234414,0.455078 0.496094,0.455078 h 9.050781 c 0.277007,0 0.5,-0.222993 0.5,-0.5 v -0.002 -9.048828 c 9e-5,-0.0039 0,-0.0078 0,-0.01172 0,-0.277007 -0.222993,-0.5 -0.5,-0.5 z m 0.5,1 h 8.050781 v 8.0625 h -8.050781 z"
|
||||||
|
transform="translate(10.783203,2.9530855)" /></svg>
|
||||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="1" y="5.5" width="4" height="4" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><rect x="6" y="5.5" width="4" height="4" fill="none" stroke="#009688" stroke-linecap="round" stroke-linejoin="round"/><rect x="11" y="5.5" width="4" height="4" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><path d="M2 12.5h12" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 1.6"/></svg>
|
||||||
|
After Width: | Height: | Size: 568 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="1.5" y="1.5" width="13" height="13" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><path d="M1.5 10c2-3 3.5-3 5 0s3 3 5 0c1-1.5 2-1.5 3-.5" fill="none" stroke="#009688" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||||
|
After Width: | Height: | Size: 346 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M4 6.5h6a3.5 3.5 0 0 1 0 7H6" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><polyline points="6.5 4 4 6.5 6.5 9" fill="none" stroke="#009688" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||||
|
After Width: | Height: | Size: 320 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="2.5" y="2.5" width="11" height="11" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><line x1="1" y1="15" x2="15" y2="1" fill="none" stroke="#009688" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||||
|
After Width: | Height: | Size: 325 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M1.5 5V1.5H5M11 1.5h3.5V5M14.5 11v3.5H11M5 14.5H1.5V11" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><rect x="5.5" y="5.5" width="5" height="5" fill="none" stroke="#009688" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||||
|
After Width: | Height: | Size: 352 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="1.5" y="4.5" width="6" height="7" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><rect x="7.5" y="4.5" width="7" height="7" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><line x1="7.5" y1="4.5" x2="7.5" y2="11.5" stroke="#009688" stroke-width="1.8"/></svg>
|
||||||
|
After Width: | Height: | Size: 410 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="2.5 12.5 6 8 9.5 9.5 13 3.5" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><circle cx="2.5" cy="12.5" r="1.7" fill="#009688"/><circle cx="13" cy="3.5" r="1.7" fill="#009688"/></svg>
|
||||||
|
After Width: | Height: | Size: 314 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polygon points="1.5 13.5 7.5 1.5 13.5 13.5" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><line x1="7.5" y1="1.5" x2="7.5" y2="13.5" stroke="#009688" stroke-width="1.6" stroke-linecap="round" stroke-dasharray="2 1.7"/></svg>
|
||||||
|
After Width: | Height: | Size: 340 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polygon points="1.5 13.5 3.5 2.5 13.5 1.5 12.5 12.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="3.5" y1="2.5" x2="12.5" y2="12.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="3.5" y1="2.5" x2="13.5" y2="1.5" style="fill:none;stroke:#009688;stroke-width:2;stroke-linecap:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 455 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polygon points="0.5 1.5 6.5 0.5 7.5 6.5 1.5 7.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polygon points="9.5 1.5 14.5 2.5 11.5 6.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polygon points="1.5 9.5 5.5 9 6 14.5 0.5 13.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polygon points="8.5 8.5 14.5 7.5 13.5 14.5 7.5 13.5" style="fill:#009688;stroke:#009688;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 576 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polygon points="1.5 13.5 3.5 2.5 13.5 1.5 12.5 12.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="3.5" y1="2.5" x2="12.5" y2="12.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><circle cx="1.5" cy="13.5" r="1" style="fill:#949494"/><circle cx="12.5" cy="12.5" r="1" style="fill:#949494"/><circle cx="3.5" cy="2.5" r="1" style="fill:#949494"/><circle cx="13.5" cy="1.5" r="1.8" style="fill:#009688"/></svg>
|
||||||
|
After Width: | Height: | Size: 564 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M3 2v5.5a5 5 0 0 0 10 0V2" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><path d="M5.4 2v5.5a2.6 2.6 0 0 0 5.2 0V2" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><path d="M3 2h2.4M10.6 2H13" stroke="#009688" stroke-width="2" stroke-linecap="round"/></svg>
|
||||||
|
After Width: | Height: | Size: 410 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="0.5" y="4.5" width="5.5" height="7" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><rect x="10" y="4.5" width="5.5" height="7" fill="none" stroke="#949494" stroke-linecap="round" stroke-linejoin="round"/><line x1="8" y1="3" x2="8" y2="13" stroke="#009688" stroke-dasharray="1.6 1.6"/></svg>
|
||||||
|
After Width: | Height: | Size: 413 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="0.5" y="0.5" width="14" height="14" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M0.5 7.5h14M7.5 0.5v14M0.5 0.5l14 14M14.5 0.5l-14 14" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||||
|
After Width: | Height: | Size: 352 B |
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40"
|
||||||
|
version="1.1"
|
||||||
|
id="svg17"
|
||||||
|
sodipodi:docname="toolbar_big_brush.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs17" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview17"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="5.6568543"
|
||||||
|
inkscape:cx="-13.081475"
|
||||||
|
inkscape:cy="98.994949"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2126"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg17" />
|
||||||
|
<path
|
||||||
|
d="m 33.973006,35.500013 h -0.999987 a 0.500013,0.500013 0 0 1 0,-1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 0 34.473,33.999994 v -5.000013 a 0.5000126,0.5000126 0 0 1 1.000025,0 v 5.000013 a 1.5,1.5 0 0 1 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6" />
|
||||||
|
<path
|
||||||
|
d="M 19.973012,35.500013 H 5.9730109 a 1.5,1.5 0 0 1 -1.5,-1.500019 V 6.000006 a 1.5,1.5 0 0 1 1.5,-1.500019 H 33.973006 a 1.5,1.5 0 0 1 1.500019,1.500019 v 12.999987 a 0.5000126,0.5000126 0 0 1 -1.000025,0 V 6.000006 A 0.49999998,0.49999998 0 0 0 33.973006,5.500012 H 5.9730109 a 0.49999998,0.49999998 0 0 0 -0.499997,0.499994 v 27.999988 a 0.49999998,0.49999998 0 0 0 0.499997,0.499993 H 19.973012 a 0.500013,0.500013 0 0 1 0,1.000026 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999;fill-opacity:1"
|
||||||
|
id="path4-6" />
|
||||||
|
<path
|
||||||
|
id="path30"
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0;stroke-opacity:0;paint-order:stroke fill markers"
|
||||||
|
d="M 30.109375 6.9648438 A 1.8710937 1.8710937 0 0 0 28.705078 7.5996094 A 1.8710937 1.8710937 0 0 0 28.591797 7.7421875 L 18.103516 20.615234 A 6.1070809 6.1070809 0 0 0 17.226562 20.552734 A 6.1070809 6.1070809 0 0 0 11.513672 24.503906 A 6.1070809 6.1070809 0 0 0 11.121094 26.658203 A 6.1070809 6.1070809 0 0 0 11.121094 26.757812 A 4.4931102 4.4931102 0 0 1 11.15625 27.3125 A 4.4931102 4.4931102 0 0 1 7.7890625 31.662109 A 4.4931102 4.4931102 0 0 1 7.5839844 31.708984 A 0.55609465 0.55242634 0 0 0 7.2558594 32.212891 A 0.55609465 0.55242634 0 0 0 7.8105469 32.765625 A 0.55609465 0.55242634 0 0 0 7.8125 32.765625 L 7.9570312 32.765625 L 17.224609 32.765625 L 17.226562 32.765625 A 6.1070809 6.1070809 0 0 0 23.333984 26.658203 A 6.1070809 6.1070809 0 0 0 22.792969 24.144531 L 31.666016 9.875 A 1.8710937 1.8710937 0 0 1 31.638672 9.9101562 A 1.8710937 1.8710937 0 0 0 31.699219 9.8242188 A 1.8710937 1.8710937 0 0 0 31.980469 8.8359375 A 1.8710937 1.8710937 0 0 0 31.724609 7.890625 A 1.8710937 1.8710937 0 0 0 30.480469 7.0019531 A 1.8710937 1.8710937 0 0 0 30.109375 6.9648438 z M 28.525391 7.8476562 A 1.8710937 1.8710937 0 0 0 28.472656 7.9335938 A 1.8710937 1.8710937 0 0 1 28.478516 7.9199219 A 1.8710937 1.8710937 0 0 1 28.525391 7.8476562 z M 30.109375 7.9570312 A 0.87817276 0.87817276 0 0 1 30.988281 8.8359375 A 0.87817276 0.87817276 0 0 1 30.90625 9.2050781 A 0.87817276 0.87817276 0 0 1 30.791016 9.390625 L 29.974609 10.703125 L 22.230469 23.15625 A 6.1070809 6.1070809 0 0 0 19.183594 20.873047 L 28.388672 9.5703125 L 29.359375 8.3808594 A 0.87817276 0.87817276 0 0 1 29.511719 8.1933594 A 0.87817276 0.87817276 0 0 1 30.109375 7.9570312 z M 28.457031 7.9628906 A 1.8710937 1.8710937 0 0 0 28.373047 8.1425781 A 1.8710937 1.8710937 0 0 1 28.457031 7.9628906 z M 28.300781 8.359375 A 1.8710937 1.8710937 0 0 0 28.263672 8.5507812 A 1.8710937 1.8710937 0 0 1 28.298828 8.3613281 A 1.8710937 1.8710937 0 0 1 28.300781 8.359375 z M 17.226562 21.65625 A 5.0022264 5.0022264 0 0 1 22.230469 26.658203 A 5.0022264 5.0022264 0 0 1 17.226562 31.662109 L 13.724609 31.662109 L 10.199219 31.662109 A 5.6057596 5.6057596 0 0 0 11.822266 29.501953 A 5.6057596 5.6057596 0 0 0 12.267578 27.3125 A 5.0022264 5.0022264 0 0 1 12.224609 26.658203 A 5.0022264 5.0022264 0 0 1 12.224609 26.621094 A 5.0022264 5.0022264 0 0 1 17.226562 21.65625 z " />
|
||||||
|
<rect
|
||||||
|
style="fill:#b6b6b6;fill-opacity:1;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;paint-order:stroke fill markers"
|
||||||
|
id="rect40"
|
||||||
|
width="15.363631"
|
||||||
|
height="1.000026"
|
||||||
|
x="18.609375"
|
||||||
|
y="34.499989" />
|
||||||
|
<rect
|
||||||
|
style="fill:#b6b6b6;fill-opacity:1;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;paint-order:stroke fill markers"
|
||||||
|
id="rect41"
|
||||||
|
width="1.000025"
|
||||||
|
height="11.921875"
|
||||||
|
x="34.473"
|
||||||
|
y="18.546875" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1,97 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40"
|
||||||
|
version="1.1"
|
||||||
|
id="svg17"
|
||||||
|
sodipodi:docname="toolbar_face.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs17">
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect48"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,1.0055868,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1.4911902,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1.0376412,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect47"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
radius="0"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview17"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="22.627417"
|
||||||
|
inkscape:cx="23.113553"
|
||||||
|
inkscape:cy="18.318485"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2126"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg17" />
|
||||||
|
<path
|
||||||
|
d="m 33.973006,35.500013 h -0.999987 a 0.500013,0.500013 0 0 1 0,-1.000026 h 0.999987 A 0.49999998,0.49999998 0 0 0 34.473,33.999994 v -5.000013 a 0.5000126,0.5000126 0 0 1 1.000025,0 v 5.000013 a 1.5,1.5 0 0 1 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6" />
|
||||||
|
<path
|
||||||
|
d="M 19.973012,35.500013 H 5.9730109 a 1.5,1.5 0 0 1 -1.5,-1.500019 V 6.000006 a 1.5,1.5 0 0 1 1.5,-1.500019 H 33.973006 a 1.5,1.5 0 0 1 1.500019,1.500019 v 12.999987 a 0.5000126,0.5000126 0 0 1 -1.000025,0 V 6.000006 A 0.49999998,0.49999998 0 0 0 33.973006,5.500012 H 5.9730109 a 0.49999998,0.49999998 0 0 0 -0.499997,0.499994 v 27.999988 a 0.49999998,0.49999998 0 0 0 0.499997,0.499993 H 19.973012 a 0.500013,0.500013 0 0 1 0,1.000026 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999;fill-opacity:1"
|
||||||
|
id="path4-6" />
|
||||||
|
<rect
|
||||||
|
style="fill:#b6b6b6;fill-opacity:1;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;paint-order:stroke fill markers"
|
||||||
|
id="rect40"
|
||||||
|
width="15.363631"
|
||||||
|
height="1.000026"
|
||||||
|
x="18.609375"
|
||||||
|
y="34.499989" />
|
||||||
|
<rect
|
||||||
|
style="fill:#b6b6b6;fill-opacity:1;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;paint-order:stroke fill markers"
|
||||||
|
id="rect41"
|
||||||
|
width="1.000025"
|
||||||
|
height="11.921875"
|
||||||
|
x="34.473"
|
||||||
|
y="18.546875" />
|
||||||
|
<path
|
||||||
|
id="path42"
|
||||||
|
style="fill:#009688;stroke-width:0;stroke-opacity:0;paint-order:stroke fill markers;fill-opacity:1"
|
||||||
|
d="M 19.58431,7.9401469 19.519531,8.0820312 9.1699219,30.736328 a 0.61329334,0.61329334 42.827026 0 0 0.828125,0.767578 l 0,0 20.7832031,-7.320312 0.0019,-6.61e-4 a 0.7874119,0.7874119 107.77086 0 0 0.382891,-1.194652 L 20.714844,8.0449219 20.578195,7.8494958 A 0.57476577,0.57476577 174.78854 0 0 19.58431,7.9401469 Z M 20.232422,9.1015625 30.1875,23.332031 10.576172,30.240234 Z"
|
||||||
|
inkscape:path-effect="#path-effect48"
|
||||||
|
inkscape:original-d="M 20.001953,7.0253906 19.519531,8.0820312 9.1699219,30.736328 8.5917969,32 9.9980469,31.503906 30.78125,24.183594 31.761719,23.837891 31.166016,22.988281 20.714844,8.0449219 Z M 20.232422,9.1015625 30.1875,23.332031 10.576172,30.240234 Z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.4 KiB |
@@ -0,0 +1,240 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40"
|
||||||
|
version="1.1"
|
||||||
|
id="svg17"
|
||||||
|
sodipodi:docname="toolbar_texture_displacement.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs17" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview17"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="32"
|
||||||
|
inkscape:cx="27.578125"
|
||||||
|
inkscape:cy="27.671875"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2126"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg17" />
|
||||||
|
<g
|
||||||
|
id="g17"
|
||||||
|
transform="translate(0.69176086,0.249987)">
|
||||||
|
<path
|
||||||
|
d="m 27.659236,35.176022 h -4.399987 c -0.508996,0 -0.844996,0 -0.954999,-0.394015 a 0.59299998,0.59299998 0 0 1 0.36,-0.669997 2.3,2.3 0 0 0 1.2,-2.188989 3.253,3.253 0 1 1 3.800012,3.205984 z M 24.12125,34.175997 h 2.988 a 2.253,2.253 0 1 0 -2.252999,-2.252976 3.445,3.445 0 0 1 -0.735001,2.252976 z"
|
||||||
|
style="fill:#009688;stroke-width:0.999999"
|
||||||
|
id="path1-6" />
|
||||||
|
<path
|
||||||
|
d="m 30.281245,30.538996 -0.846009,-0.534993 4.364031,-6.899981 A 0.222,0.222 0 0 0 33.439456,22.84588 l -5.4,6.644032 -0.776013,-0.63103 5.400001,-6.643994 a 1.222,1.222 0 0 1 1.981984,1.422992 z"
|
||||||
|
style="fill:#009688;stroke-width:0.999999"
|
||||||
|
id="path2-0" />
|
||||||
|
<path
|
||||||
|
d="m 33.281245,35.250026 h -0.999987 a 0.500013,0.500013 0 0 1 0,-1.000026 h 0.999987 a 0.49999998,0.49999998 0 0 0 0.499994,-0.499993 v -5.000013 a 0.5000126,0.5000126 0 0 1 1.000025,0 v 5.000013 a 1.5,1.5 0 0 1 -1.500019,1.500019 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path3-6" />
|
||||||
|
<path
|
||||||
|
d="M 19.281251,35.250026 H 5.28125 a 1.5,1.5 0 0 1 -1.5,-1.500019 V 5.750019 A 1.5,1.5 0 0 1 5.28125,4.25 h 27.999995 a 1.5,1.5 0 0 1 1.500019,1.500019 v 12.999987 a 0.5000126,0.5000126 0 0 1 -1.000025,0 V 5.750019 A 0.49999998,0.49999998 0 0 0 33.281245,5.250025 H 5.28125 A 0.49999998,0.49999998 0 0 0 4.781253,5.750019 V 33.750007 A 0.49999998,0.49999998 0 0 0 5.28125,34.25 h 14.000001 a 0.500013,0.500013 0 0 1 0,1.000026 z"
|
||||||
|
style="fill:#b6b6b6;stroke-width:0.999999"
|
||||||
|
id="path4-6" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:1.00157;stroke-dasharray:none"
|
||||||
|
id="rect6-1"
|
||||||
|
width="39.379108"
|
||||||
|
height="0.99609375"
|
||||||
|
x="-19.909107"
|
||||||
|
y="27.094706"
|
||||||
|
ry="0.49804688"
|
||||||
|
transform="rotate(-45)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:1.00157;stroke-dasharray:none"
|
||||||
|
id="rect6-2"
|
||||||
|
width="27.566595"
|
||||||
|
height="0.99609375"
|
||||||
|
x="7.9031763"
|
||||||
|
y="-0.27849278"
|
||||||
|
ry="0.49487707"
|
||||||
|
transform="rotate(45)" />
|
||||||
|
<g
|
||||||
|
id="g7"
|
||||||
|
transform="matrix(3.7795276,0,0,3.7795276,-350.69182,-427.25001)">
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2"
|
||||||
|
width="2.8453603"
|
||||||
|
height="0.2635498"
|
||||||
|
x="150.08304"
|
||||||
|
y="13.289762"
|
||||||
|
ry="0.1317749"
|
||||||
|
transform="rotate(45)"
|
||||||
|
rx="0.1317749" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-2"
|
||||||
|
width="1.7498204"
|
||||||
|
height="0.2635498"
|
||||||
|
x="12.763216"
|
||||||
|
y="-149.44461"
|
||||||
|
ry="0.1317749"
|
||||||
|
transform="rotate(135)"
|
||||||
|
rx="0.1317749" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-2-2"
|
||||||
|
width="0.82876241"
|
||||||
|
height="0.27337581"
|
||||||
|
x="13.654455"
|
||||||
|
y="-148.49495"
|
||||||
|
ry="0.1317749"
|
||||||
|
transform="rotate(135)"
|
||||||
|
rx="0.1317749" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-6"
|
||||||
|
width="2.5927844"
|
||||||
|
height="0.25224927"
|
||||||
|
x="150.38367"
|
||||||
|
y="12.286384"
|
||||||
|
ry="0.12612464"
|
||||||
|
transform="rotate(45)"
|
||||||
|
rx="0.12612464" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-6-1"
|
||||||
|
width="1.9647908"
|
||||||
|
height="0.2635498"
|
||||||
|
x="151.01166"
|
||||||
|
y="11.21043"
|
||||||
|
ry="0.1317749"
|
||||||
|
transform="rotate(45)"
|
||||||
|
rx="0.1317749" />
|
||||||
|
</g>
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:1.00157;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-8"
|
||||||
|
width="10.754118"
|
||||||
|
height="0.99609375"
|
||||||
|
x="-10.211728"
|
||||||
|
y="-31.661213"
|
||||||
|
ry="0.49804688"
|
||||||
|
transform="rotate(135)"
|
||||||
|
rx="0.49804688" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:1.00157;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-2-9"
|
||||||
|
width="6.6134944"
|
||||||
|
height="0.99609375"
|
||||||
|
x="-33.794979"
|
||||||
|
y="12.679931"
|
||||||
|
ry="0.49804688"
|
||||||
|
transform="rotate(-135)"
|
||||||
|
rx="0.49804688" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:1.00157;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-2-2-3"
|
||||||
|
width="3.1323304"
|
||||||
|
height="1.0332314"
|
||||||
|
x="-30.282875"
|
||||||
|
y="16.213961"
|
||||||
|
ry="0.49804688"
|
||||||
|
transform="rotate(-135)"
|
||||||
|
rx="0.49804688" />
|
||||||
|
<g
|
||||||
|
id="g7-1"
|
||||||
|
transform="matrix(0,-3.7795276,3.7795276,0,-427.55829,389.70233)">
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-9"
|
||||||
|
width="2.8453603"
|
||||||
|
height="0.2635498"
|
||||||
|
x="150.08304"
|
||||||
|
y="13.289762"
|
||||||
|
ry="0.1317749"
|
||||||
|
transform="rotate(45)"
|
||||||
|
rx="0.1317749" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-2-8"
|
||||||
|
width="1.7498204"
|
||||||
|
height="0.2635498"
|
||||||
|
x="12.763216"
|
||||||
|
y="-149.44461"
|
||||||
|
ry="0.1317749"
|
||||||
|
transform="rotate(135)"
|
||||||
|
rx="0.1317749" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-2-2-6"
|
||||||
|
width="0.82876241"
|
||||||
|
height="0.27337581"
|
||||||
|
x="13.654455"
|
||||||
|
y="-148.49495"
|
||||||
|
ry="0.1317749"
|
||||||
|
transform="rotate(135)"
|
||||||
|
rx="0.1317749" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-6-5"
|
||||||
|
width="2.5927844"
|
||||||
|
height="0.25224927"
|
||||||
|
x="150.38367"
|
||||||
|
y="12.286384"
|
||||||
|
ry="0.12612464"
|
||||||
|
transform="rotate(45)"
|
||||||
|
rx="0.12612464" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:0.264999;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-6-1-0"
|
||||||
|
width="1.9647908"
|
||||||
|
height="0.2635498"
|
||||||
|
x="151.01166"
|
||||||
|
y="11.21043"
|
||||||
|
ry="0.1317749"
|
||||||
|
transform="rotate(45)"
|
||||||
|
rx="0.1317749" />
|
||||||
|
</g>
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:1.00157;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-9-4"
|
||||||
|
width="9.0822706"
|
||||||
|
height="0.99609375"
|
||||||
|
x="-36.379971"
|
||||||
|
y="-4.5927153"
|
||||||
|
ry="0.49804688"
|
||||||
|
transform="rotate(-135)"
|
||||||
|
rx="0.49804688" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:1.00157;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-6-5-5"
|
||||||
|
width="9.7995005"
|
||||||
|
height="0.95338309"
|
||||||
|
x="-36.915619"
|
||||||
|
y="-8.385005"
|
||||||
|
ry="0.47669154"
|
||||||
|
transform="rotate(-135)"
|
||||||
|
rx="0.47669154" />
|
||||||
|
<rect
|
||||||
|
style="fill:#009688;fill-opacity:1;stroke-width:1.00157;stroke-dasharray:none"
|
||||||
|
id="rect6-2-2-6-1-0-0"
|
||||||
|
width="7.425981"
|
||||||
|
height="0.99609375"
|
||||||
|
x="-34.54211"
|
||||||
|
y="-12.451604"
|
||||||
|
ry="0.49804688"
|
||||||
|
transform="rotate(-135)"
|
||||||
|
rx="0.49804688" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 263 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 242 KiB |
|
Before Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 242 KiB |
|
Before Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 233 KiB |
|
Before Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 301 KiB |
|
Before Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 235 KiB |
@@ -1,155 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "CR-ABS @Ender-2 Pro-all",
|
|
||||||
"inherits": "fdm_filament_abs",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "xXPIfJOKtSIkbgSZ",
|
|
||||||
"filament_id": "OFGwZmgS",
|
|
||||||
"instantiation": "true",
|
|
||||||
"activate_air_filtration": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"additional_cooling_fan_speed": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"complete_print_exhaust_fan_speed": [
|
|
||||||
"80"
|
|
||||||
],
|
|
||||||
"during_print_exhaust_fan_speed": [
|
|
||||||
"60"
|
|
||||||
],
|
|
||||||
"fan_max_speed": [
|
|
||||||
"20"
|
|
||||||
],
|
|
||||||
"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": [
|
|
||||||
"250"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_initial_layer": [
|
|
||||||
"250"
|
|
||||||
],
|
|
||||||
"overhang_fan_speed": [
|
|
||||||
"100"
|
|
||||||
],
|
|
||||||
"overhang_fan_threshold": [
|
|
||||||
"50%"
|
|
||||||
],
|
|
||||||
"reduce_fan_stop_start_freq": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"required_nozzle_HRC": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"slow_down_layer_time": [
|
|
||||||
"20"
|
|
||||||
],
|
|
||||||
"textured_plate_temp": [
|
|
||||||
"100"
|
|
||||||
],
|
|
||||||
"textured_plate_temp_initial_layer": [
|
|
||||||
"100"
|
|
||||||
],
|
|
||||||
"filament_start_gcode": [
|
|
||||||
";filament start gcode\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",
|
|
||||||
"customized_plate_temp": "80",
|
|
||||||
"customized_plate_temp_initial_layer": "80",
|
|
||||||
"default_filament_colour": "\"\"",
|
|
||||||
"enable_overhang_bridge_fan": "1",
|
|
||||||
"enable_pressure_advance": "0",
|
|
||||||
"epoxy_resin_plate_temp": "0",
|
|
||||||
"epoxy_resin_plate_temp_initial_layer": "0",
|
|
||||||
"filament_cooling_final_speed": "3.4",
|
|
||||||
"filament_cooling_initial_speed": "2.2",
|
|
||||||
"filament_cooling_moves": "4",
|
|
||||||
"filament_loading_speed": "28",
|
|
||||||
"filament_loading_speed_start": "3",
|
|
||||||
"filament_multitool_ramming": "0",
|
|
||||||
"filament_multitool_ramming_flow": "10",
|
|
||||||
"filament_multitool_ramming_volume": "10",
|
|
||||||
"filament_notes": "\"\"",
|
|
||||||
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
|
|
||||||
"filament_retract_lift_above": "nil",
|
|
||||||
"filament_retract_lift_below": "nil",
|
|
||||||
"filament_retract_lift_enforce": "nil",
|
|
||||||
"filament_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.5,200],[7.0,240]]",
|
|
||||||
"pressure_advance": "0.02",
|
|
||||||
"support_material_interface_fan_speed": "-1",
|
|
||||||
"compatible_printers": [
|
|
||||||
"Creality Ender-2 Pro 0.4 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "CR-ABS @Ender-3 S1 Plus-all",
|
|
||||||
"inherits": "fdm_filament_abs",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "41fKjFexWC3Zh7XZ",
|
|
||||||
"filament_id": "OFGwZmgS",
|
|
||||||
"instantiation": "true",
|
|
||||||
"activate_air_filtration": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"additional_cooling_fan_speed": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"complete_print_exhaust_fan_speed": [
|
|
||||||
"80"
|
|
||||||
],
|
|
||||||
"during_print_exhaust_fan_speed": [
|
|
||||||
"60"
|
|
||||||
],
|
|
||||||
"fan_cooling_layer_time": [
|
|
||||||
"35"
|
|
||||||
],
|
|
||||||
"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": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"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"
|
|
||||||
],
|
|
||||||
"required_nozzle_HRC": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"slow_down_layer_time": [
|
|
||||||
"5"
|
|
||||||
],
|
|
||||||
"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",
|
|
||||||
"default_filament_colour": "\"\"",
|
|
||||||
"enable_overhang_bridge_fan": "1",
|
|
||||||
"enable_pressure_advance": "0",
|
|
||||||
"epoxy_resin_plate_temp": "0",
|
|
||||||
"epoxy_resin_plate_temp_initial_layer": "0",
|
|
||||||
"filament_cooling_final_speed": "3.4",
|
|
||||||
"filament_cooling_initial_speed": "2.2",
|
|
||||||
"filament_cooling_moves": "4",
|
|
||||||
"filament_loading_speed": "28",
|
|
||||||
"filament_loading_speed_start": "3",
|
|
||||||
"filament_multitool_ramming": "0",
|
|
||||||
"filament_multitool_ramming_flow": "10",
|
|
||||||
"filament_multitool_ramming_volume": "10",
|
|
||||||
"filament_notes": "\"\"",
|
|
||||||
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.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.5,200],[7.0,240]]",
|
|
||||||
"pressure_advance": "0.02",
|
|
||||||
"support_material_interface_fan_speed": "-1",
|
|
||||||
"compatible_printers": [
|
|
||||||
"Creality Ender-3 S1 Plus 0.4 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "CR-ABS @Ender-3 S1 Pro-all",
|
|
||||||
"inherits": "fdm_filament_abs",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "SDigCIbuTDRn8b96",
|
|
||||||
"filament_id": "OFGwZmgS",
|
|
||||||
"instantiation": "true",
|
|
||||||
"activate_air_filtration": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"additional_cooling_fan_speed": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"complete_print_exhaust_fan_speed": [
|
|
||||||
"80"
|
|
||||||
],
|
|
||||||
"during_print_exhaust_fan_speed": [
|
|
||||||
"60"
|
|
||||||
],
|
|
||||||
"fan_cooling_layer_time": [
|
|
||||||
"35"
|
|
||||||
],
|
|
||||||
"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": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"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"
|
|
||||||
],
|
|
||||||
"required_nozzle_HRC": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"slow_down_layer_time": [
|
|
||||||
"5"
|
|
||||||
],
|
|
||||||
"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",
|
|
||||||
"default_filament_colour": "\"\"",
|
|
||||||
"enable_overhang_bridge_fan": "1",
|
|
||||||
"enable_pressure_advance": "0",
|
|
||||||
"epoxy_resin_plate_temp": "0",
|
|
||||||
"epoxy_resin_plate_temp_initial_layer": "0",
|
|
||||||
"filament_cooling_final_speed": "3.4",
|
|
||||||
"filament_cooling_initial_speed": "2.2",
|
|
||||||
"filament_cooling_moves": "4",
|
|
||||||
"filament_loading_speed": "28",
|
|
||||||
"filament_loading_speed_start": "3",
|
|
||||||
"filament_multitool_ramming": "0",
|
|
||||||
"filament_multitool_ramming_flow": "10",
|
|
||||||
"filament_multitool_ramming_volume": "10",
|
|
||||||
"filament_notes": "\"\"",
|
|
||||||
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.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.5,200],[7.0,240]]",
|
|
||||||
"pressure_advance": "0.02",
|
|
||||||
"support_material_interface_fan_speed": "-1",
|
|
||||||
"compatible_printers": [
|
|
||||||
"Creality Ender-3 S1 Pro 0.4 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "CR-ABS @Ender-3 S1 Sonic-all",
|
|
||||||
"inherits": "fdm_filament_abs",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "jYdpNiDMaOz2Ay6R",
|
|
||||||
"filament_id": "OFGwZmgS",
|
|
||||||
"instantiation": "true",
|
|
||||||
"activate_air_filtration": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"additional_cooling_fan_speed": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"complete_print_exhaust_fan_speed": [
|
|
||||||
"80"
|
|
||||||
],
|
|
||||||
"during_print_exhaust_fan_speed": [
|
|
||||||
"60"
|
|
||||||
],
|
|
||||||
"fan_cooling_layer_time": [
|
|
||||||
"35"
|
|
||||||
],
|
|
||||||
"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": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"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"
|
|
||||||
],
|
|
||||||
"required_nozzle_HRC": [
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"slow_down_layer_time": [
|
|
||||||
"5"
|
|
||||||
],
|
|
||||||
"filament_start_gcode": [
|
|
||||||
";filament start 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",
|
|
||||||
"default_filament_colour": "\"\"",
|
|
||||||
"enable_overhang_bridge_fan": "1",
|
|
||||||
"enable_pressure_advance": "0",
|
|
||||||
"epoxy_resin_plate_temp": "0",
|
|
||||||
"epoxy_resin_plate_temp_initial_layer": "0",
|
|
||||||
"filament_cooling_final_speed": "3.4",
|
|
||||||
"filament_cooling_initial_speed": "2.2",
|
|
||||||
"filament_cooling_moves": "4",
|
|
||||||
"filament_loading_speed": "28",
|
|
||||||
"filament_loading_speed_start": "3",
|
|
||||||
"filament_multitool_ramming": "0",
|
|
||||||
"filament_multitool_ramming_flow": "10",
|
|
||||||
"filament_multitool_ramming_volume": "10",
|
|
||||||
"filament_notes": "\"\"",
|
|
||||||
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.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.5,200],[7.0,240]]",
|
|
||||||
"pressure_advance": "0.02",
|
|
||||||
"support_material_interface_fan_speed": "-1",
|
|
||||||
"compatible_printers": [
|
|
||||||
"Creality Ender-3 S1 Sonic 0.4 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||