BIM Bericht
|
|
| Menüeintrag |
|---|
| Verwalten → Bericht-Werkzeuge → Bericht |
| Arbeitsbereich |
| BIM |
| Standardtastenkürzel |
| Keiner |
| Eingeführt in Version |
| 26.3 |
| Siehe auch |
| Arch Liste |
Beschreibung
Der BIM-Bericht ist ein Werkzeug zur Erstellung von Zeitplänen und Datenberichten aus einem FreeCAD-Modell. Er verwendet eine SQL-ähnliche Abfragesprache zum Auswählen, Filtern und Aggregieren von Daten und bietet damit eine deklarative Alternative zu anderen Planungswerkzeugen. Letztendlich ermöglicht es Benutzern, eine Kalkulationstabelle zu erstellen und automatisch mit Daten aus dem Modell zu füllen.
Das Werkzeug BIM Bericht auswählen, wenn Folgendes ausgeführt werden muss:
- Komplexe Filterung: Objekte anhand einer Kombination von Eigenschaften auswählen, einschließlich verschachtelter Daten (z. B. die Positionierungskoordinaten eines Objekts).
- Datenaggregation: Die Summen, Anzahlen, Mindest- oder Höchstwerte über viele Objekte hinweg berechnen (z. B. die Gesamtfläche aller „Raum“-Objekte ermitteln).
- Hierarchische Abfragen: Objekte anhand ihrer Beziehung zu anderen Objekten auswählen (z. B. alle Fenster finden, die sich in Wänden auf einer bestimmten Etage befinden).
Anwendung
- Ein FreeCAD-Dokument öffnen oder erstellen, das einige Objekte enthält.
- Es gibt mehrere Möglichkeiten, das Werkzeug aufzurufen:
- Die Schaltfläche
Bericht drücken.
- Im Menü Verwalten → Berichtswerkzeuge →
Bericht wählen.
- Die Schaltfläche
- Der neue Bericht öffnet automatisch sein Aufgaben-Fenster. Eine oder mehrere Anweisungen für den Bericht erstellen. Optional kann der bereitgestellte Anweisungseditor verwenden, um eine Vorschau der Ausführung dieser Anweisungen anzuzeigen.
- OK drücken, um den Bericht zu speichern und die zugehörige Tabelle mit den Abfrageergebnissen zu aktualisieren.
Benutzeroberfläche
Das BIM Bericht-System besteht aus drei Hauptkomponenten: Das Report-Objekt in der Baumansicht, dem Ziel Spreadsheet für die Ergebnisse, und dem Aufgaben-Fenster wo der Bericht eingestellt werden kann.
Wenn ein neuer Bericht erstellt wird, werden in der Baumansicht zwei neue Objekte angezeigt: das Berichtsobjekt, in dem alle Einstellungen gespeichert sind, und die zugehörige ReportResult-Tabelle.
Durch Doppelklicken auf das Objekt Daten-EigenschaftReport wird das Aufgaben-Fenster geöffnet, das der primäre Arbeitsbereich für die Bearbeitung des Berichts ist. Das Fenster ist in zwei Hauptbereiche unterteilt: die Report Statements (Berichts-Ausdrücke) und der Statement Editor (Ausdrucks-Editor).

Bericht-Anweisungen
Dieser Abschnitt ist immer oben im Aufgaben-Fenster sichtbar und enthält eine Zusammenfassung aller Abfragen (oder „Anweisungen“), aus denen der Bericht besteht.
Das Hauptmerkmal ist eine Tabelle, in der jede Anweisung aufgeführt ist. Von hier aus kann die Beschreibung angezeigt und direkt bearbeitet werden sowie wichtige Optionen für jede Abfrage umgeschaltet werden:
- Pipe: Aktiviert den Pipeline-Modus für diese Anweisung, wobei die Ausgabe der vorherigen Anweisung als Eingabe verwendet wird.
- Header: Verwendet die Beschreibung der Anweisung als zusammengefasste Abschnittsüberschrift in der Tabelle.
- Cols: Enthält die Spaltennamen (z. B.
Label,Area) als Kopfzeile für die Ergebnisse dieser Anweisung.
Durch Doppelklicken auf eine Zeile des Ausdrucks wird dieser zur Bearbeitung geöffnet. Durch Drücken der Taste F2 in einer Zeile des Ausdrucks kann die Beschreibung des Ausdrucks direkt bearbeitet werden, ohne dass der vollständige Editor geladen werden muss.
Unter der Tabelle sind Schaltflächen zum Hinzufügen,
Entfernen,
Duplizieren, oder
Bearbeiten der ausgewählten Anweisung.
Schließlich können über das Dropdown-Menü Berichtsvorlagen vollständige, vorkonfigurierte Berichte geladen werden, wie beispielsweise ein „Raum- und Flächenplan“.
Anweisungs-Editor
Dieser Abschnitt wird unten im Aufgaben-Fenster angezeigt, wenn eine Anweisung ausgewählt und auf Ausgewählte bearbeiten geklickt wird. Hier wird eine individuelle SQL-Abfrage geschrieben und konfiguriert.

- Der SQL-Abfrage-Editor ist ein Textfeld mit Syntaxhervorhebung. Die Autovervollständigung für SQL-Schlüsselwörter und Eigenschaftsnamen aus dem Modell ist automatisch aktiviert. Nach Bedarf die Tasten ↑ und ↓ verwenden und die Tab-Taste drücken, um den ausgewählten Vorschlag zu übernehmen.
- Unterhalb des Editors, gibt es einen Live-Validierungs-Status, die unmittelbar eine Rückmeldung gibt, anzeigt, ob deine Syntax gültig ist, und eine Live-Zählung der übereinstimmenden Objekte anzeigt.
- Die Schaltfläche
Vorschau anzeigen führt die aktuelle Abfrage auf Abruf aus und zeigt die vollständigen Ergebnisse in einer temporären Tabelle an, sodass die Abfrage getestet werden kann, ohne den Editor zu schließen.
- Die Schaltfläche
Hilfe öffnet ein Dialogfeld mit einer „Übersicht“ aller unterstützten SQL-Klauseln und -Funktionen.
- Die Gruppe Anzeigeoptionen enthält Kontrollkästchen zur Steuerung der endgültigen Formatierung in der Tabelle:
Als Pipeline-Schritt verwenden: Wenn diese Option aktiviert ist, verwendet diese Anweisung die Ergebnisse der vorherigen Anweisung als Datenquelle, anstatt das gesamte Dokument abzufragen. Dies ist die zentrale Steuerung zur Aktivierung von Pipeline-Workflows.
Beschreibung als Abschnittsüberschrift verwenden: Wenn dieses Kontrollkästchen aktiviert ist, wird die Beschreibung der Anweisung (z. B. „Raumliste“) als zusammengeführte, zentrierte Kopfzeile in die Tabelle vor den Datenergebnissen eingefügt.
Spaltennamen einbeziehen: Diese Option, die standardmäßig aktiviert ist, fügt die Spaltenüberschriften (z. B.
Label,Area) in die Tabellenkalkulationsausgabe für diese Anweisung ein.Leere Zeile einfügen: Wenn dieses Kontrollkästchen aktiviert ist, wird nach den Ergebnissen dieser Anweisung eine Leerzeile eingefügt, um in einem mehrteiligen Bericht eine visuelle Trennung zu schaffen.
Ergebnisse fett drucken: Die Datenzellen für die Ergebnisse dieser Anweisung werden zur Hervorhebung in Fettschrift dargestellt.
- Über das Dropdown-Menü Abfragevoreinstellungen können einzelne, häufig verwendete SQL-Abfragen geladen und gespeichert werden.
Die Schaltfläche Speichern speichert die Änderungen an der geladenen Anweisung. Wenn das Kontrollkästchen
Speichern und Weiter aktiviert und die Schaltfläche
Speichern gedrückt wird, wird zusätzlich zum Speichern eine neue Anweisung erstellt, um die Bearbeitung zu optimieren. Die Schaltfläche ❌ Verwerfen schließt den Anweisungseditor, ohne die vorgenommenen Änderungen zu speichern.
Arbeitsablauf
Dieses kurze Tutorial führt durch die Erstellung eines vollständigen Raumplans, von einer einfachen Liste bis hin zu einem mehrteiligen Bericht mit berechneten Summen.
Schritt 1: Neuer Bericht
- Die Schaltfläche
Bericht in der Werkzeugleiste des Arbeitsbereichs BIM anklicken.
- FreeCAD erzeugt ein Report-Objekt und eine ReportResult-Kalkulationstabelle in der Baumansicht und öffnet automatisch das Aufgaben-Fenster.
Schritt 2: Einfache Anweisung
Zunächst erstellen wir eine einfache Liste aller Räume und ihrer Flächen.
- In Report Statements auf die Schaltfläche
Anweisung hinzufügen klicken. In der Liste erscheint eine neue, leere Anweisung.
- Wenn die neue Anweisung ausgewählt ist, auf die Schaltfläche
Ausgewählte bearbeiten klicken. Der Statement Editor wird am unteren Rand des Aufgaben-Fensters angezeigt.
- Im Feld Description,
Room Listeingeben. - Im SQL Query-Editor, die folgende Abfrage eingeben. Dadurch werden Name und Fläche aller Objekte ausgewählt, die
Spacesind, und alphabetisch sortiert.SELECT Label, Area FROM document WHERE IfcType = 'Space' ORDER BY Label ASC
- Die Schaltfläche
Speichern im Editor drücken, um die Änderungen in der Anweisung zu speichern.
Schritt 3: Mehrteiliger Bericht
Fügen wir nun eine zweite Anweisung hinzu, um die Gesamtfläche zu berechnen.
- In der Übersicht erneut auf
Anweisung hinzufügen klicken, um eine zweite Anweisung zu erstellen.
- Diese neue Anweisung auswählen und auf
Auswahl bearbeiten klicken.
- Die Beschreibung auf
Total Areasetzen. - Im SQL-Abfrage-Editor, diese Aggregationsabfrage eingeben:
SELECT 'Total Usable Area', SUM(Area) FROM document WHERE IfcType = 'Space'
- Unter Anzeigeoptionen, Spaltennamen einbeziehen deaktivieren (da unsere erste Spalte ein benutzerdefiniertes Feld ist) und Ergebnisse fett gedruckt zur Hervorhebung überprüfen.
Speichern klicken. Nun hat man einen Bericht mit zwei Anweisungen. Auf die Schaltfläche OK unten im Aufgabenbereich klicken, um ihn auszuführen. Die zugehörige Tabelle wird automatisch mit den formatierten Ergebnissen geöffnet.
Schritt 4: Befehlsverknüpfung für erweiterte Abfragen
Mit Befehlsverknüpfung können Abfragen miteinander verknüpft werden, wobei die Ausgabe einer Abfrage als Eingabe für die nächste dient. Dies ist für komplexe hierarchische Auswahlen unerlässlich, beispielsweise bei Verwendung der Funktion CHILDREN(). Da es sich nicht um eine rekursive Funktion handelt, werden nur direkte Nachkommen gefunden.
Um beispielsweise alle Türen im „Erdgeschoss“ zu finden, muss eine mehrstufige Abfrage durchgeführt werden, da Türen Unterelemente von Wänden sind, die wiederum Unterelemente des Stockwerks sind.
- Erzeuge einen neuen Bericht.
- Anweisung 1: Finde das 'Ground Floor'-Objekt
- Füge eine Anweisung mit der Beschreibung
Find Ground Floorhinzu. - Diese Abfrage legt den Startpunkt unserer Suche fest.
SELECT * FROM document WHERE Label = 'Ground Floor'
- Füge eine Anweisung mit der Beschreibung
- Anweisung 2: Finde die Wände auf dieser Etage
- Füge eine zweite Anweisung mit der Beschreibung
Wände auf dieser Etage findenhinzu. - Aktiviere im Editor das Kontrollkästchen
Als Pipeline-Schritt verwenden. Dadurch wird die Anweisung angewiesen, auf den Ergebnissen der vorherigen Anweisung (dem Bodenobjekt) ausgeführt zu werden.
- Verwende diese Abfrage, um alle direkten untergeordneten Elemente der Etage zu finden und nur die Wände beizubehalten:
SELECT * FROM CHILDREN(SELECT * FROM document) WHERE IfcType = 'Wall'
- Füge eine zweite Anweisung mit der Beschreibung
- Anweisung 3: Finde die Türen in diesen Wänden
- Füge eine dritte Anweisung mit der Beschreibung
Find Doors in Wallshinzu. - Aktiviere erneut das Kontrollkästchen
Use as Pipeline Step. Dadurch wird die Anweisung nun mit der Ausgabe von Anweisung 2 (der Liste der Wände) verknüpft.
- Verwende diese Abfrage, um die untergeordneten Elemente der Wände zu ermitteln und nur die Türen beizubehalten:
SELECT Label, Width, Height FROM CHILDREN(SELECT * FROM document) WHERE IfcType = 'Door'
- Füge eine dritte Anweisung mit der Beschreibung
- OK drücken. Der Bericht führt die gesamte dreistufige Pipeline aus.
Das Ergebnis verstehen: Die endgültige Tabelle zeigt nur die Ergebnisse der letzten Anweisung in der Pipeline (die Liste der Türen). Die ersten beiden Anweisungen fungieren als Zwischenfilter, deren Ergebnisse im Speicher weitergegeben, aber nicht in die Tabelle gedruckt werden, sodass Sie einen übersichtlichen und präzisen Abschlussbericht erhalten.
Schritt 5: Voreinstellungen und Vorlagen
- Berichtsvorlagen laden einen vollständigen Bericht mit mehreren Anweisungen. Unter Report Statements (Berichtsvorlagen) eine Vorlage wie „Room and Area Schedule“ (Raum- und Flächenplan) aus der Dropdown-Liste auswählen, um die Konfiguration aus den Schritten 2 und 3 sofort zu laden. Eigenen Berichte können als neue Vorlagen gespeichert werden, um sie später wiederzuverwenden.
- Abfragevoreinstellungen laden eine einzelne Abfrage in den Editor. Im Statement Editor eine Voreinstellung wie „All Walls“ aus dem Dropdown-Menü auswählen, um den SQL-Editor zu füllen. Eigene, häufig verwendete Abfragen können gespeichert werden, indem auf die Schaltfläche Speichern… geklickt wird.
BIM SQL-Dialektreferenz
Dieser Abschnitt enthält detaillierte Informationen zum SQL-Dialekt, der vom BIM Berichtswerkzeug verwendet wird.
Hinweis: Die aktuellsten Informationen zu allen Klauseln und Funktionen findet man jederzeit in der Benutzeroberfläche, indem man im Aufgaben-Fenster-Editor des Berichts auf die Schaltfläche Hilfe klickt.
Klauseln
SELECT: Legt fest, welche Datenspalten zurückgegeben werden sollen. Mit*kann ein Standardbezeichner für alle Objekte ausgewählt werden.FROM: Gibt die Datenquelle an. In einer eigenständigen Abfrage ist dies immerdocument. In einer Pipeline istdocumentein Platzhalter für die Daten aus dem vorherigen Schritt. Es kann auch die FunktionCHILDREN()verwendet werden.WHERE: Filtert Objekte anhand von Bedingungen.GROUP BY: Fasst Zeilen mit identischen Werten zu Zusammenfassungszeilen zusammen; wird in der Regel in Verbindung mit Aggregatfunktionen verwendet.ORDER BY: Sortiert die Endergebnisse. Kann gefolgt werden vonASC(aufsteigend, Standard) oderDESC(absteigend). Unterstützt die Sortierung nach mehreren Spalten.AS: Erstellt einen Alias (einen benutzerdefinierten Namen) für eine Spalte in derSELECT-Klausel, z. B.SELECT Area AS "My Area".
Anwendungshinweise für GROUP BY und ORDER BY
Der Dialekt hat spezifische Regeln für die Verwendung von Ausdrücken (wie Funktionen oder Arithmetik) in den Klauseln GROUP BY und ORDER BY.
- Für
GROUP BY: Wenn nach einem Ausdruck gruppiert werden soll, muss der gesamte Ausdruck in derGROUP BY-Klausel wiederholt werden. Die Verwendung eines Alias aus derSELECT-Liste wird nicht unterstützt.- ✅ Richtig:
SELECT TYPE(*) … GROUP BY TYPE(*)
- ❌ Falsch:
SELECT TYPE(*) AS BimType … GROUP BY BimType
- ✅ Richtig:
- Für
ORDER BY: Das Sortieren nach einem rohen Ausdruck wird hingegen nicht unterstützt. Um nach dem Ergebnis eines Ausdrucks zu sortieren, muss man diesen zunächst mit einemAS-Alias in dieSELECT-Liste aufnehmen und dann in derORDER BY-Klausel auf diesen Alias verweisen.- ✅ Richtig:
SELECT Label, LOWER(Label) AS sort_key … ORDER BY sort_key
- ❌ Falsch:
SELECT Label … ORDER BY LOWER(Label)
- ✅ Richtig:
Funktionen
Die Programmiersprache verfügt über eine Bibliothek mit integrierten Funktionen zur Datenbearbeitung und -analyse.
| Kategorie | Funktion | Beschreibung |
|---|---|---|
| Gesamt | COUNT(property|*)
|
Zählt die Anzahl der Objekte. COUNT(*) zählt alle Reihen; COUNT(property) zählt Zeilen, in denen die angegebene property (Eigenschaft) nicht NULL ist.
|
SUM(property)
|
Berechnet die Summe einer numerischen property (Eigenschaft). | |
MIN(property)
|
Ermittelt den Minimalwert einer numerischen property (Eigenschaft). | |
MAX(property)
|
Ermittelt den Maximalwert einer numerischen property (Eigenschaft). | |
| Hierarchisch | PARENT(*)
|
Gibt das architektonisch relevante übergeordnete Objekt eines Objekts zurück (z. B. die Wand, in der sich ein Fenster befindet), wobei generische Gruppen transparent übersprungen werden. |
CHILDREN(subquery)
|
Eine Funktion, die in der FROM-Klausel verwendet wird. Gibt alle Unterelemente der von der Unterabfrage gefundenen Objekte zurück, wobei sowohl Inklusionsbeziehungen (.Group) als auch Host-Beziehungen (.Hosts) aufgelöst werden. Diese Funktion ist nicht rekursiv. Um Unterelemente oder tiefer liegende Nachkommen zu finden, mehrere CHILDREN()-Schritte mithilfe einer Pipeline verketten.
| |
CHILDREN_RECURSIVE(subquery, max_depth=15)
|
Eine Funktion, die in der FROM-Klausel verwendet wird. Gibt alle untergeordneten Objekte der subquery-Ergebnisse zurück, indem sie die Hierarchie rekursiv durchläuft. Generische Gruppen werden dabei transparent übersprungen. Optional kann ein Wert für max_depth angegeben werden (Standard: 15, 0 für unbegrenzt). Dadurch entfällt die Notwendigkeit komplexer Pipelines zum Auffinden verschachtelter Objekte.
| |
| Dienstprogramm | TYPE(*)
|
Gibt den benutzerseitigen Typ des Objekts zurück, wie er durch seinen Proxy bestimmt wird (z. B. Wall, Space, Part::Box).
|
CONVERT(quantity, 'unit')
|
Konvertiert ein FreeCAD-Mengenobjekt in eine neue Einheit und gibt es als reinen Zahlenwert zurück. Beispiel: CONVERT(Area, 'm^2').
| |
| Zeichenkette | LOWER(property)
|
Wandelt eine Texteigenschaft in Kleinbuchstaben um. |
UPPER(property)
|
Wandelt eine Texteigenschaft in Großbuchstaben um. | |
CONCAT(val1, val2, …)
|
Fügt mehrere Textwerte und Eigenschaften zu einer einzigen Zeichenfolge zusammen. |
Eigenschaftenzugriff
Es kann auf alle Eigenschaften eines Objekts zugegriffen werden, einschließlich verschachtelter Datenstrukturen.
- Direkter Zugriff: Direkt über den Namen auf eine einfache Eigenschaft zugreifen.
- Beispiel:
Label,IfcType
- Beispiel:
- Verschachtelter Zugriff: Die Punktnotation verwenden, um auf Untereigenschaften zuzugreifen.
- Beispiel:
Shape.Volume,Placement.Base.z
- Beispiel:
- Verketteter Zugriff: Den Zugriff auf Eigenschaften mit dem Ergebnis einer Funktion verketten, am häufigsten
PARENT().- Beispiel:
PARENT(*).Label,PARENT(*).PARENT(*).Height
- Beispiel:
Operatoren
| Typ | Operatoren | Beschreibung |
|---|---|---|
| Vergleich | =, !=, >, <, >=, <=
|
Standard-Vergleichsoperatoren. |
LIKE
|
Musterabgleich ohne Berücksichtigung der Groß-/Kleinschreibung. % für mehrere Zeichen und _ für ein einzelnes Zeichen verwenden.
| |
IS NULL, IS NOT NULL
|
Prüft, ob eine Eigenschaft einen Wert hat. | |
IN (value1, value2, …)
|
Prüft, ob der Wert einer Eigenschaft in einer vorgegebenen Liste von Literalen enthalten ist. | |
| Logisch | AND, OR
|
Wird in der WHERE-Klausel verwendet, um mehrere Bedingungen zu kombinieren.
|
| Arithmetisch | +, -, *, /
|
Führt Berechnungen mit numerischen Werten durch. Beachtet die übliche Reihenfolge der Rechenoperatoren; () verwenden, um diese zu überschreiben.
|
Allgemeine Syntax
- Literale und Anführungszeichen: Für Textliterale (Zeichenketten) können sowohl einfache Anführungszeichen (
') als auch doppelte Anführungszeichen (") verwendet werden. Zum Beispiel,WHERE Label = 'Wall'undWHERE Label = "Wall"sind gleichwertig. - Kommentare: Der Parser ignoriert sowohl einzeilige Kommentare, die mit
--beginnen, als auch mehrzeilige Kommentare, die in/* … */eingeschlossen sind. - Internationalisierung: Der Parser verarbeitet Nicht-ASCII-Zeichen (Unicode) in Eigenschaftsnamen korrekt (z. B. Fläche).
Beispiel-Abfragen
Dieser Abschnitt enthält eine Sammlung praktischer Abfragen, die direkt verwendet werden oder für die Berichte angepasst werden können.
Grundlegende Auswahlen
Alle Strukturelemente auswählen (Säulen und Träger):
SELECT Label, IfcType
FROM document
WHERE IfcType IN ('Column', 'Beam')
ORDER BY IfcType, Label
Alle Wände auswählen, deren Name „Außen“ enthält:
SELECT Label, Length, Height
FROM document
WHERE IfcType = 'Wall' AND Label LIKE '%Exterior%'
Datenaggregation und Zusammenfassungen
Alle BIM-Objekte zählen, gruppiert nach ihrem Typ:
SELECT IfcType, COUNT(*)
FROM document
WHERE IfcType IS NOT NULL
GROUP BY IfcType
ORDER BY IfcType ASC
Eine vollständige Mengenermittlung für alle Wände erhalten:
Diese Abfrage berechnet die Gesamtzahl der Wände, ihre Gesamtlänge sowie die minimale und maximale Wandhöhe.
SELECT
COUNT(*) AS "Total Count",
SUM(Length) AS "Total Length (mm)",
MIN(Height) AS "Min Height (mm)",
MAX(Height) AS "Max Height (mm)"
FROM document
WHERE IfcType = 'Wall'
Hierarchische Abfragen
Liste aller Objekte, die sich direkt im „Erdgeschoss“ befinden:
Hierbei wird die Funktion CHILDREN() verwendet, um den Inhalt eines bestimmten Containerobjekts abzufragen.
SELECT Label, IfcType
FROM CHILDREN(SELECT * FROM document WHERE Label = 'Ground Floor')
ORDER BY IfcType
Alle Türen und die jeweilige Wand auflisten, in der sie sich befinden:
Hierbei wird die Funktion PARENT() verwendet, um den Host jeder Tür zu ermitteln.
SELECT
Label AS "Door_Name",
PARENT(*).Label AS "Host_Wall_Name"
FROM document
WHERE IfcType = 'Door'
ORDER BY "Host_Wall_Name"
Alle Fenster im „Erdgeschoss“ finden (indem die Vorgänger überprüft werden):
Diese Abfrage findet Fenster, überprüft deren übergeordnetes Element (die Wand) und anschließend das übergeordnete Element dieser Wand (den Boden).
SELECT Label
FROM document
WHERE IfcType = 'Window' AND PARENT(*).PARENT(*).Label = 'Ground Floor'
Erweiterte Abfragen
Einen vollständigen Raum- und Flächenplan erstellen:
Diese Abfrage erzeugt eine formatierte Liste aller Räume, gruppiert nach der Etage, zu der sie gehören, mit ihrer Fläche umgerechnet in Quadratmeter.
SELECT
PARENT(*).Label AS "Floor",
Label AS "Room Name",
CONVERT(Area, 'm^2') AS "Area (m²)"
FROM document
WHERE IfcType = 'Space'
ORDER BY "Floor", "Room Name"
Anwendungshinweise
Einheiten
Wird eine Eigenschaft mit einer Einheit (Größe) ausgewählt, wie z. B. eine Länge oder ein Flächeninhalt, gibt die BIM-Report-Engine den nackten numerischen Wert dieser Eigenschaft zurück, wie er intern im FreeCAD-Dokument gespeichert ist. FreeCADs interne Einheiten basieren immer auf Millimetern (mm).
Das bedeutet, dass die Standardausgabe unabhängig vom aktuellen Einheitenschema oder den Benutzereinstellungen in mm für Länge, mm² für Fläche und mm³ für Volumen erfolgt. Die automatisch generierte Spaltenüberschrift gibt diese interne Einheit korrekt wieder.
Beispiel: Standardverhalten
Wenn diese einfache Abfrage auf einer Fläche von 1 Meter mal 1 Meter ausgeführt wird:
SELECT Label, Area FROM document WHERE IfcType = 'Space'
Die resultierende Kalkulationstabelle zeigt:
- Header:
Area (mm²) - Value:
1000000.0
<span id="Using_CONVERT()">
Verwendung von CONVERT()
Um die Ergebnisse in den gewünschten Einheiten zu erhalten, kann die Funktion CONVERT() verwendet werden, die eine explizite Kontrolle über die Ausgabe ermöglicht. Um die Fläche in Quadratmetern zu erhalten, ändert man die Abfrage wie folgt:
SELECT Label, CONVERT(Area, 'm^2') AS "Area (m²)" FROM document WHERE IfcType = 'Space'
Diese Abfrage liefert nun das Ergebnis in der gewünschten Einheit.:
- Header:
Area (m²) - Value:
1.0
Die Verwendung von CONVERT() garantiert, dass die Ausgabe des Berichts eindeutig ist und dass alle Berechnungen, die innerhalb der Abfrage durchgeführt werden (z. B. SUM(CONVERT(Area, 'm^2'))), mathematisch korrekt sind.
Eigenschaften
Ein Arch Report-Objekt stellt dem Benutzer die folgenden Eigenschaften zur Verfügung.
Daten
Report
- Daten-EigenschaftAutoUpdate: Diese Eigenschaft, die standardmäßig auf „True“ gesetzt ist, steuert, ob der Bericht bei jeder Neuberechnung des Dokuments automatisch erneut ausgeführt wird. Wenn diese Option aktiviert ist, wird die Berichtstabelle immer mit dem Modell synchronisiert. Wenn beispielsweise die Länge einer Wand geändert wird, wird der Wert
SUM(Length)im Bericht nach der Neuberechnung automatisch aktualisiert. Bei sehr großen Modellen kann es aus Leistungsgründen ratsam sein, diese Option zu deaktivieren, wenn viele Änderungen vorgenommen werden. Wenn „AutoUpdate“ auf „False“ gesetzt ist, kann der Bericht jederzeit manuell aktualisiert werden, indem mit der rechten Maustaste auf das Berichtsobjekt in der Baumansicht geklickt wird und „Recompute“ ausgewählt oder indem auf die globale Schaltfläche „Recompute“ geklickt wird. - Daten-EigenschaftTarget: enthält einen Link zum Spreadsheet-Objekt, in das die Ergebnisse des Berichts geschrieben werden. Beim Erstellen eines neuen Berichts wird automatisch eine neue Tabelle erstellt und hier verknüpft. Diese Eigenschaft kann geändert werden, um bei Bedarf auf eine andere, bereits vorhandene Tabelle im aktuellen Dokument zu verweisen.
Skripten
Die BIM Bericht-Engine ist vollständig über Python zugänglich, sodass die erweiterten Abfragefunktionen in die eigenen Skripte und Automatisierungen integrieren kann.
Arch.selectObjects(query_string)
Dies ist die Hauptfunktion zum Ausführen einer einzelnen, einfachen SQL-Abfrage. Sie nimmt eine Abfragezeichenfolge als Eingabe entgegen und gibt eine Liste der FreeCAD-Dokumentobjekte zurück, die der Abfrage entsprechen. Wenn die Abfrage ungültig ist oder keine Objekte findet, gibt sie eine leere Liste zurück und gibt eine Fehlermeldung an die Konsole aus.
Beispiel: Alle Wandobjekte mit „Exterior“ (Außenbereich) im Namen abrufen
import FreeCAD
import Arch
# This query selects all Wall objects whose Label contains the substring "Exterior"
query = "SELECT * FROM document WHERE IfcType = 'Wall' AND Label LIKE '%Exterior%'"
exterior_walls = Arch.selectObjects(query)
# The result is a list of FreeCAD objects
FreeCAD.Console.PrintMessage(f"Found {len(exterior_walls)} exterior walls.\n")
for wall in exterior_walls:
FreeCAD.Console.PrintMessage(f"- {wall.Label} (Length: {wall.Length})\n")
Arch.selectObjectsFromPipeline(statements)
Für komplexere, mehrstufige Auswahlen kann diese Funktion verwendet werden, um eine Pipeline auszuführen. Sie nimmt eine Liste von ArchSql.ReportStatement-Objekten entgegen und gibt die endgültige Liste der FreeCAD-Dokumentobjekte zurück, die aus der vollständigen Pipeline resultieren.
Dies entspricht programmatisch der Verwendung des Kontrollkästchens „Als Pipeline-Schritt verwenden“ in der Benutzeroberfläche.
Beispiel: Finde alle Türen im „Erdgeschoss“"
Dies ist ein klassisches hierarchisches Problem, das mehrere Schritte erfordert. Das Ziel besteht darin, die „Enkelkinder” (Türen) eines „Großelternteils” (des Stockwerks) zu finden. Da die Funktion CHILDREN() nicht rekursiv ist, müssen wir mehrere Schritte in einer Pipeline verketten.
- Zuerst suchen wir das Objekt
'Ground Floor'. - Zweitens finden wir seine direkten Kinder (die Wände, Räume usw.).
- Drittens finden wir die Kinder dieser Objekte (zu denen auch die Türen und Fenster gehören, die von den Wänden gehostet werden).
- Schließlich filtern wir diese letzte Gruppe, um nur die Türen zu behalten.
import FreeCAD
import Arch
import ArchSql
# Step 1: Define the pipeline statements.
# The ReportStatement class must be imported from the ArchSql module.
# Statement 1: Find the parent 'Ground Floor' object.
# Output of this step: [Ground_Floor_Object]
stmt1 = ArchSql.ReportStatement(
query_string="SELECT * FROM document WHERE Label = 'Ground Floor'"
)
# Statement 2: Find the direct children of the floor (walls, spaces, etc.).
# is_pipelined=True tells this to run on the output of stmt1.
# Output of this step: [Wall_Object_1, Wall_Object_2, Space_Object_1, …]
stmt2 = ArchSql.ReportStatement(
query_string="SELECT * FROM CHILDREN(SELECT * FROM document)",
is_pipelined=True
)
# Statement 3: Find the children of the objects from the previous step.
# This finds the doors and windows hosted by the walls.
# Output of this step: [Door_Object, Window_Object_1, …]
stmt3 = ArchSql.ReportStatement(
query_string="SELECT * FROM CHILDREN(SELECT * FROM document)",
is_pipelined=True
)
# Statement 4: Filter the final list to keep only the doors.
# This runs on the output of stmt3.
# Final Output: [Door_Object]
stmt4 = ArchSql.ReportStatement(
query_string="SELECT * FROM document WHERE IfcType = 'Door'",
is_pipelined=True
)
# Step 2: Execute the full pipeline.
pipeline_statements = [stmt1, stmt2, stmt3, stmt4]
doors_on_floor = Arch.selectObjectsFromPipeline(pipeline_statements)
# The result is the final list of door objects.
FreeCAD.Console.PrintMessage(f"Found {len(doors_on_floor)} doors on the ground floor.\n")
for door in doors_on_floor:
FreeCAD.Console.PrintMessage(f"- {door.Label}\n")
Überprüfen und Teilen eines Berichts über die Python-Konsole
Zum Debuggen, Skripten oder Teilen der Arbeit mit anderen kann eine vollständige, für Menschen lesbare Zusammenfassung der Konfiguration eines Berichts direkt aus der Python-Konsole abgerufen werden.
Die benutzerdefinierte Logik und der detaillierte Inhalt eines BIM-Berichts werden in seinem „Proxy-Objekt” gespeichert. Durch Zugriff auf das Attribut .Proxy erhält man einen vollständigen Ausdruck aller Anweisungen und der SQL-Abfragen. Auf diese Weise kann man die gesamte Berichtsdefinition bequem in die Zwischenablage kopieren, um sie in einem Forum oder einem Fehlerbericht zu teilen.
Wie man es benutzt:
- Das Berichtsobjekt in der Baumansicht auswählen.
- Strg+Umschalt+P drücken. Dadurch wird das ausgewählte Objekt als Variable
objan die Python-Konsole gesendet. - In der Konsole Folgendes eingeben und die Eingabetaste drücken:
print(obj.Proxy)
Beispiel-Ausgabe:
>>> print(obj.Proxy)
BIM Report: 'My Door Schedule' (2 statements)
--- Statement [1]: Find All Walls on Ground Floor ---
SELECT *
FROM CHILDREN(SELECT * FROM document WHERE Label = 'Ground Floor')
WHERE IfcType = 'Wall'
--- Statement [2]: Final Door Schedule (Pipelined, Header) ---
SELECT
Tag,
COUNT(*) AS "Count"
FROM
document
GROUP BY
Tag
- 2D Drafting: New Sketch, Line, Polyline, Rectangle, Arc, Arc From 3 Points, Circle, Ellipse, Polygon, B-Spline, Bézier Curve, Cubic Bézier Curve, Point, Fillet
- 3D/BIM: Site, Building, Level, Space, Wall, Curtain Wall, Column, Beam, Slab, Door, Window, Covering, Pipe, Connector, Stairs, Roof, Panel, Frame, Fence, Truss, Equipment
- Reinforcement Tools: Custom Rebar, Straight Rebar, U-Shape Rebar, L-Shape Rebar, Stirrup, Bent-Shape Rebar, Helical Rebar, Column Reinforcement, Beam Reinforcement, Slab Reinforcement, Footing Reinforcement
- Generic 3D Tools: Profile, Box, Shape Builder, Facebinder, Objects Library, Component, External Reference
- Annotation: Aligned Dimension, Horizontal Dimension, Vertical Dimension, Text, Leader, Label, Hatch, Axis, Axis System, Grid, Section Plane, 2D Drawing, Section View, Section Cut, New Page, New View
- Snapping: Snap Lock, Snap Endpoint, Snap Midpoint, Snap Center, Snap Angle, Snap Intersection, Snap Perpendicular, Snap Extension, Snap Parallel, Snap Special, Snap Near, Snap Ortho, Snap Grid, Snap Working Plane, Snap Dimensions, Toggle Grid, Working Plane Front, Working Plane Top, Working Plane Side, Working Plane
- Modify: Move, Rotate, Scale, Mirror, Clone, Make Link, Unclone, Copy, Simple Copy, Compound, 2D Offset, Offset, Trimex, Join, Split, Stretch, Draft to Sketch, Edit, Upgrade, Downgrade, Add Component, Remove Component, Array, Path Link Array, Polar Array, Point Link Array, Cut With Plane, Extrude, Extrude Face, Union, Difference, Intersection
- Manage: BIM Setup, Setup Project, Manage Doors and Windows, Manage IFC Elements, Manage IFC Quantities, Manage IFC Properties, Manage Classification, Manage Layers, Material, Report, Schedule, Survey, Preflight Checks, Annotation Styles
- Utils: Move to Trash, Working Plane View, Select Group, Set Slope, Working Plane Proxy, Add to Construction Group, Split Mesh, Mesh to Shape, Select Non-Manifold Meshes, Remove Shape From BIM, Close Holes, Merge Walls, Check, Toggle IFC B-Rep Flag, Toggle Subcomponents, IFC Shape Diff, IFC Explorer, New IFC Spreadsheet, Image Plane, Rewire, Glue, Re-Extrude
- Panel Tools: Panel, Panel Cut, Panel Sheet, Nest
- Structure Tools: Structure, Structural System, Multiple Structures
- IFC Tools: IFC Project, IFC File Diff, IFC Expand, Convert to IFC Project, IfcOpenShell Update
- Nudge: Nudge Switch, Nudge Up, Nudge Down, Nudge Left, Nudge Right, Nudge Rotate Left, Nudge Rotate Right, Nudge Extend, Nudge Shrink
- Additional: Preferences, Fine tuning, Import Export Preferences, IFC, DAE, OBJ, JSON, 3DS, SHP
- Erste Schritte
- Installation: Herunterladen, Windows, Linux, Mac, Zusätzliche Komponenten, Docker, AppImage, Ubuntu Snap
- Grundlagen: Über FreeCAD, Graphische Oberfläche, Mausbedienung, Auswahlmethoden, Objektname, Voreinstellungseditor, Arbeitsbereiche, Dokumentstruktur, Objekteigenschaften, FreeCAD unterstützen, Spenden
- Hilfe: Anleitungen, Videoanleitungen
- Arbeitsbereiche: Std Base, Arch, Assembly, BIM, CAM, Draft, FEM, Inspection, Material, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework