18d6d98e07
- 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
98 lines
3.0 KiB
Python
98 lines
3.0 KiB
Python
#! python3
|
|
# -*- coding: utf-8 -*-
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
# Copyright (C) 2026 Karim Gabriele Varano
|
|
"""
|
|
dossier_dispatch.py
|
|
Universal-Wrapper fuer DOSSIER-Bridge-Commands via Rhino-Alias.
|
|
|
|
Aufruf vom Alias:
|
|
_-RunPythonScript "/.../dossier_dispatch.py" <action>
|
|
oder via Rhino.Input.RhinoGet — wir lesen den letzten String-Parameter
|
|
aus der Command-Line.
|
|
|
|
Aktionen mappen auf ElementeBridge._cmd_create_* via einer kleinen
|
|
Dispatch-Tabelle. Bridge-Referenz wird in sc.sticky vom panel_factory
|
|
abgelegt (siehe elemente.py _bridge_factory).
|
|
"""
|
|
import sys
|
|
import scriptcontext as sc
|
|
|
|
|
|
_ACTIONS = {
|
|
"wand": ("_cmd_create_wall", ()),
|
|
"tuer": ("_cmd_create_oeffnung", ("tuer",)),
|
|
"fenster": ("_cmd_create_oeffnung", ("fenster",)),
|
|
"decke": ("_cmd_create_decke", ()),
|
|
"aussparung":("_cmd_create_aussparung",()),
|
|
"dach": ("_cmd_create_dach", ()),
|
|
"treppe": ("_cmd_create_treppe", ()),
|
|
"stuetze": ("_cmd_create_stuetze", ()),
|
|
"traeger": ("_cmd_create_traeger", ()),
|
|
"raum": ("_cmd_create_raum", ()),
|
|
"stempel": ("_cmd_create_stempel", ()),
|
|
"symbol": ("_cmd_create_symbol", ()),
|
|
}
|
|
|
|
|
|
_PRETTY = {
|
|
"wand": "DOSSIER Wand",
|
|
"tuer": "DOSSIER Tuer",
|
|
"fenster": "DOSSIER Fenster",
|
|
"decke": "DOSSIER Decke",
|
|
"aussparung": "DOSSIER Aussparung",
|
|
"dach": "DOSSIER Dach",
|
|
"treppe": "DOSSIER Treppe",
|
|
"stuetze": "DOSSIER Stuetze",
|
|
"traeger": "DOSSIER Traeger",
|
|
"raum": "DOSSIER Raum",
|
|
"stempel": "DOSSIER Stempel",
|
|
"symbol": "DOSSIER Symbol",
|
|
}
|
|
|
|
|
|
def dispatch(action):
|
|
"""Public entry — von per-action Wrapper-Scripts aufgerufen."""
|
|
try:
|
|
import Rhino
|
|
Rhino.RhinoApp.SetCommandPrompt(_PRETTY.get(action, "DOSSIER " + action.capitalize()))
|
|
except Exception: pass
|
|
bridge = sc.sticky.get("dossier_bridge_elemente")
|
|
if bridge is None:
|
|
print("[DOSSIER-ALIAS] Elemente-Bridge nicht aktiv (Panel oeffnen)")
|
|
return
|
|
spec = _ACTIONS.get(action)
|
|
if spec is None:
|
|
print("[DOSSIER-ALIAS] Unbekannte Aktion:", action)
|
|
return
|
|
method_name, args = spec
|
|
method = getattr(bridge, method_name, None)
|
|
if method is None:
|
|
print("[DOSSIER-ALIAS] Bridge-Method fehlt:", method_name)
|
|
return
|
|
try:
|
|
method({}, *args)
|
|
except Exception as ex:
|
|
print("[DOSSIER-ALIAS]", action, "->", method_name, ":", ex)
|
|
|
|
|
|
# Backwards-Compat (alter Name).
|
|
_dispatch = dispatch
|
|
|
|
|
|
def _read_action_from_argv():
|
|
# sys.argv enthaelt bei _-RunPythonScript "path" arg1 arg2 ... die
|
|
# Args nach dem Skript-Pfad. argv[0] = Skript-Pfad.
|
|
if len(sys.argv) >= 2:
|
|
return str(sys.argv[1]).strip().lower()
|
|
return None
|
|
|
|
|
|
if __name__ == "__main__":
|
|
a = _read_action_from_argv()
|
|
if a:
|
|
_dispatch(a)
|
|
else:
|
|
print("[DOSSIER-ALIAS] Keine Aktion uebergeben. Erwartet:",
|
|
", ".join(sorted(_ACTIONS.keys())))
|