Initial commit: DOSSIER Hugo website
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
---
|
||||
title: Dokumentation
|
||||
linkTitle: Dokumentation
|
||||
next: docs/erste-schritte
|
||||
weight: 1
|
||||
sidebar:
|
||||
open: true
|
||||
---
|
||||
|
||||
Willkommen zur DOSSIER-Dokumentation. DOSSIER ist ein **Rhino 8 Plugin** für architektonisches Entwerfen mit smarten Bauteilen — Teil von **OpenBureau**.
|
||||
|
||||
{{< cards >}}
|
||||
{{< card link="erste-schritte" title="Erste Schritte" icon="play" subtitle="Installation, Setup, erster Workflow." >}}
|
||||
{{< card link="../features" title="Features" icon="cube" subtitle="Alle Panels und ihre Funktionen." >}}
|
||||
{{< card link="../launcher" title="Launcher" icon="desktop-computer" subtitle="Standalone-App für Projekte und Settings." >}}
|
||||
{{< card link="architektur" title="Architektur" icon="template" subtitle="Module, Bridge-Pattern, Sticky-Storage." >}}
|
||||
{{< card link="roadmap" title="Roadmap" icon="map" subtitle="Erledigt, in Arbeit, geplant." >}}
|
||||
{{< card link="../faq" title="FAQ" icon="question-mark-circle" subtitle="Häufige Fragen und Antworten." >}}
|
||||
{{< /cards >}}
|
||||
|
||||
## Auf einen Blick
|
||||
|
||||
Dossier bündelt den gesamten architektonischen Workflow in Rhino:
|
||||
|
||||
- **Modellieren** mit smarten Bauteilen (Source ↔ Volume Pattern, Wand v1 mit Polyline-Achse)
|
||||
- **Strukturieren** über Geschosse, Multi-Geschoss-Clipping und eine automatische Layer-Hierarchie
|
||||
- **Schneiden & Anschauen** mit der vollen Section-Style-API und Schnitt-Perspektive
|
||||
- **Material- & Symbol-verwalten** projektzentral aus den Project-Settings (PBR-Texturen, 2D+3D-Symbol-Pairs)
|
||||
- **Auswerten** nach SIA 416 (HNF / NNF / FF / VF)
|
||||
- **Darstellen** mit Massstab, Display-Modes und Overrides
|
||||
- **Beschriften** mit Bemassung, Raumstempeln und Rich-Text
|
||||
- **Ausgeben** als Plan-Set in PDF oder PNG
|
||||
|
||||
## Laufzeit
|
||||
|
||||
DOSSIER läuft als **CPython 3.9** über Rhinos neuen Python-3-Engine. Die UI wird in einem React-WebView-Panel über Rhinos Eto.Forms-Layer eingebettet (inline via `LoadHtml`).
|
||||
|
||||
Lese die [Architektur-Übersicht](architektur) für Details zum Bridge-Pattern und den Sticky-Storage-Konventionen.
|
||||
@@ -0,0 +1,142 @@
|
||||
---
|
||||
title: Architektur
|
||||
linkTitle: Architektur
|
||||
weight: 2
|
||||
---
|
||||
|
||||
DOSSIER ist als **Plugin-Verbund** aufgebaut: jedes Feature lebt in einem eigenen Modul, alle teilen sich ein gemeinsames Bridge-Pattern für die React-↔-Python-Kommunikation.
|
||||
|
||||
## Module-Map
|
||||
|
||||
| Modul | LOC | Rolle |
|
||||
|----------------------|------:|----------------------------------------------------------------|
|
||||
| `panel_base.py` | 697 | Fundament: BaseBridge, WebView-IO, Panel-Registration, Icons |
|
||||
| `rhinopanel.py` | 798 | EBENEN — Zeichnungsebenen, Layer-Hierarchie, Presets |
|
||||
| `elemente.py` | 7'244 | ELEMENTE — Wände, Decken, Öffnungen, Treppen, Tragwerk, Räume |
|
||||
| `gestaltung.py` | 1'635 | GESTALTUNG — Selektions-Attribute (Farbe, Lineweight, Hatch) |
|
||||
| `oberleiste.py` | 981 | OBERLEISTE — Top-Bar, Display, Massstab, Snaps, Settings |
|
||||
| `massstab.py` | 1'096 | MASSSTAB — Viewport 1:N, Auto-DPI, PlotWeight |
|
||||
| `overrides.py` | 797 | Engine — regelbasierte Overrides (Bedingung → Aktion) |
|
||||
| `overrides_panel.py` | 226 | UI für Overrides-Engine |
|
||||
| `ausschnitte.py` | 708 | AUSSCHNITTE — Viewport-Snapshots (Kamera + Display + Layer) |
|
||||
| `dimensionen.py` | 613 | DIMENSIONEN — Bemassung (Wand-Dicken, Geschoss-Höhen, …) |
|
||||
| `layouts.py` | 749 | LAYOUTS — Plan-Editor, Titelblock, PDF-Export |
|
||||
| `werkzeuge.py` | 58 | WERKZEUGE — Quick-Tools (Batch) |
|
||||
| `layer_builder.py` | 436 | Helper — Ebenen-Hierarchie aufbauen, Sublayer-Sync |
|
||||
| `startup.py` | 136 | Init — liest `dossier.project.json`, lädt Module selektiv |
|
||||
|
||||
## Tragende Patterns
|
||||
|
||||
### Bridge-Pattern (Pflicht für jedes Panel)
|
||||
|
||||
```python
|
||||
class MyBridge(panel_base.BaseBridge):
|
||||
def __init__(self):
|
||||
panel_base.BaseBridge.__init__(self, "mymodule")
|
||||
|
||||
def _on_ready(self):
|
||||
self.send("STATE_SYNC", {...}) # WebView fertig geladen
|
||||
|
||||
def handle(self, data):
|
||||
t = data.get("type")
|
||||
if t == "ACTION": self._do_action()
|
||||
|
||||
def _bridge_factory():
|
||||
b = MyBridge()
|
||||
_install_listeners(b) # Rhino-Events registrieren
|
||||
return b
|
||||
|
||||
panel_base.register_and_open(
|
||||
"mymodule", "MY PANEL", PANEL_GUID_STR,
|
||||
_bridge_factory,
|
||||
icon_spec=("foundation", "#5fa896"), # Material-Icon + Petrol
|
||||
min_size=(400, 300),
|
||||
)
|
||||
```
|
||||
|
||||
### React ↔ Python Kommunikation
|
||||
|
||||
- **React → Python**: `document.title = "RHINOMSG::{json}"` — gepollt im Idle-Handler
|
||||
- **Python → React**: `bridge.send(type, payload)` → `webview.ExecuteScript("window.onRhinoMessage(…)")`
|
||||
- **Chunking**: Messages > 200 KB werden in `panel_base.handle_raw` automatisch gesplittet und reassembliert. Subklassen kümmern sich nicht drum.
|
||||
|
||||
### Source ↔ Volume Pattern
|
||||
|
||||
Jedes Smart-Element hat:
|
||||
|
||||
1. eine **Source-Geometrie** (Achse / Outline / Punkt) — vom User editierbar
|
||||
2. ein generiertes **Volume** (Brep) — automatisch regeneriert bei Source-Änderungen
|
||||
|
||||
Beispiel Wand: Source = Achs-Linie, Volume = Brep mit Dicke × Höhe.
|
||||
|
||||
### Sticky-Storage (Cross-Module-State)
|
||||
|
||||
Konventionen für `sc.sticky`-Keys:
|
||||
|
||||
- `"{modul}_bridge"` — Bridge-Instanz
|
||||
- `"{modul}_listeners"` — Bool-Flag: Listener bereits registriert?
|
||||
- `"_dossier_*"` — globale States (z.B. `_dossier_joints_cache`)
|
||||
- `"{modul}_*_cache"` — Modul-Cache
|
||||
|
||||
### Listener-Hookup (Idempotent)
|
||||
|
||||
```python
|
||||
def _install_listeners(bridge):
|
||||
flag = "mymodule_listeners"
|
||||
sc.sticky["mymodule_bridge"] = bridge
|
||||
if sc.sticky.get(flag): return # Schon registriert
|
||||
Rhino.RhinoApp.Idle += _on_idle
|
||||
Rhino.RhinoDoc.ActiveDocumentChanged += _on_view_change
|
||||
sc.sticky[flag] = True
|
||||
```
|
||||
|
||||
## Datenhaltung
|
||||
|
||||
- **Geschosse** in `doc.Strings["dossier_ebenen"]` als JSON
|
||||
- **Smart-Elemente** als Rhino-Objekte mit UserStrings — `dossier_element_id`, `dossier_element_type`, …
|
||||
- **Section-Styles** über `Rhino.DocObjects.SectionStyle()` + `layer.SetCustomSectionStyle()`
|
||||
- **Settings**: `~/Library/Application Support/ch.gabrielevarano.Dossier/dossier_settings.json`
|
||||
|
||||
Eine `.3dm`-Datei bleibt eine Datei — keine externen Datenbanken.
|
||||
|
||||
## Layer-Hierarchie
|
||||
|
||||
```text
|
||||
10_GRUNDRISSE
|
||||
└── EG
|
||||
├── 20_WAENDE
|
||||
├── 30_DECKEN
|
||||
├── 31_DAECHER
|
||||
└── 40_TREPPEN
|
||||
└── 1OG (gleiche Sublayer)
|
||||
20_SCHNITTE
|
||||
30_ANSICHTEN
|
||||
00_RASTER · 01_VERMESSUNG · 40_SITUATION · 90_REFERENZEN · 99_KONSTRUKTION
|
||||
```
|
||||
|
||||
## Cross-Module-Pfade
|
||||
|
||||
| Sender → Empfänger | Trigger | Effekt |
|
||||
|-----------------------------|-------------------------------|---------------------------------------------------------|
|
||||
| `rhinopanel` → `elemente` | Apply von Ebenen-Struktur | `elemente_bridge._regenerate_all()` regeneriert Wände/Decken |
|
||||
| `elemente` → `rhinopanel` | Wand/Decken-Delete | `ebenen_bridge_ref._send_state()` |
|
||||
| `oberleiste` → `overrides` | Preset-Auswahl in Topbar | `overrides_bridge._send_state()` |
|
||||
| `massstab` ↔ `ausschnitte` | Viewport-/Zoom-Wechsel | Bi-direktional Skala lesen / setzen |
|
||||
| `gestaltung` ↔ `rhinopanel` | Hatch-Pattern auf Selektion | Pattern + Scale + Rotation-Signatur vergleichen |
|
||||
|
||||
## Konventionen
|
||||
|
||||
- **Python-Identifier ohne Umlaute** — `ue/oe/ae` statt `ü/ö/ä` in Code-Bezeichnern, Layer-Codes, UserString-Keys. UI-Strings dürfen Umlaute.
|
||||
- **`LoadHtml`-inline** statt `file://`-URL — Rhinos WKWebView blockiert sonst `<script type="module">` durch CORS.
|
||||
- **TextEntity-RTF** — Rhinos eingebauter Parser unterstützt nur `\b \i \ul \strike \fN \tab {}` plus Newline-via-`\par`. **Kein `\fs`** (eine TextEntity hat global eine Schriftgröße).
|
||||
- **Sticky-Reads** immer mit `is not None`-Check.
|
||||
|
||||
## Launcher-Anbindung
|
||||
|
||||
Der **Dossier-Launcher** (`launcher/`) ist eine separate Tauri-2-App. IPC zu Rhino läuft **dateibasiert**, nicht über Socket:
|
||||
|
||||
- Settings: `~/Library/Application Support/ch.gabrielevarano.Dossier/dossier_settings.json`
|
||||
- Live-Push: `pendingApplyLayout`-Key, `oberleiste.tick_idle()` pollt und cleart
|
||||
- System-Tray mit Quick-Open der letzten 5 Projekte
|
||||
|
||||
Rhino läuft ohne Launcher, Launcher läuft ohne Rhino.
|
||||
@@ -0,0 +1,111 @@
|
||||
---
|
||||
title: Erste Schritte
|
||||
linkTitle: Erste Schritte
|
||||
weight: 1
|
||||
next: docs/architektur
|
||||
---
|
||||
|
||||
DOSSIER in **5 Minuten** zum Laufen bringen.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
| Tool | Version |
|
||||
|--------|------------------------------------------|
|
||||
| Rhino | 8 (Mac · Windows getestet, primär Mac) |
|
||||
| Python | CPython 3.9 (Rhino 8 Script-Editor-Engine) |
|
||||
| Node | ≥ 20 (nur für UI-Builds — fertige Distribution braucht das nicht) |
|
||||
|
||||
Optional — für den Standalone-Launcher:
|
||||
|
||||
| Tool | Version |
|
||||
|---------------|------------------------------------------------|
|
||||
| Rust toolchain| ≥ 1.77 (`rustup`) |
|
||||
| Build-Tools | siehe [Tauri Prerequisites](https://v2.tauri.app/start/prerequisites/) |
|
||||
|
||||
## Installation
|
||||
|
||||
{{% steps %}}
|
||||
|
||||
### Repository klonen
|
||||
|
||||
```bash
|
||||
git clone https://git.kgva.ch/karim/DOSSIER.git
|
||||
cd DOSSIER
|
||||
npm install
|
||||
```
|
||||
|
||||
### Frontend bauen
|
||||
|
||||
```bash
|
||||
npm run build # → dist/index.html (inline-fähig)
|
||||
```
|
||||
|
||||
### Plugin in Rhino starten
|
||||
|
||||
In Rhino 8 den Initialisierer über `_ScriptEditor` öffnen — die Datei `rhino/startup.py` laden und auf **Run** klicken. Sie liest die `dossier.project.json` neben der `.3dm` und lädt nur die dort gelisteten Module (oder alle, falls keine Projekt-Datei vorhanden).
|
||||
|
||||
Für automatisches Laden bei jedem Rhino-Start: Rhino-Optionen → *General* → *Run these commands every time a model is opened*:
|
||||
|
||||
```text
|
||||
_-RunPythonScript "<DOSSIER_PFAD>/rhino/startup.py"
|
||||
```
|
||||
|
||||
{{< callout type="info" >}}
|
||||
**`<DOSSIER_PFAD>`** durch den absoluten Pfad zum geklonten Repository ersetzen — z.B. `/Users/dein_user/STUDIO/DOSSIER` auf macOS oder `C:\Users\dein_user\STUDIO\DOSSIER` auf Windows. Rhino expandiert `~` in diesem Kontext nicht.
|
||||
{{< /callout >}}
|
||||
|
||||
Der Launcher trägt diesen Eintrag automatisch mit dem korrekten Pfad ein.
|
||||
|
||||
### Auto-Reset nach Änderungen
|
||||
|
||||
Bei Python-Änderungen die Panels neu laden:
|
||||
|
||||
```text
|
||||
_RunPythonScript <DOSSIER_PFAD>/rhino/_reset_panels.py
|
||||
```
|
||||
|
||||
{{% /steps %}}
|
||||
|
||||
## Erster Workflow
|
||||
|
||||
{{% steps %}}
|
||||
|
||||
### Projekt anlegen
|
||||
|
||||
In Rhino `DossierInit` aufrufen. Bürodaten, Projektnummer und Phasenbezeichnung werden im `.3dm` hinterlegt und in jedem Plankopf eingesetzt.
|
||||
|
||||
### Geschosse definieren
|
||||
|
||||
Im **EBENEN**-Panel Geschosse mit Name (`EG`, `1OG`, …), Höhe und OKFF anlegen. Dossier baut daraus die Layer-Hierarchie:
|
||||
|
||||
```text
|
||||
10_GRUNDRISSE
|
||||
└── EG
|
||||
├── 20_WAENDE
|
||||
├── 30_DECKEN
|
||||
├── 31_DAECHER
|
||||
└── 40_TREPPEN
|
||||
└── 1OG (gleiche Sublayer)
|
||||
```
|
||||
|
||||
### Smart-Elemente platzieren
|
||||
|
||||
Im **ELEMENTE**-Panel das gewünschte Bauteil wählen — Wand, Decke, Öffnung, Treppe, Tragwerk oder Raum. Source-Geometrie zeichnen (Achse, Outline, Punkt), Volumen wird automatisch generiert.
|
||||
|
||||
### Plan generieren
|
||||
|
||||
**Named Views** für Grundrisse, Schnitte und Axonometrien speichern. Im **LAYOUTS**-Panel Vorlage wählen, Views auf das Blatt ziehen, Plannummer vergeben. Dossier erzeugt das Layout mit Titelblock und passt den Massstab automatisch an.
|
||||
|
||||
### Export
|
||||
|
||||
Stapelexport aller Pläne als PDF oder PNG aus dem **LAYOUTS**-Panel. Optional mit Plannummer-Suffix im Dateinamen und Vektordaten für die Druckfreigabe.
|
||||
|
||||
{{% /steps %}}
|
||||
|
||||
## Wo geht's weiter?
|
||||
|
||||
{{< cards >}}
|
||||
{{< card link="../features" title="Features" subtitle="Alle Panels im Detail." >}}
|
||||
{{< card link="architektur" title="Architektur" subtitle="Module, Bridges, Sticky-Storage." >}}
|
||||
{{< card link="../faq" title="FAQ" subtitle="Häufige Fragen." >}}
|
||||
{{< /cards >}}
|
||||
@@ -0,0 +1,122 @@
|
||||
---
|
||||
title: Roadmap
|
||||
linkTitle: Roadmap
|
||||
weight: 3
|
||||
toc: true
|
||||
---
|
||||
|
||||
DOSSIER ist ein **Design-Studio für Rhino**, keine BIM-Cloud. Der Fokus liegt auf **3D-Modell-Qualität** und sauberer Planabgabe direkt aus dem Modell — keine externe Datenbank, keine Zwangs-Synchronisation, keine Cloud-Lock-in.
|
||||
|
||||
Diese Seite hält den Status der grösseren Bauteile fest. Detail-Issues und Bugfixes laufen auf [Gitea](https://git.kgva.ch/karim/DOSSIER/issues).
|
||||
|
||||
## Erledigt
|
||||
|
||||
Die folgenden Bauteile sind im aktiven Einsatz und Teil der Pre-Release 0.1.0:
|
||||
|
||||
### Wand-System v1
|
||||
|
||||
Polyline-Wand mit **Chain-Anchor**, **Cmd+Z** über alle Joints stabil, native Rhino-**Grips** für Achs-Editierung. Siehe [Smart-Elemente](../../features/smart-elemente).
|
||||
|
||||
### Schnitte & Ansichten
|
||||
|
||||
Schnitt-Perspektive plus die volle **SectionStyle-API** (Schnittlinien-Stil, Section-Hatch, Hidden-Line-Removal). War der **konkrete Anlass** für die Migration von IronPython 2.7 zu CPython 3. Siehe [Schnitte & Ansichten](../../features/schnitte-ansichten).
|
||||
|
||||
### Geschoss-Management
|
||||
|
||||
**Multi-Geschoss-Clipping** mit konfigurierbaren Modi, **Top-View Z-Guard** gegen versehentliche Z-Drifts und **Snap-Bar** pro Geschoss. Siehe [Geschosse & Ebenen](../../features/geschosse).
|
||||
|
||||
### Project-Settings (5 Tabs)
|
||||
|
||||
Zentraler Dialog für Voreinstellungen + Projektdaten, Materialien, Linientypen, Schraffuren und Symbole. Siehe [Project-Settings](../../features/project-settings).
|
||||
|
||||
### Material/Library-System
|
||||
|
||||
**ArchiCAD-style List/Detail**-UI, **Auto-Regen** über die Smart-Element-Hierarchie, **`.lin`/`.pat`-Import** für Linetypes und Hatches, bewusste **Material/Ebene-Separation**. Siehe [Material-Library](../../features/materialien).
|
||||
|
||||
### Symbol-Library — Phase A + B
|
||||
|
||||
**2D+3D Pair-Files**, **Satellite-Picker** als persistenter Floating-Window, **Multi-Format-Import** (`.3dm` · `.dwg` · `.obj` · `.fbx` · `.dae` · `.stl`), **Auto-Thumbnails** als Base64-PNG und volle **CRUD**-Operationen. Siehe [Symbol-Library](../../features/symbol-library).
|
||||
|
||||
### Swisstopo-Integration
|
||||
|
||||
**Adress-Prefill** aus den Projektdaten, **Terrain-Import** aus dem AlMo-DOM-Layer und **m.ü.M** in der Plankopf-Variable. Siehe [Swisstopo & OSM](../../features/swisstopo-osm).
|
||||
|
||||
### Launcher (Tauri 2)
|
||||
|
||||
Standalone-App für Projekt-Management, **Auto-Update** über `tauri-plugin-updater`, **System-Tray** mit Quick-Open und **file-based IPC** zu Rhino. Siehe [Launcher](../../launcher).
|
||||
|
||||
## In Arbeit
|
||||
|
||||
### Display-Mode "Dossier Plan"
|
||||
|
||||
{{< callout type="warning" >}}
|
||||
Game-Changer für Plan-Qualität direkt aus 3D — kein Umweg über separate 2D-CAD-Dateien.
|
||||
{{< /callout >}}
|
||||
|
||||
Drei kombinierte Effekte:
|
||||
|
||||
- **Hidden-Line-Removal** über die aktive Section-Plane (Rhino-natives Verfahren)
|
||||
- **Weisser Hintergrund**, Layer-Display-Farben werden zu reinem Schwarz remappt
|
||||
- **Section-Hatch** aus der Layer-Property-Tabelle gerendert (siehe [Schnitte & Ansichten](../../features/schnitte-ansichten))
|
||||
|
||||
Ziel: Wettbewerbs- und Konkurrenz-Pläne ohne Plot-Konvertierung über AutoCAD oder ArchiCAD. Siehe [Massstab & Display-Modes](../../features/massstab).
|
||||
|
||||
## Geplant
|
||||
|
||||
### Raumstempel-Redesign (4 Stufen)
|
||||
|
||||
Der aktuelle Raum-Stempel zeigt Bezeichnung + Fläche, hat aber einen **Wert-Bug** beim Refresh nach Outline-Änderung. Geplant:
|
||||
|
||||
1. **Stufe 1 — Wert-Bug fixen** — Centroid-Berechnung und Fläche werden synchron neu gelesen, Cache-Invalidation greift bei Polyline-Replace.
|
||||
2. **Stufe 2 — Massstäblich-Modus** — Stempel-Schrift folgt dem aktiven Massstab (1:50 → grössere Schrift als 1:100), nicht der Welt-Geometrie.
|
||||
3. **Stufe 3 — Settings-Dialog** — pro Projekt definieren, welche Felder am Stempel erscheinen (Nr · Bezeichnung · SIA · Fläche · Höhe · Material).
|
||||
4. **Stufe 4 — Wettbewerb-Features** — alternative Stempel-Sets für Wettbewerbsabgaben (anonymisierte Codes, vereinfachte Geometrie).
|
||||
|
||||
### Custom Linetype-Editor
|
||||
|
||||
Visueller **Pattern-Editor** für `.lin`-kompatible Linetypes — Drag-Handles für Strich/Lücke-Längen, Live-Preview im Massstab des aktiven Layouts. Der `.lin`-Import existiert bereits (siehe [Materialien](../../features/materialien)); der Editor schreibt in denselben Datentyp.
|
||||
|
||||
**User-Pause** — kommt nach dem Display-Mode "Dossier Plan".
|
||||
|
||||
### PBR-Erweiterungen
|
||||
|
||||
Drei konkrete Lücken im aktuellen Material-Editor:
|
||||
|
||||
- **Separate Roughness-Textur** — heute nur Roughness-Slider, geplant ist eine zusätzliche Roughness-Map (PNG, Graustufen)
|
||||
- **UV-Rotation** — Texturen können bisher nur skaliert werden, nicht rotiert
|
||||
- **Bump-Strength-Slider** — Normal-Map-Intensität soll feinjustierbar werden, statt nur ein/aus
|
||||
|
||||
### Library Phase C — Cloud-Sync
|
||||
|
||||
Symbol-Library erweitern um **Team-Sharing** über GitHub-Releases:
|
||||
|
||||
```text
|
||||
Bürobibliothek-Repo (GitHub)
|
||||
├── releases/v1.4.0/
|
||||
│ ├── symbols/sofa-3sitz.3dm
|
||||
│ ├── symbols/sofa-3sitz.2d.3dm
|
||||
│ └── manifest.json (semver, thumbnails, kategorien)
|
||||
```
|
||||
|
||||
Im PROJECT-SETTINGS-Symbole-Tab wird die Bürobibliothek-URL gesetzt, DOSSIER pullt periodisch Releases und mergt sie mit der projekt-lokalen Library. Pull-Request-Workflow für neue Symbole vom Team.
|
||||
|
||||
### Satellite-Windows-Restyle
|
||||
|
||||
Alle Satellite-Floating-Windows (Symbol-Picker, Material-Picker, Hatch-Picker, …) auf einheitliches **Pill-Style** umstellen — runde Ecken, weicher Schatten, einheitliche Header-Höhe. Konsistente UX über alle Picker-Tools.
|
||||
|
||||
## Strategischer Anker
|
||||
|
||||
DOSSIER bleibt:
|
||||
|
||||
- **Lokal** — `.3dm` + `dossier.project.json` ist alles, kein Server zwingend nötig
|
||||
- **Schweizer-Standard-aware** — SIA 102 / SIA 416, Swisstopo, m.ü.M direkt eingebaut
|
||||
- **AGPL-3.0** — Open Source, keine Telemetrie, keine versteckten Kosten
|
||||
- **Rhino-nativ** — kein eigenes Datei-Format, alle Daten in Rhinos eigenen Tabellen (Materials, Linetypes, Hatches, UserStrings)
|
||||
|
||||
Was DOSSIER **nicht** ist:
|
||||
|
||||
- Keine BIM-Cloud, kein zentraler Server
|
||||
- Keine IFC-Schema-Konformität (es ist kein BIM-Tool)
|
||||
- Kein Ersatz für ArchiCAD / Revit — Dossier bündelt Rhino-Workflows, ersetzt aber keine Statik-Software, kein Mengen-Auswertungs-Tool, keine Quantity-Take-Off
|
||||
|
||||
Wenn dir ein Feature fehlt, das in diesen Rahmen passt → [Issue auf Gitea](https://git.kgva.ch/karim/DOSSIER/issues).
|
||||
Reference in New Issue
Block a user