Minimales Grundgerüst: 3D-IFC-Viewer (2/3 des Fensters) + Code-Editor für Prüfregeln (1/3 des Fensters).
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txtpython main.pyDann über "IFC öffnen..." eine .ifc-Datei laden.
Im rechten Panel steht ein Code-Editor mit einem Template. Jede Regel
ist eine Klasse, die von Rule erbt:
class MyRule(Rule):
name = "Meine Regel"
def check(self, model):
violations = []
for wall in model.by_type("IfcWall"):
if not wall.Name:
violations.append(self.violation(wall, "Wand ohne Namen"))
return violationsmodelist das roheifcopenshell.file-Objekt — alle IfcOpenShell-Methoden (by_type,by_guid,by_id, ...) stehen zur Verfügung.self.violation(element, message, severity)baut bequem einRuleViolation-Objekt inkl. GUID des betroffenen Elements.- Klick auf "Regel prüfen" führt den Code aus und zeigt Verstöße in der Liste darunter an.
- Klick auf einen Verstoß in der Liste hebt das zugehörige Element im 3D-Viewer farblich hervor und zentriert die Kamera darauf.
Zwei Beispielregeln liegen in rules_examples/ (FireRating-Check,
Mindest-Türhöhe) — einfach den Inhalt in den Editor kopieren.
ifc_viewer/
├── main.py # Einstiegspunkt
├── core/
│ └── ifc_model.py # IFC laden, Geometrie -> PyVista-Meshes
├── rules/
│ ├── base.py # Rule / RuleViolation / Severity API
│ └── runner.py # exec() der Regel-Quelltexte (Sandbox-MVP)
├── ui/
│ ├── main_window.py # Hauptfenster, Splitter 2/3 - 1/3
│ ├── viewer_panel.py # 3D-Ansicht (pyvistaqt)
│ ├── rule_editor_panel.py # Code-Editor + Ergebnisliste
│ └── highlighter.py # einfacher Python-Syntax-Highlighter
└── rules_examples/ # Beispielregeln zum Ausprobieren
- Sandbox:
rules/runner.pynutzt aktuellexec()mit eingeschränkten Builtins im selben Prozess. Für produktiven Einsatz (z. B. wenn Regeln von Dritten kommen) besser durch einenmultiprocessing.Processmit Timeout ersetzen, damit Endlosschleifen oder Abstürze im Regelcode die App nicht mitreißen. - Große Modelle:
ifcopenshell.geom.iteratorläuft bereits multi-threaded; bei sehr großen IFC-Dateien lohnt sich zusätzlich Level-of-Detail/Frustum-Culling im Viewer. - Regeln speichern/laden: aktuell nur im Editor-Fenster gehalten;
als nächstes sinnvoll: Regeln als
.py-Dateien in einemrules_library/-Ordner persistieren, mit Liste/Tabs im UI. - Mehrere Regeln gleichzeitig prüfen: aktuell eine Regel pro Lauf; leicht erweiterbar zu einem "Regelsatz" (Liste von Rule-Instanzen, gesammeltes Ergebnis).