Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IFC Viewer & Regel-Editor

Minimales Grundgerüst: 3D-IFC-Viewer (2/3 des Fensters) + Code-Editor für Prüfregeln (1/3 des Fensters).

Setup

python -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate
pip install -r requirements.txt

Starten

python main.py

Dann über "IFC öffnen..." eine .ifc-Datei laden.

Regeln schreiben

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 violations
  • model ist das rohe ifcopenshell.file-Objekt — alle IfcOpenShell-Methoden (by_type, by_guid, by_id, ...) stehen zur Verfügung.
  • self.violation(element, message, severity) baut bequem ein RuleViolation-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.

Projektstruktur

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

Bekannte Einschränkungen / nächste Schritte

  • Sandbox: rules/runner.py nutzt aktuell exec() mit eingeschränkten Builtins im selben Prozess. Für produktiven Einsatz (z. B. wenn Regeln von Dritten kommen) besser durch einen multiprocessing.Process mit Timeout ersetzen, damit Endlosschleifen oder Abstürze im Regelcode die App nicht mitreißen.
  • Große Modelle: ifcopenshell.geom.iterator lä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 einem rules_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).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages