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
73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
#! python3
|
|
# -*- coding: utf-8 -*-
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
# Copyright (C) 2026 Karim Gabriele Varano
|
|
"""
|
|
dossier_view_mode.py
|
|
Setzt Display-Mode (+ optional Standard-Ansicht) im aktiven Viewport.
|
|
|
|
Aufruf:
|
|
_-RunPythonScript "/.../dossier_view_mode.py" <mode>
|
|
mode: plan | persp3d | material | raytracing
|
|
"""
|
|
import sys
|
|
import Rhino
|
|
|
|
|
|
_MODES = {
|
|
"plan": {"display": "Dossier Plan", "view": "Top", "label": "DOSSIER Plan-Mode"},
|
|
"persp3d": {"display": "Dossier 3D", "view": "Perspective","label": "DOSSIER 3D-Mode"},
|
|
"material": {"display": "Dossier Material", "view": None, "label": "DOSSIER Material-Mode"},
|
|
"raytracing": {"display": "Dossier Raytracing", "view": None, "label": "DOSSIER Raytracing"},
|
|
}
|
|
|
|
|
|
def _apply(mode_name):
|
|
spec = _MODES.get(mode_name)
|
|
if spec is None:
|
|
print("[VIEW-MODE] Unbekannt:", mode_name)
|
|
return
|
|
try: Rhino.RhinoApp.SetCommandPrompt(spec.get("label", "DOSSIER View"))
|
|
except Exception: pass
|
|
doc = Rhino.RhinoDoc.ActiveDoc
|
|
if doc is None:
|
|
print("[VIEW-MODE] Kein aktives Doc")
|
|
return
|
|
view = doc.Views.ActiveView
|
|
if view is None:
|
|
print("[VIEW-MODE] Kein aktiver Viewport")
|
|
return
|
|
# Standard-View setzen (Top / Perspective) falls definiert
|
|
vw_name = spec["view"]
|
|
if vw_name:
|
|
try:
|
|
view.ActiveViewport.SetProjection(
|
|
Rhino.Display.DefinedViewportProjection.Top
|
|
if vw_name == "Top"
|
|
else Rhino.Display.DefinedViewportProjection.Perspective,
|
|
vw_name, True)
|
|
except Exception as ex:
|
|
print("[VIEW-MODE] view-set:", ex)
|
|
# Display-Mode setzen via Description-Lookup
|
|
dm_name = spec["display"]
|
|
try:
|
|
all_dm = Rhino.Display.DisplayModeDescription.GetDisplayModes()
|
|
target = None
|
|
for d in all_dm:
|
|
if d.EnglishName == dm_name or d.LocalName == dm_name:
|
|
target = d; break
|
|
if target is None:
|
|
print("[VIEW-MODE] Display-Mode nicht gefunden:", dm_name)
|
|
return
|
|
view.ActiveViewport.DisplayMode = target
|
|
view.Redraw()
|
|
except Exception as ex:
|
|
print("[VIEW-MODE] display-mode:", ex)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) >= 2:
|
|
_apply(str(sys.argv[1]).strip().lower())
|
|
else:
|
|
print("[VIEW-MODE] Erwartet Mode-Name:", ", ".join(_MODES.keys()))
|