karim
3609236da9
dJoin: T-Join Ergaenzung — Endpunkt einer Wand mitten auf andere snappen
...
Bisher konnte dJoin nur L-Verbindungen herstellen (zwei Endpunkte zum
Schnittpunkt der verlaengerten Tangenten ziehen). Neu auch T-Verbindungen:
_t_join_attempt: pro Endpunkt-Kombination wird der naechste Punkt auf der
ANDEREN Curve gesucht. Wenn distance < 20cm UND nicht nahe deren Endpunkt
(= waere L-Sache) → snap diesen Endpunkt exakt auf die Curve. Die andere
Curve bleibt unveraendert (= Through-Wand stays).
_run: T-Join wird ZUERST probiert (spezifischer), L-Join als Fallback.
UX: User selektiert 2 Waende die fast aber nicht ganz verbinden →
Cmd+J (dJoin) → System erkennt T- oder L-Konfig und snappt entsprechend.
Predictable + intentional, kein auto-snap-Magic mehr.
2026-05-31 11:45:53 +02:00
karim
250853d7d0
Waende: Cluster-Boolean-Union + Click-UX + Outline/Centerline + Smart-L-Join
...
Geometrie
- _find_wall_cluster: BFS ueber alle same-material verbundenen Waende inkl.
T-Junctions (Stem auf Through-Achse + Through-Wand-Mitte erkannt)
- _build_cluster_union_brep: per-Wand-Rect-Extrude + Boolean-Union zu einem
einheitlichen Brep. Walls ueberlappen am Joint via Extension um
nachbar_dicke/2 (Far-Face-Reach ohne Stummel)
- _regen_cluster_anchor: Anchor-Pattern wie Chain — anchor haelt cluster_brep
+ alle openings als BoolDiff cutouts pro Member-Wand
- _is_linear_chain: nur lineare 2-Wall-Endpoint-Sequenzen → existing
Polyline-Extrude. Komplexe Cluster (verzweigt / mit T-Junction) → Union
Auto-T-Snap
- _t_snap_to_wand_axis mit zwei Pfaden:
- Volume-Hit: IsPointInside (strict=False) auf wand_volume Brep → snap zur
naechsten Cluster-Achse, unabhaengig von Wand-Dicke
- Axis-Near: dynamische Toleranz max(15cm, dicke/2+10cm) → dicke Waende
kriegen groessere Snap-Zone
- Endpunkt-Bias 10cm → naher Endpunkt gewinnt fuer saubere Corner
- Aufruf in _collect_wall_polyline + first-pt der Wand-Erstellung
Click-Verhalten
- _ClusterVolumeSelectHandler (MouseCallback): in Plan-View
- Klick INNEN im Volume → naechste Achse selektieren
- Klick auf Vertex (12 px) → Volume selektieren (Standard)
- Klick auf Edge (8 px) → Volume selektieren (Standard)
- Klick direkt auf Achse (5 px) → Rhino-Standard, Achse selektiert
- wand_axis aus _PAIRED_SOURCE_TYPES raus → Klick auf Linie selektiert NUR
die Linie (kein Mit-Selektieren des Volumens)
- wand_volume bleibt in _PAIRED_VOLUME_TYPES + _collect_partners erweitert:
Volume-Klick sammelt alle Cluster-Member-Achsen + Centerlines + Outlines
→ alle Referenzlinien leuchten bei Volume-Klick mit auf
- Auto-Group fuer alle Waende entfernt + Startup-Migration
_migrate_strip_wall_auto_groups_once raeumt alte Memberships
Outline + Centerline
- _make_wall_centerline: parallele Achse-Offset bei ref != mid → Centerline
- _make_wall_outline: geschlossenes Viereck (linker + rechter Offset +
perpendikulare Caps)
- _regen_wall_lines: LOCKED Curves auf Referenzen-Sublayer
- Centerline (dashed): nur bei ref=left/right
- Outline (solid): nur Solo-Waende (Cluster-Member ueber merged Brep)
- Beide mit dossier_type-Tag fuer Cleanup beim naechsten Regen
Smart-L-Join (dJoin)
- _l_join_attempt: 2 OFFENE Curves mit nicht-parallelen Tangenten →
unendliche-Linien-Schnitt + Endpunkte beider Curves auf Schnittpunkt
ersetzen (extend / shorten zu L)
- _walls_and_curves_from_sel: dedupliziert Selection via wall_id, akzeptiert
axis+volume Auto-Group als 1 Wand
- Fallback zu Standard _Join wenn nicht passend
Performance
- Joint-Cache per-batch invalidieren statt per-regen (sticky
_dossier_regen_batch_active)
2026-05-30 16:12:48 +02:00
karim
18d6d98e07
DOSSIER Multi-Phase: C#-Plugin + Yak + Wandstile + UX-Polish
...
- C#-Plugin "DOSSIER" mit 23 nativen Commands (dWall, dDoor, ..., dSection)
- Native Command-Namen + Autocomplete + saubere History
- Idle-Defer + RhinoCode-API → kein _-RunPythonScript-Echo
- Yak-Paket via build.sh, Install in ~/Library/.../packages/8.0/
- Launcher (Tauri):
- dossier_init Tauri-Command + Setup-Tab in Settings
- Yak-Install + StartupCommands-XML + Window-Layout in einem Schritt
- clean-rhino.sh fuer reproduzierbare Resets
- check_dossier_initialized triggert Auto-Open-Setup beim ersten Start
- Wand-Architektur:
- Chain-Logik DEAKTIVIERT → jede Wand baut eigenes Volume (individuell
anwaehlbar, einzeln loeschbar)
- Polyline-Wand: jedes Segment = eigene Wand
- Smart-Split fuer wand_axis/decke/dach/raum/aussparung/traeger
- Auto-Group axis+volume → kein ChooseOne-Dialog, Delete loescht beides
- Stale-Mitre-Fix: Joint-Cache wird vor jedem Wand-Regen invalidiert
- T-Junction-Tolerance auf 1mm (war 1cm, lieferte falsche T-Mitres)
- Wand-Stile:
- Schema in dossier_project_settings.wand_styles (Material + Prio +
Default-Dicke + Referenz, oder Layered mit Schichten)
- dWall-Command Stil-Picker
- ProjectSettingsDialog: Sidebar-Layout (Pill-Selection) +
Wandstile-Tab mit Liste/Editor
- _wand_chain_compat benutzt style_id
- Prio-Dominanz: hoehere Prio gewinnt Eckverbindung, niedrigere wird
T-mitered (siehe _resolve_corner_miter)
- Cmd+G fuer Group (Geschoss-Up auf Alias 'gu')
- Welcome + Cheatsheet borderless mit X/Back-Buttons
- BeginCommand-Hook fuer Gestaltung-Panel-Auto-Open
- panel_base: Python.NET-Enum-Fix fuer Material-Render
2026-05-30 12:46:53 +02:00