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
53 lines
2.2 KiB
C#
53 lines
2.2 KiB
C#
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
// Copyright (C) 2026 Karim Gabriele Varano
|
|
using Rhino;
|
|
using Rhino.PlugIns;
|
|
|
|
namespace DOSSIER;
|
|
|
|
/// <summary>
|
|
/// DOSSIER-Plugin. Drei Aufgaben:
|
|
/// 1. Bootstrappt beim Plugin-Load die Python-Module: Panels, Aliases,
|
|
/// View-Modes, BeginCommand-Hook, Welcome-Screen (alles ueber rhino/startup.py).
|
|
/// 2. Registriert native Rhino-Commands (dWall, dDoor, dStair, ...) die
|
|
/// jeweils das passende Python-Script in rhino/aliases/cmd/ ausfuehren.
|
|
/// 3. Loest das Echo-/Autocomplete-Problem der frueheren Keyboard-Macros
|
|
/// (jetzt zeigt die History "dWall" statt "_-RunPythonScript ...").
|
|
///
|
|
/// Installation: Plugin via _PluginManager → Install... registrieren. Beim
|
|
/// naechsten Rhino-Start laeuft DOSSIER automatisch. Kein zusaetzlicher
|
|
/// StartupCommands-XML-Eintrag noetig.
|
|
/// </summary>
|
|
public class DossierPlugin : PlugIn
|
|
{
|
|
public DossierPlugin() { Instance = this; }
|
|
|
|
public static DossierPlugin Instance { get; private set; } = null!;
|
|
|
|
/// <summary>Plugin bei jedem Rhino-Start automatisch laden — default ist
|
|
/// "WhenNeeded" (erst beim ersten Command-Aufruf). Wir brauchen aber
|
|
/// AtStartup, damit OnLoad → startup.py-Bootstrap immer feuert.</summary>
|
|
public override PlugInLoadTime LoadTime => PlugInLoadTime.AtStartup;
|
|
|
|
protected override LoadReturnCode OnLoad(ref string errorMessage)
|
|
{
|
|
var root = DossierPaths.Root;
|
|
if (root is null)
|
|
{
|
|
errorMessage =
|
|
"DOSSIER Root nicht gefunden. Setze Env-Var DOSSIER_HOME " +
|
|
"auf den DOSSIER-Repo-Ordner (z.B. /Users/karim/STUDIO/DOSSIER) " +
|
|
"oder leg ein File ~/.dossier_home an.";
|
|
return LoadReturnCode.ErrorShowDialog;
|
|
}
|
|
RhinoApp.WriteLine($"[DOSSIER] Plugin geladen (root={root})");
|
|
|
|
// Python-Bootstrap deferred auf Idle — OnLoad feuert vor Eto-UI-Init,
|
|
// Panels brauchen aber MainWindow + Idle-Event. PythonRunner.RunDeferred
|
|
// wartet auf naechstes Idle und ruft dann startup.py auf.
|
|
PythonRunner.RunDeferred(DossierPaths.StartupPy, "startup");
|
|
|
|
return LoadReturnCode.Success;
|
|
}
|
|
}
|