125 lines
4.5 KiB
Markdown
125 lines
4.5 KiB
Markdown
# Hermes-Houdini Bridge — Offizielle Houdini-Package-Integration
|
|
|
|
## Recherche-Ergebnis
|
|
|
|
Houdini hat seit Version 18 ein **offizielles Package-System** (JSON-basiert), das das alte `houdini.env` ablöst. Das ist der korrekte Weg, Plugins, Python Panels und Shelf-Tools zu installieren — ohne `scripts/python/` oder `toolbar/` manuell zu befüllen.
|
|
|
|
### Wie Houdini Packages funktionieren
|
|
|
|
```
|
|
~/houdini21.0/
|
|
├── packages/ ← Houdini scannt dieses Verzeichnis beim Start
|
|
│ └── hermes_houdini_bridge.json ← Package-Descriptor (zeigt auf unser Plugin)
|
|
│
|
|
└── (keine manuellen scripts/python/, toolbar/, python_panels/ mehr nötig!)
|
|
```
|
|
|
|
**Package-Descriptor** (`hermes_houdini_bridge.json`):
|
|
```json
|
|
{
|
|
"hpath": "/pfad/zum/plugin",
|
|
"env": [
|
|
{"HHB_PATH": "/pfad/zum/plugin"}
|
|
],
|
|
"load_package_once": true
|
|
}
|
|
```
|
|
|
|
`hpath` prepended das Plugin-Verzeichnis in `$HOUDINI_PATH`. Houdini findet dann automatisch:
|
|
- `scripts/python/` → Python-Module
|
|
- `python_panels/` → `.pypanel` Interface-Dateien
|
|
- `toolbar/` → Shelf-Tools
|
|
- `help/` → Hilfedateien
|
|
- `config/` → Konfiguration
|
|
|
|
Keine manuelle Installation in `~/houdini21.0/` nötig — das Plugin lebt in einem eigenen Verzeichnis (z.B. Git-Repo).
|
|
|
|
### Python Panel Integration
|
|
|
|
Statt `exec(open(...).read()); show()` registriert man ein `.pypanel`-File:
|
|
|
|
**`python_panels/hermes_bridge.pypanel`**:
|
|
```json
|
|
{
|
|
"interface": "hermes_bridge_panel",
|
|
"label": "Hermes Bridge",
|
|
"icon": "MISC_python",
|
|
"help_url": "https://git.niklashmotion.art/Hermes/hermes-houdini-bridge"
|
|
}
|
|
```
|
|
|
|
Dann via Houdini-Menü: **Windows → Hermes Bridge** — kein Python-Shell-Pasten mehr nötig.
|
|
|
|
### Vorteile gegenüber aktuellem Ansatz
|
|
|
|
| Aktuell | Package-System |
|
|
|---------|---------------|
|
|
| `exec(open().read())` im Python Shell | Menü-Eintrag oder Shelf-Button |
|
|
| Manuelles Kopieren nach `scripts/python/` | `git clone` + 1 JSON-Datei |
|
|
| Kein Update-Mechanismus | `git pull` = Update |
|
|
| Python-Panel nur per Code aufrufbar | Registriert im Windows-Menü |
|
|
| Keine Versionierung im Houdini-Kontext | Package-Browser zeigt installierte Version |
|
|
|
|
---
|
|
|
|
## Ziel-Struktur
|
|
|
|
```
|
|
hermes-houdini-bridge/ ← Git-Repo, überall clonbar
|
|
├── hermes_houdini_bridge.json ← [NEU] Package-Descriptor (wird nach ~/houdini21.0/packages/ symlinked)
|
|
├── python_panels/ ← [NEU] Houdini findet Panels automatisch
|
|
│ └── hermes_bridge.pypanel
|
|
├── scripts/
|
|
│ └── python/
|
|
│ ├── hermes_bridge_panel.py ← UI-Klasse (unverändert, aber mit PanelInterface)
|
|
│ └── hermes_bridge_core.py ← [NEU] Bridge-Logik als Modul (wiederverwendbar)
|
|
├── toolbar/
|
|
│ └── hermes_bridge.shelf ← Shelf-Button (optional)
|
|
├── help/ ← [NEU] Doku-Integration
|
|
│ └── index.html
|
|
├── hermes/ ← hhb Client (unverändert)
|
|
│ └── bin/hhb
|
|
├── examples/
|
|
├── docs/
|
|
└── README.md
|
|
```
|
|
|
|
---
|
|
|
|
## Implementierungs-Schritte
|
|
|
|
### Schritt 1: Package-Descriptor erstellen
|
|
- `hermes_houdini_bridge.json` mit `hpath`, `env`, `load_package_once`
|
|
- Optional: `enable`-Expression für Houdini-Version-Check
|
|
|
|
### Schritt 2: Python Panel als Interface registrieren
|
|
- `hermes_bridge.pypanel` erstellen
|
|
- Panel-Klasse von `hou.PanelInterface` ableiten (statt `QWidget`)
|
|
- `show()` läuft dann über `hou.PanelInterface.showPanel()`
|
|
|
|
### Schritt 3: Bridge-Logik extrahieren
|
|
- `hermes_bridge_core.py`: Port-Open/Close, Status-Check als sauberes Modul
|
|
- Panel nutzt das Modul → testbar, wiederverwendbar
|
|
|
|
### Schritt 4: Installation vereinfachen
|
|
- `install.sh`: Symlink des `.json`-Descriptors nach `~/houdini21.0/packages/`
|
|
- `git clone` = Installation, `git pull` = Update
|
|
- Optional: `install.py` für Cross-Plattform (Windows/Mac)
|
|
|
|
### Schritt 5: Auto-Start (optional)
|
|
- `scripts/456.py`: Wird beim Houdini-Start ausgeführt
|
|
- Kann automatisch den Port öffnen oder das Panel anzeigen
|
|
|
|
### Schritt 6: Package-Browser-Support
|
|
- `show: true` im JSON → erscheint im Houdini Package Browser
|
|
- `recommends`/`requires` für Abhängigkeiten
|
|
|
|
---
|
|
|
|
## Offene Fragen
|
|
|
|
1. **Repository-Pfad**: Soll das Git-Repo direkt als Package-Verzeichnis dienen, oder ein separates `package/`-Subdir?
|
|
2. **Auto-Start**: Soll der Port automatisch beim Houdini-Start geöffnet werden?
|
|
3. **Updates**: `git pull` reicht — oder brauchen wir einen expliziten Update-Button im Panel?
|
|
4. **Multi-Session**: Mehrere Houdini-Instanzen auf verschiedenen Ports — relevant?
|