|
@@ -0,0 +1,108 @@
|
|
|
|
|
+# VisiCut settings — FabLab Rothenburg
|
|
|
|
|
+
|
|
|
|
|
+Inhalt des VisiCut-Einstellungsordners (`~/.visicut`): Geräte, Materialien, Profile und die
|
|
|
|
|
+getesteten Laserparameter je Material und Dicke.
|
|
|
|
|
+
|
|
|
|
|
+Installation: Inhalt nach `~/.visicut` kopieren (oder das Repo dorthin klonen) und VisiCut starten.
|
|
|
|
|
+
|
|
|
|
|
+## Ordner
|
|
|
|
|
+
|
|
|
|
|
+| Ordner | Inhalt |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| `devices/` | Lasercutter (`LaserDevice`), inkl. Kamera-Homographie |
|
|
|
|
|
+| `materials/` | Materialien (`MaterialProfile`) + Vorschaubild `<name>.png` |
|
|
|
|
|
+| `profiles/` | Bearbeitungsarten: `cut`, `mark`, `engrave`, `engrave 3d` |
|
|
|
|
|
+| `laserprofiles/<Gerät>/<Material>/<Dicke>mm/<Profil>.xml` | Leistung / Geschwindigkeit / Fokus / Frequenz |
|
|
|
|
|
+| `settings/` | VisiCut-Voreinstellungen |
|
|
|
|
|
+| `tools/` | Prüf- und Hilfsskripte (nicht von VisiCut gelesen) |
|
|
|
|
|
+
|
|
|
|
|
+## Namensregel — wichtig
|
|
|
|
|
+
|
|
|
|
|
+VisiCut baut die Pfade unter `laserprofiles/` aus den **Namen** von Gerät, Material und Profil,
|
|
|
|
|
+nicht aus den Dateinamen. Umgewandelt wird mit `Helper.toPathName()`
|
|
|
|
|
+([Helper.java](https://github.com/t-oster/VisiCut/blob/master/src/main/java/de/thomas_oster/visicut/misc/Helper.java)):
|
|
|
|
|
+Alles außer `A–Z a–z 0–9 . -` wird durch `_<ASCII-Code>_` ersetzt.
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+Leerzeichen -> _32_ ( -> _40_ ) -> _41_ ü -> _252_
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+Also:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+<name>Sperrholz Birke</name> -> materials/Sperrholz_32_Birke.xml
|
|
|
|
|
+ -> laserprofiles/Epilog_32_ZING/Sperrholz_32_Birke/3.0mm/cut.xml
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+`Sperrholz_Birke/` (ohne `_32_`) findet VisiCut **nicht** — die Einstellungen sind dann still weg,
|
|
|
|
|
+ohne Fehlermeldung. `materials/*.xml` benennt VisiCut beim Laden selbst um, die Ordner unter
|
|
|
|
|
+`laserprofiles/` **nicht**. Deshalb nach jeder Änderung von Hand:
|
|
|
|
|
+
|
|
|
|
|
+```sh
|
|
|
|
|
+python3 tools/validate.py .
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+Das Skript prüft Dateinamen, XML, Dicken, Property-Klassen, Wertebereiche und fehlende
|
|
|
|
|
+Einstellungen und gibt bei sauberem Stand `TOTAL: 0 problems` aus.
|
|
|
|
|
+
|
|
|
|
|
+Die Dicke im Ordnernamen ist `Float.toString()` + `mm`, also `3.0mm`, `0.55mm`, `6.5mm` —
|
|
|
|
|
+nicht `3mm`. Sie muss in `<materialThicknesses>` des Materials stehen, sonst wird sie
|
|
|
|
|
+im Auswahlfeld gar nicht angeboten.
|
|
|
|
|
+
|
|
|
|
|
+## Property-Klassen (Epilog Zing)
|
|
|
|
|
+
|
|
|
|
|
+| Profil | Typ | XML-Element | Felder |
|
|
|
|
|
+|---|---|---|---|
|
|
|
|
|
+| `cut`, `mark` | `vectorProfile` | `<PowerSpeedFocusFrequencyProperty>` | power, speed, focus, frequency |
|
|
|
|
|
+| `engrave` | `rasterProfile` | `<PowerSpeedFocusProperty>` | power, speed, focus |
|
|
|
|
|
+| `engrave 3d` | `raster3dProfile` | `<PowerSpeedFocusProperty>` | power, speed, focus |
|
|
|
|
|
+
|
|
|
|
|
+`LaserPropertyManager` registriert XStream-Aliase nur für `PowerSpeedFocusProperty`,
|
|
|
|
|
+`PowerSpeedFocusFrequencyProperty`, `FloatPowerSpeedFocusFrequencyProperty` und
|
|
|
|
|
+`LaosCutterProperty`. Andere Kurznamen (z. B. `EpilogEngraveProperty`) lassen sich **nicht**
|
|
|
|
|
+laden. Den `EpilogEngraveProperty`, den der Epilog-Treiber für Raster-Teile erwartet, baut
|
|
|
|
|
+VisiCut beim Laden selbst aus dem `PowerSpeedFocusProperty` — `frequency` gehört dort nicht
|
|
|
|
|
+hinein und geht sonst verloren.
|
|
|
|
|
+
|
|
|
|
|
+Mehrere Einträge in einer `<linked-list>` = mehrere Durchgänge.
|
|
|
|
|
+`frequency` wird von liblasercut auf 10–5000 Hz begrenzt, power/speed sind Prozent.
|
|
|
|
|
+
|
|
|
|
|
+`settings/settings.xml` hat `useThicknessAsFocusOffset=true`: VisiCut addiert die Materialdicke
|
|
|
|
|
+zum `focus`-Wert. `focus` in den Profilen ist also ein **Offset** in mm, kein Absolutwert.
|
|
|
|
|
+
|
|
|
|
|
+## Neues Material anlegen
|
|
|
|
|
+
|
|
|
|
|
+Am einfachsten in VisiCut selbst (Einstellungen → Material verwalten, dann Laserparameter
|
|
|
|
|
+im Hauptfenster speichern) — dann stimmen alle Pfade automatisch. Von Hand:
|
|
|
|
|
+
|
|
|
|
|
+```sh
|
|
|
|
|
+python3 - <<'EOF'
|
|
|
|
|
+name, thick = "Neues Material", ["3.0"]
|
|
|
|
|
+ALLOWED = set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-")
|
|
|
|
|
+print("".join(c if c in ALLOWED else "_%d_" % ord(c) for c in name))
|
|
|
|
|
+EOF
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+… und den ausgegebenen Namen für `materials/<x>.xml` und `laserprofiles/<Gerät>/<x>/` verwenden.
|
|
|
|
|
+Danach `tools/validate.py` laufen lassen.
|
|
|
|
|
+
|
|
|
|
|
+## Vorschaubilder
|
|
|
|
|
+
|
|
|
|
|
+`materials/<name>.png` wird von VisiCut automatisch gefunden. Herkunft und Lizenz je Bild:
|
|
|
|
|
+[`materials/CREDITS.md`](materials/CREDITS.md). Neu erzeugen: `python3 tools/make_thumbnails.py`
|
|
|
|
|
+(braucht `requests` und `Pillow`).
|
|
|
|
|
+
|
|
|
|
|
+## Herkunft der Parameter
|
|
|
|
|
+
|
|
|
|
|
+* [FabLab Rothenburg – Lasercutter](https://wiki.fablab-rothenburg.de/index.php/Lasercutter) —
|
|
|
|
|
+ die im Lab selbst getesteten Werte. Bei Abweichungen gilt das Wiki.
|
|
|
|
|
+* [FabLab Region Nürnberg – ZING 4030](https://wiki.fablab-nuernberg.de/w/ZING_4030) —
|
|
|
|
|
+ gleiche Maschinenklasse (Zing, 30 W); deckt sich u. a. bei Sperrholz Birke und Leder.
|
|
|
|
|
+
|
|
|
|
|
+Alle übrigen Werte sind **nicht** gegen eine dieser Quellen belegt. Vor dem ersten Job auf
|
|
|
|
|
+einem neuen Material: Testschnitt auf Verschnitt.
|
|
|
|
|
+
|
|
|
|
|
+## Nicht lasern
|
|
|
|
|
+
|
|
|
|
|
+PVC, Vinyl, ABS, Polycarbonat, HDPE, Polystyrol — siehe Hinweistext in
|
|
|
|
|
+`devices/Epilog_32_ZING_32__40_FabLab_32_Rothenburg_41_.xml`.
|