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
145 lines
5.4 KiB
Bash
Executable File
145 lines
5.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# DOSSIER — Build-Skript
|
|
# Baut das C#-Plugin (.rhp) das beim Rhino-Start die Python-Module
|
|
# bootstrappt (Panels, Aliases, Welcome) und Native-Commands registriert
|
|
# (dWall, dDoor, dStair, dSlab, ...).
|
|
#
|
|
# === Voraussetzungen ===
|
|
# 1. .NET 7 SDK installiert. Auf Mac:
|
|
# brew install dotnet@7
|
|
# Oder direkt von Microsoft:
|
|
# https://dotnet.microsoft.com/download/dotnet/7.0
|
|
#
|
|
# 2. RhinoCommon NuGet-Package wird beim ersten Build automatisch geladen.
|
|
#
|
|
# === Build ===
|
|
# ./build.sh — Release-Build, output in bin/Release/net7.0/
|
|
# ./build.sh debug — Debug-Build mit Symbols
|
|
# ./build.sh clean — bin/obj loeschen
|
|
# ./build.sh install — Build + ins Rhino Plug-In-Verzeichnis kopieren
|
|
#
|
|
# === Installation in Rhino (einmalig, auf Mac) ===
|
|
# WICHTIG: Mac Rhino 8 unterstuetzt KEIN Drag-Drop fuer .rhp-Plugins
|
|
# (der Drag landet im Datei-Oeffnen-Handler, nicht im Plugin-Loader).
|
|
#
|
|
# Richtiger Weg:
|
|
# 1. Rhino 8 oeffnen
|
|
# 2. Command-Prompt: PluginManager
|
|
# (oder Tools-Menue → Options → Plug-Ins)
|
|
# 3. Button "Install..." → browse zur .rhp
|
|
# bin/Release/net7.0/DOSSIER.rhp
|
|
# 4. Open → Rhino registriert das Plugin
|
|
# 5. Rhino restart — DOSSIER bootstrappt (Panels/Aliases/Welcome) +
|
|
# Commands dWall/dDoor/... sind verfuegbar
|
|
#
|
|
# Pfad bleibt in Rhinos settings-XML registriert. Bei spaeteren Builds
|
|
# einfach in den gleichen Output-Pfad bauen — Rhino laedt den neuen Stand
|
|
# automatisch beim naechsten Start.
|
|
|
|
set -e
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# --- Param-Parsing ---
|
|
MODE="${1:-release}"
|
|
|
|
case "$MODE" in
|
|
debug|Debug)
|
|
CONFIG="Debug"
|
|
;;
|
|
release|Release|"")
|
|
CONFIG="Release"
|
|
;;
|
|
clean)
|
|
echo "==> Loesche bin/ + obj/"
|
|
rm -rf bin obj
|
|
exit 0
|
|
;;
|
|
install)
|
|
CONFIG="Release"
|
|
DO_INSTALL=1
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [release|debug|clean|install]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# --- dotnet-Check ---
|
|
if ! command -v dotnet &>/dev/null; then
|
|
echo "FEHLER: dotnet nicht installiert."
|
|
echo "Install: brew install dotnet@7"
|
|
echo " oder https://dotnet.microsoft.com/download/dotnet/7.0"
|
|
exit 1
|
|
fi
|
|
|
|
# --- Build ---
|
|
echo "==> Build: $CONFIG"
|
|
dotnet build -c "$CONFIG"
|
|
|
|
OUTPUT="$SCRIPT_DIR/bin/$CONFIG/net7.0/DOSSIER.rhp"
|
|
if [ ! -f "$OUTPUT" ]; then
|
|
echo "FEHLER: Build-Output nicht gefunden: $OUTPUT"
|
|
exit 1
|
|
fi
|
|
echo "==> .rhp Output: $OUTPUT"
|
|
|
|
# --- Yak-Paket bauen ---
|
|
# yak (Rhinos Package Manager) ist im Rhino-App-Bundle dabei. Wir packen .rhp +
|
|
# manifest.yml in ein .yak-Archiv das der Launcher bundlet + via "yak install"
|
|
# in den User-Plugin-Pfad legt. Dort wird's von Rhino aus dem trusted Yak-
|
|
# Verzeichnis geladen.
|
|
YAK="/Applications/Rhino 8.app/Contents/Resources/bin/yak"
|
|
DIST_DIR="$SCRIPT_DIR/dist"
|
|
mkdir -p "$DIST_DIR"
|
|
if [ -x "$YAK" ]; then
|
|
BUILD_DIR="$SCRIPT_DIR/bin/$CONFIG/net7.0"
|
|
pushd "$BUILD_DIR" >/dev/null
|
|
# yak spec failed mit Exit-1 wenn manifest.yml schon existiert — kein Fehler
|
|
"$YAK" spec --input DOSSIER.rhp >/dev/null 2>&1 || true
|
|
rm -f dossier-*.yak
|
|
YAK_OUT=$("$YAK" build 2>&1 | grep -oE '/.*\.yak$' | head -1)
|
|
popd >/dev/null
|
|
if [ -n "$YAK_OUT" ] && [ -f "$YAK_OUT" ]; then
|
|
# Versionierter Filename rein damit Launcher die Version vom Filename ablesen kann
|
|
YAK_NAME=$(basename "$YAK_OUT")
|
|
# Alte .yak im dist/ wegraeumen
|
|
rm -f "$DIST_DIR"/dossier-*.yak
|
|
cp -v "$YAK_OUT" "$DIST_DIR/$YAK_NAME"
|
|
# Stabilen Symlink fuer Launcher (immer 'dossier.yak') zusaetzlich
|
|
ln -sf "$YAK_NAME" "$DIST_DIR/dossier.yak"
|
|
# Version separat als Textdatei (extrahiert aus manifest.yml im .yak)
|
|
VERSION=$(grep '^version:' "$BUILD_DIR/manifest.yml" | awk '{print $2}')
|
|
echo -n "$VERSION" > "$DIST_DIR/dossier-version.txt"
|
|
echo "==> .yak Output: $DIST_DIR/$YAK_NAME (version=$VERSION)"
|
|
else
|
|
echo "WARN: yak build hat keinen Output produziert"
|
|
fi
|
|
else
|
|
echo "WARN: yak CLI nicht gefunden ($YAK) — kein .yak-Paket gebaut"
|
|
fi
|
|
|
|
# --- Install: lokales Test-Install via yak ---
|
|
# Fuer Dev-Iteration: installiert das frische .yak direkt in den Rhino-User-
|
|
# Plugin-Pfad (~/Library/Application Support/McNeel/Rhinoceros/packages/8.0/).
|
|
# In Production macht der Launcher das automatisch beim ersten Rhino-Start.
|
|
if [ -n "$DO_INSTALL" ]; then
|
|
# Alte Manuell-Install-Standorte aufraeumen
|
|
OLD_MANUAL="$HOME/Library/Application Support/Dossier/Plugin"
|
|
for old in "/Applications/Rhino 8.app/Contents/PlugIns/DOSSIER.rhp" \
|
|
"/Applications/Rhino 8.app/Contents/PlugIns/DossierCommands.rhp" \
|
|
"$OLD_MANUAL/DOSSIER.rhp"; do
|
|
if [ -f "$old" ]; then rm -v "$old"; fi
|
|
done
|
|
if [ -x "$YAK" ] && [ -f "$DIST_DIR/dossier.yak" ]; then
|
|
# yak install nimmt Quelle als Verzeichnis (treats local dir as source server)
|
|
"$YAK" install dossier --source "$DIST_DIR" 2>&1 | sed 's/^/ /'
|
|
echo "==> Yak-Install fertig. Rhino restart noetig (Plugin laedt on-demand beim ersten Command)."
|
|
echo "==> StartupCommands-XML-Eintrag wird vom Launcher gesetzt — fuer Dev manuell pruefen:"
|
|
echo " Options → General → Run these commands every time a model is opened"
|
|
echo " soll enthalten: _-RunPythonScript \"$SCRIPT_DIR/../../rhino/startup.py\""
|
|
fi
|
|
fi
|
|
|
|
echo "OK."
|