BIM: Raport
|
BIM: Raport |
| Lokalizacja w menu |
|---|
| Zarządzaj → Narzędzia raportów → Raport BIM |
| Środowisko pracy |
| BIM |
| Domyślny skrót |
| brak |
| Wprowadzono w wersji |
| 1.2 |
| Zobacz także |
| brak |
Opis
Raport BIM to narzędzie do generowania zestawień i raportów danych z modelu FreeCAD. Wykorzystuje język zapytań podobny do SQL do wybierania, filtrowania i agregowania danych, oferując deklaratywną alternatywę dla innych narzędzi do tworzenia zestawień. Ostatecznie umożliwia użytkownikom tworzenie i automatyczne wypełnianie arkusza kalkulacyjnego w środowisku pracy Arkusz kalkulacyjny danymi zebranymi z modelu.
Możesz wybrać narzędzie Raport BIM, gdy potrzebujesz wykonać:
- Złożone filtrowanie: Wybieranie obiektów na podstawie kombinacji właściwości, w tym danych zagnieżdżonych (np. współrzędnych umiejscowienia obiektu).
- Agregacja danych: Obliczanie sum, liczności, wartości minimalnych lub maksymalnych dla wielu obiektów (np. znalezienie całkowitej powierzchni wszystkich obiektów typu „Space”).
- Zapytania hierarchiczne: Wybieranie obiektów na podstawie ich relacji z innymi obiektami (np. znalezienie wszystkich okien osadzonych w ścianach na określonej kondygnacji).
Użycie
- Otwórz lub utwórz dokument FreeCAD zawierający obiekty.
- Istnieje kilka sposobów uruchomienia narzędzia:
- Naciśnij przycisk
Raport BIM.
- Wybierz z menu opcję Zarządzaj → Narzędzia raportów →
Raport BIM.
- Naciśnij przycisk
- Nowy raport automatycznie otworzy swój panel zadań. Utwórz jedną lub więcej instrukcji dla raportu. Opcjonalnie możesz użyć dostępnego edytora instrukcji, aby zobaczyć podgląd wykonania tych instrukcji.
- Naciśnij OK, aby zapisać raport i odświeżyć powiązany arkusz kalkulacyjny wynikami zapytania.
Interfejs użytkownika
System Raport BIM składa się z trzech głównych elementów: obiektu Raport w widoku drzewa, docelowego Arkusza kalkulacyjnego na wyniki oraz Panelu zadań, w którym konfiguruje się raport.
Po utworzeniu nowego raportu w Widoku drzewa pojawią się dwa nowe obiekty: obiekt Report, który przechowuje wszystkie ustawienia, oraz powiązany z nim arkusz kalkulacyjny ReportResult.
Dwukrotne kliknięcie obiektu DANEReport otwiera Panel zadań, który jest głównym obszarem roboczym do edycji raportu. Panel jest podzielony na dwa główne obszary: Instrukcje raportu oraz Edytor instrukcji.

Instrukcje raportu
Ta sekcja jest zawsze widoczna w górnej części panelu zadań i zawiera podsumowanie wszystkich zapytań (lub "instrukcji") składających się na raport.
Główną funkcją jest tabela zawierająca listę wszystkich instrukcji. Z tego miejsca możesz przeglądać i bezpośrednio edytować Opis oraz przełączać kluczowe opcje dla każdego zapytania:
- Pipe: Włącza tryb potokowy dla danej instrukcji, wykorzystując wynik poprzedniej jako dane wejściowe.
- Header: Używa opisu instrukcji jako scalonego nagłówka sekcji w arkuszu kalkulacyjnym.
- Cols: Dołącza nazwy kolumn (np.
Label,Area) jako wiersz nagłówkowy dla wyników tej instrukcji.
Dwukrotne kliknięcie wiersza instrukcji otwiera ją do edycji. Naciśnięcie F2 na wierszu instrukcji umożliwia edycję opisu bezpośrednio w tabeli, bez otwierania pełnego edytora.
Pod tabelą znajdują się przyciski do Dodania,
Usunięcia,
Zduplikowania lub
Edycji wybranej instrukcji.
Na końcu rozwijane menu Szablony raportu umożliwia wczytanie kompletnych, wstępnie skonfigurowanych raportów, takich jak "Obmiar pomieszczenia i obszaru".
Edytor instrukcji
Ta sekcja pojawia się w dolnej części Panelu zadań po wybraniu instrukcji i kliknięciu Edytuj wybrane. W tym miejscu piszesz i konfigurujesz pojedyncze zapytanie SQL.

- Edytor zapytań SQL to pole tekstowe z podświetlaniem składni. Autouzupełnianie dla słów kluczowych SQL i nazw właściwości z modelu jest włączone automatycznie. Używaj klawiszy ↑ i ↓ w razie potrzeby, a Tab naciśnij, aby zastosować wybraną sugestię.
- Poniżej edytora znajduje się etykieta statusu Walidacja na żywo, która zapewnia natychmiastową informację zwrotną, wskazując, czy składnia jest poprawna, oraz pokazując aktualną liczbę pasujących obiektów.
- Przyciskiem
Pokaż podgląd można uruchomić bieżące zapytanie na żądanie i wyświetlić pełne wyniki w tymczasowej tabeli, co pozwala testować zapytanie bez zamykania edytora.
- Przyciskiem
Help otwiera się okno ze "ściągawką" wszystkich obsługiwanych klauzul i funkcji SQL.
- Grupa Opcje wyświetlania zawiera pola wyboru do kontrolowania końcowego formatowania w arkuszu kalkulacyjnym:
Użyj jako krok potoku: Po zaznaczeniu, ta instrukcja będzie używać wyników poprzedniej instrukcji jako źródła danych zamiast przeszukiwać cały dokument. Jest to kluczowa opcja dla włączenia przepływów potokowych.
Użyj opisu jako nagłówka sekcji: Po zaznaczeniu opis instrukcji (np. "Lista pokoju") zostanie zapisany jako scalony, wyśrodkowany wiersz nagłówkowy w arkuszu kalkulacyjnym przed wynikami danych.
PRAWDA: Opcja włączona domyślnie, dołącza nagłówki kolumn (np.
Label,Area) do wyników arkusza dla tej instrukcji.Dodaj pusty rząd po: Po zaznaczeniu, po wynikach tej instrukcji zostanie wstawiony pusty wiersz, zapewniając wizualne oddzielenie w raporcie wielosekcyjnym.
Wydrukuj wyniki w pogrubieniu: Renderuje komórki danych dla wyników tej instrukcji pogrubioną czcionką w celu wyróżnienia.
- Rozwijane menu Gotowe zapytania umożliwia wczytywanie i zapisywanie pojedynczych, często używanych zapytań SQL.
Przycisk Zapisz zapisuje zmiany w wybranej instrukcji. Gdy zaznaczone jest pole
Zapisz i następne i naciśnięty zostanie przycisk
Zapisz, oprócz zapisania zmian zostanie utworzona nowa instrukcja, co ułatwia kontynuację edycji. Przycisk ❌ Odrzuć zamyka edytor instrukcji bez zapisywania wprowadzonych zmian.
Przepływ pracy
Ten krótki samouczek poprowadzi Cię przez proces tworzenia kompletnego obmiaru pokoju, od prostej listy po wieloczęściowy raport z obliczonymi sumami.
Krok 1: Nowy raport
- Kliknij przycisk
Raport BIM na pasku narzędzi środowiska roboczego BIM.
- FreeCAD utworzy obiekt Report i arkusz kalkulacyjny ReportResult w Widoku drzewa i automatycznie otworzy Panel zadań.
Krok 2: Prosta instrukcja
Najpierw utwórzmy prostą listę wszystkich przestrzeni i ich powierzchni.
- W Instrukcjach raportu kliknij przycisk
Dodaj instrukcję. W liście pojawi się nowa, pusta instrukcja.
- Z nową instrukcją wybraną, kliknij przycisk
Edytuj wybrane. Edytor instrukcji pojawi się w dolnej części Panelu zadań.
- W polu Opis wpisz
Room List. - W edytorze Zapytanie SQL wpisz następujące zapytanie. Wybiera ono nazwę i powierzchnię wszystkich obiektów typu
Spacei sortuje je alfabetycznie.SELECT Label, Area FROM document WHERE IfcType = 'Space' ORDER BY Label ASC
- Kliknij przycisk
Zapisz w edytorze, aby zatwierdzić zmiany w instrukcji.
Krok 3: Raport o wielu sekcjach
Teraz dodajmy drugą instrukcję do obliczenia całkowitej powierzchni.
- W widoku ogólnym ponownie kliknij
Dodaj instrukcję, aby utworzyć drugą instrukcję.
- Z nową instrukcją wybraną, kliknij
Edytuj wybrane.
- Ustaw Description na
Total Area. - W edytorze Zapytanie SQL wpisz następujące zapytanie agregujące:
SELECT 'Total Usable Area', SUM(Area) FROM document WHERE IfcType = 'Space'
- W sekcji Opcje wyświetlania' odznacz Uwzględniaj nazwy kolumn (ponieważ nasza pierwsza kolumna to własna etykieta) i zaznacz Drukuj wyniki w pogrubieniu dla wyróżnienia.
- Kliknij
Zapisz. Teraz masz raport składający się z dwóch instrukcji. Kliknij główny przycisk OK na dole Panelu zadań, aby go wykonać. Powiązany arkusz kalkulacyjny otworzy się automatycznie z sformatowanymi wynikami.
Krok 4: Potoki dla zaawansowanych zapytań
Potokowanie pozwala łączyć zapytania w łańcuch, gdzie wynik jednego staje się danymi wejściowymi dla następnego. Jest to niezbędne przy złożonych selekcjach hierarchicznych, np. podczas użycia funkcji CHILDREN(). Ponieważ funkcja nie działa rekurencyjnie, znajduje tylko bezpośrednich potomków.
Na przykład, aby znaleźć wszystkie drzwi znajdujące się na "Parterze", trzeba wykonać zapytanie wieloetapowe, ponieważ drzwi są dziećmi ścian, które z kolei są dziećmi kondygnacji.
- Utwórz nowy raport.
- Instrukcja 1: Znajdź obiekt 'Parter'
- Dodaj instrukcję z opisem
Znajdź parter. - To zapytanie wybiera punkt początkowy naszego wyszukiwania.
SELECT * FROM document WHERE Label = 'Ground Floor'
- Dodaj instrukcję z opisem
- Instrukcja 2: Znajdź ściany na tej kondygnacji
- Dodaj drugą instrukcję z opisem
Znajdź ściany na kondygnacji. - W edytorze zaznacz pole
Użyj kroku potoku. Informuje to instrukcję, że ma działać na wynikach poprzedniej instrukcji (obiekt kondygnacji).
- Użyj tego zapytania, aby znaleźć wszystkich bezpośrednich potomków kondygnacji i pozostawić tylko ściany:
SELECT * FROM CHILDREN(SELECT * FROM document) WHERE IfcType = 'Wall'
- Dodaj drugą instrukcję z opisem
- Instrukcja 3: Znajdź drzwi w tych ścianach
- Dodaj trzecią instrukcję z opisem
Znajdź drzwi w ścianach. - Ponownie zaznacz pole
Użyj kroku potoku. Teraz łączy ją z wynikiem Instrukcji 2 (lista ścian).
- Użyj tego zapytania, aby znaleźć obiekty podrzędne ścian i pozostawić tylko drzwi:
SELECT Label, Width, Height FROM CHILDREN(SELECT * FROM document) WHERE IfcType = 'Door'
- Dodaj trzecią instrukcję z opisem
- Kliknij OK. Raport wykona pełny trzyetapowy potok.
Zrozumienie wyniku: Końcowy arkusz kalkulacyjny pokaże tylko wyniki ostatniej instrukcji w potoku (listę drzwi). Pierwsze dwie instrukcje pełnią rolę filtrów pośrednich – ich wyniki są przekazywane w pamięci, ale nie są drukowane w arkuszu, co daje czysty i precyzyjny końcowy raport.
Krok 5: Gotowe ustawienia i szablony
- Szablony raportów wczytują kompletny, wieloinstrukcyjny raport. W Instrukcjach raportu wybierz szablon, np. "Obmiar pokoju i obszaru", z rozwijanego menu, aby natychmiast wczytać konfigurację z Kroków 2 i 3. Możesz zapisać własne raporty jako nowe szablony do ponownego użycia.
- Gotowe zapytania wczytują pojedyncze zapytanie do edytora. W Edytorze zapytań wybierz preset, np. "Wszystkie ściany", z rozwijanego menu, aby wypełnić edytor SQL. Własne często używane zapytania możesz zapisać, klikając przycisk Zapisz….
Odniesienie dla dialektu BIM SQL
W tej sekcji przedstawiono szczegółowe informacje dotyczące dialektu języka SQL używanego przez narzędzie Raport BIM.
Uwaga: Najbardziej aktualne informacje dotyczące wszystkich klauzul i funkcji można zawsze znaleźć w interfejsie użytkownika, klikając przycisk Pomoc w edytorze Panelu zadań raportu.
Klauzule
SELECT: Określa kolumny danych do zwrócenia. Można użyć*, aby wybrać domyślny identyfikator wszystkich obiektów.FROM: Określa źródło danych. W pojedynczym zapytaniu zawsze jest todocument. W potokudocumentjest symbolem zastępczym dla danych z poprzedniego kroku. Można też użyć funkcjiCHILDREN().WHERE: Filtruje obiekty na podstawie warunków.GROUP BY: Grupuje wiersze o tych samych wartościach w wiersze podsumowujące, zwykle używane z funkcjami agregującymi.ORDER BY: Sortuje końcowe wyniki. Może być użyte wraz zASC(rosnąco, domyślnie) lubDESC(malejąco). Obsługuje sortowanie według wielu kolumn.AS: Tworzy alias (własną nazwę) dla kolumny w klauzuliSELECT, np.SELECT Area AS "My Area".
Notatki użycia GROUP BY oraz ORDER BY
Dialekt posiada określone zasady dotyczące używania wyrażeń (np. funkcji lub działań arytmetycznych) w klauzulach GROUP BY i ORDER BY.
- Dla
GROUP BY: Przy grupowaniu według wyrażenia należy powtórzyć całe wyrażenie w klauzuliGROUP BY. Nie jest obsługiwane użycie aliasu z listySELECT.- ✅ Poprawnie:
SELECT TYPE(*) … GROUP BY TYPE(*)
- ❌ Niepoprawnie:
SELECT TYPE(*) AS BimType … GROUP BY BimType
- ✅ Poprawnie:
- Dla
ORDER BY: Natomiast sortowanie według surowego wyrażenia nie jest obsługiwane. Aby posortować według wyniku wyrażenia, najpierw należy uwzględnić je w liścieSELECTz aliasemAS, a następnie odwołać się do tego aliasu w klauzuliORDER BY.- ✅ Poprawnie:
SELECT Label, LOWER(Label) AS sort_key … ORDER BY sort_key
- ❌ Niepoprawnie:
SELECT Label … ORDER BY LOWER(Label)
- ✅ Poprawnie:
Funkcje
Dialekt zawiera bibliotekę wbudowanych funkcji do manipulacji danymi i analizy.
| Kategoria | Funkcja | Opis |
|---|---|---|
| Agreguj | COUNT(właściwość|*)
|
Zlicza wystąpienia obiektu. COUNT(*) zlicza wszystkie rzędy; COUNT(właściwość) zlicza rzędy, w których określona właściwość nie jest NULL.
|
SUM(właściwość)
|
Oblicza sumę właściwości numerycznej. | |
MIN(właściwość)
|
Znajduje minimalną wartość właściwości numerycznej. | |
MAX(właściwość)
|
FZnajduje maksymalną wartość właściwości numerycznej. | |
| Hierarchiczne | PARENT(*)
|
Zwraca architektonicznie istotny element nadrzędny obiektu (np. ścianę, w której znajduje się okno), pomijając w sposób przejrzysty grupy ogólne. |
CHILDREN(zapytanie podrzędne)
|
Funkcja używana w klauzuli FROM. Zwraca wszystkie dzieci obiektów znalezionych przez podzapytanie, uwzględniając zarówno relacje zawierania (.Group), jak i hostingu (.Hosts). Funkcja jest nierekurencyjna. Aby znaleźć wnuki lub dalszych potomków, należy połączyć kilka kroków CHILDREN() w potoku.
| |
CHILDREN_RECURSIVE(zapytanie podrzędne, max_depth=15)
|
Funkcja używana w klauzuli FROM. Zwraca wszystkie potomne obiekty wyników subquery, rekurencyjnie przeszukując hierarchię. Pomija grupy ogólne. Opcjonalnie można określić max_depth (domyślnie 15, 0 dla nieograniczonej głębokości). Zastępuje potrzebę tworzenia złożonych potoków do znajdowania zagnieżdżonych obiektów.
| |
| Utility | TYPE(*)
|
Zwraca typ obiektu widoczny dla użytkownika, określony przez jego proxy (np. Wall, Space, Part::Box).
|
CONVERT(wielkość, 'jednostka')
|
Konwertuje obiekt Quantity FreeCAD na nową jednostkę i zwraca ją jako surową liczbę. Przykład:
| |
| String | LOWER(właściwość)
|
Konwertuje właściwość tekstową na małe litery. |
UPPER(właściwość)
|
Konwertuje właściwość tekstową na wielkie litery. | |
CONCAT(val1, val2, …)
|
Łączy wiele wartości tekstowych i właściwości w jeden ciąg znaków. |
Dostęp do właściwości
Możesz uzyskać dostęp do dowolnej właściwości obiektu, w tym do zagnieżdżonych struktur danych.
- Dostęp bezpośredni: Uzyskanie dostępu do prostej właściwości bezpośrednio po jej nazwie.
- Przykład:
Label,IfcType
- Przykład:
- Dostęp zagnieżdżony: Użycie notacji kropkowej do dostępu do podwłaściwości.
- Przykład:
Shape.Volume,Placement.Base.z
- Przykład:
- Dostęp łańcuchowy: Łączenie dostępu do właściwości z wynikiem funkcji, najczęściej
PARENT().- Przykład:
PARENT(*).Label,PARENT(*).PARENT(*).Height
- Przykład:
Operatory
| Typ | Operatory | Opis |
|---|---|---|
| Porównanie | =, !=, >, <, >=, <=
|
Standardowe operatory porównania. |
LIKE
|
Dopasowywanie wzorców bez rozróżniania wielkości liter. Użyj % dla wielu znaków i _ dla pojedynczego znaku.
| |
IS NULL, IS NOT NULL
|
Sprawdza, czy właściwość ma wartość. | |
IN (value1, value2, …)
|
Sprawdza, czy wartość właściwości znajduje się na podanej liście literałów. | |
| Logiczne | AND, OR
|
Używane w klauzuli WHERE do łączenia wielu warunków.
|
| Arytmetyczne | +, -, *, /
|
Wykonuj obliczenia dotyczące właściwości numerycznych. Przestrzegaj standardowej kolejności operatorów; użyj (), aby ją zmienić.
|
Ogólna składnia
- Literały i cudzysłowy: Do oznaczania literałów tekstowych (stringów) można używać zarówno pojedynczych (
'), jak i podwójnych (") cudzysłowów. Na przykład,WHERE Label = 'Wall'iWHERE Label = "Wall"są równoważne. - Komentarze: Parser ignoruje zarówno komentarze jednolinijkowe, które zaczynają się od
--, jak i komentarze wielolinijkowe, otoczone/* … */. - Internacjonalizacja: Parser poprawnie obsługuje znaki nie-ASCII (Unicode) w nazwach właściwości (np. Fläche).
Przykładowe zapytania
W tej sekcji znajduje się zbiór praktycznych zapytań, które można wykorzystać bezpośrednio lub zmodyfikować do własnych raportów.
Podstawowe zaznaczanie
Zaznacz wszystkie elementy konstrukcyjne (kolumny i belki):
SELECT Label, IfcType
FROM document
WHERE IfcType IN ('Column', 'Beam')
ORDER BY IfcType, Label
Wybierz wszystkie ściany z "Exterior" w nazwie:
SELECT Label, Length, Height
FROM document
WHERE IfcType = 'Wall' AND Label LIKE '%Exterior%'
Agregacja danych i podsumowania
Zlicz wszystkie obiekty BIM, pogrupowane po typie:
SELECT IfcType, COUNT(*)
FROM document
WHERE IfcType IS NOT NULL
GROUP BY IfcType
ORDER BY IfcType ASC
Uzyskaj pełny zestawienie ilościowe dla wszystkich ścian:
To zapytanie oblicza całkowitą liczbę ścian, ich łączną długość oraz minimalną i maksymalną wysokość ścian.
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'
Zapytania hierarchiczne
Wypisz wszystkie obiekty zlokalizowane bezpośrednia na "Parterze":
Wykorzystuje funkcję CHILDREN() do sprawdzania zawartości określonego obiektu kontenera.
SELECT Label, IfcType
FROM CHILDREN(SELECT * FROM document WHERE Label = 'Ground Floor')
ORDER BY IfcType
Wymień wszystkie drzwi i ściany, w których się znajdują:
Wykorzystuje to funkcję PARENT() do znalezienia hosta każdego portu.
SELECT
Label AS "Door_Name",
PARENT(*).Label AS "Host_Wall_Name"
FROM document
WHERE IfcType = 'Door'
ORDER BY "Host_Wall_Name"
Znajdź wszystkie okna na "Parterze" (sprawdzając element nadrzędny):
To zapytanie wyszukuje okna, sprawdza ich element nadrzędny (ścianę), a następnie sprawdza element nadrzędny tej ściany (podłogę).
SELECT Label
FROM document
WHERE IfcType = 'Window' AND PARENT(*).PARENT(*).Label = 'Ground Floor'
Zaawansowane zapytania
Wygeneruj kompletny obmiar pomieszczeń i obszarów:
To zapytanie generuje sformatowaną listę wszystkich pomieszczeń, pogrupowanych według pięter, do których należą, wraz z ich powierzchnią przeliczoną na metry kwadratowe.
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"
Uwagi dotyczące użycia
Jednostki
Po wybraniu właściwości, która ma jednostki (`Ilość`), takie jak `Długość` lub `Powierzchnia`, silnik BIM Report zwraca surową wartość liczbową tej właściwości, tak jak jest ona przechowywana wewnętrznie w dokumencie FreeCAD. Wewnętrzne jednostki FreeCAD są zawsze oparte na milimetrach (mm).
Oznacza to, że domyślnym wynikiem będzie mm dla długości, mm² dla powierzchni i mm³ dla objętości, niezależnie od aktualnego schematu jednostek lub preferencji użytkownika. Automatycznie wygenerowany nagłówek kolumny będzie prawidłowo odzwierciedlał tę wewnętrzną jednostkę.
Przykład: domyślne zachowanie
Jeśli uruchomisz to proste zapytanie na obszarze o wymiarach 1 metr na 1 metr:
SELECT Label, Area FROM document WHERE IfcType = 'Space'
Wynikowy arkusz kalkulacyjny będzie zawierał:
- Nagłówek:
Powierzchnia (mm²) - Wartość:
1000000,0
<span id="Using_CONVERT()">
Użycie CONVERT()
Aby uzyskać wyniki w żądanych jednostkach, można użyć funkcji CONVERT(), która zapewnia wyraźną kontrolę nad wynikami. Aby uzyskać powierzchnię w metrach kwadratowych, zmodyfikuj zapytanie w następujący sposób:
SELECT Label, CONVERT(Area, 'm^2') AS "Area (m²)" FROM document WHERE IfcType = 'Space'
To zapytanie generuje teraz wynik w żądanej jednostce:
- Nagłówek:
Powierzchnia (m²) - Wartość:
1,0
Użycie funkcji CONVERT() gwarantuje, że wynik raportu będzie jednoznaczny, a wszelkie obliczenia wykonywane w zapytaniu (np. SUM(CONVERT(Area, 'm^2'))) będą poprawne matematycznie.
Właściwości
Obiekt Arch Report udostępnia użytkownikowi następujące właściwości.
Dane
Raport
- DANEAutoUpdate: Ta właściwość, domyślnie ustawiona na True, kontroluje, czy raport automatycznie uruchamia się za każdym razem, gdy dokument jest przeliczany. Po włączeniu arkusz raportu zawsze pozostaje zsynchronizowany z modelem. Na przykład, jeśli zmieni się długość ściany, wartość
SUM(Length)w raporcie zostanie automatycznie zaktualizowana po przeliczeniu. W bardzo dużych modelach może być wskazane wyłączenie tej opcji dla poprawy wydajności przy wprowadzaniu wielu zmian. Gdy właściwość AutoUpdate jest ustawiona na Fałsz, raport można zaktualizować ręcznie w dowolnym momencie, klikając prawym przyciskiem myszy obiekt Report w Widoku drzewa i wybierając Recompute lub naciskając globalny przycisk Przelicz ponownie. - DANETarget: Przechowuje odnośnik do obiektu Arkusza kalkulacyjnego, w którym zapisywane będą wyniki raportu. Podczas tworzenia nowego raportu automatycznie tworzony jest nowy arkusz kalkulacyjny i powiązany tutaj. W razie potrzeby można zmienić tę właściwość, aby kierować wyniki do innego istniejącego arkusza w bieżącym dokumencie.
Tworzenie skryptów
Silnik BIM Report jest w pełni dostępny poprzez Python, co pozwala na zintegrowanie jego zaawansowanych funkcji wyszukiwania z własnymi skryptami i automatyzacją.
Arch.selectObjects(query_string)
Jest to podstawowa funkcja służąca do wykonywania pojedynczego, prostego zapytania SQL. Przyjmuje ona ciąg zapytania jako dane wejściowe i zwraca listę obiektów FreeCAD DocumentObjects, które pasują do zapytania. Jeśli zapytanie jest nieprawidłowe lub nie znajdzie żadnych obiektów, zwraca pustą listę i wyświetla komunikat o błędzie w konsoli.
Przykład: Pobierz wszystkie obiekty ścian, których nazwa zawiera słowo "Exterior"
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)
W przypadku bardziej złożonych, wieloetapowych wyborów można użyć tej funkcji do wykonania potoku. Pobiera ona listę obiektów ArchSql.ReportStatement i zwraca ostateczną listę obiektów FreeCAD DocumentObjects, które są wynikiem pełnego potoku.
Jest to programowy odpowiednik zaznaczenia pola wyboru "Użyj jako krok potoku" w interfejsie użytkownika.
Przykład: Znajdź wszystkie drzwi na "parterze"
Jest to klasyczny problem hierarchiczny, który wymaga wielu kroków. Celem jest znalezienie "obiektów podrzędnych" (drzwi) "obiektu nadrzędnego" (podłogi). Ponieważ funkcja CHILDREN() nie jest rekurencyjna, musimy połączyć wiele kroków w łańcuch.
- Najpierw znajdujemy obiekt
'Parter'. - Następnie znajdujemy jego bezpośrednie elementy podrzędne (ściany, przestrzenie itp.).
- Potem znajdujemy elementy podrzędne tych obiektów (w tym drzwi i okna umieszczone w ścianach).
- Na koniec filtrujemy tę ostatnią grupę, aby zachować tylko drzwi.
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")
Sprawdzanie i udostępnianie raportu za pomocą Konsoli Pythona
W celu debugowania, tworzenia skryptów lub udostępniania swojej pracy innym osobom można uzyskać kompletne, czytelne dla człowieka podsumowanie konfiguracji raportu bezpośrednio z Konsoli Pythona.
Logika niestandardowa i szczegółowa zawartość raportu BIM są przechowywane w jego obiekcie proxy. Dostęp do atrybutu .Proxy zapewnia pełny wydruk wszystkich instrukcji i zapytań SQL. Jest to wygodny sposób na skopiowanie całej definicji raportu do schowka w celu udostępnienia jej na forum lub w zgłoszeniu błędu.
Jak z niego korzystać:
- Wybierz obiekt Report w Widoku drzewa.
- Naciśnij Ctrl+Shift+P. Spowoduje to wysłanie wybranego obiektu do Konsoli Pythona jako zmienna
obj. - W konsoli wpisz następujące polecenie i naciśnij Enter:
print(obj.Proxy)
Przykładowy wynik:
>>> 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: Sketch, Line, Polyline, Circle, Arc, Arc From 3 Points, Fillet, Ellipse, Polygon, Rectangle, B-Spline, Bézier Curve, Cubic Bézier Curve, Point
- 3D/BIM: Project, Site, Building, Level, Space, Wall, Curtain Wall, Column, Beam, Slab, Door, Window, 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: Text, Shape From Text, Aligned Dimension, Horizontal Dimension, Vertical Dimension, Leader, Label, Hatch, Axis, Axis System, Grid, Section Plane, New Page, New View
- Create 2D Views: 2D Drawing, Section View, Section Cut
- 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, Copy, Rotate, Clone, Create Simple Copy, Create Compound, Offset, 2D Offset, Trimex, Join, Split, Scale, Stretch, Draft to Sketch, Upgrade, Downgrade, Add Component, Remove Component, Array, Path Array, Polar Array, Point Array, Cut With Plane, Mirror, Extrude, Difference, Union, Intersection
- Manage: BIM Setup, Views Manager, Setup Project, Manage Doors and Windows, Manage IFC Elements, Manage IFC Quantities, Manage IFC Properties, Manage Classification, Manage Layers, Material, Schedule, Preflight Checks, Annotation Styles
- Utils: Toggle Bottom Panels, 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, Survey, IFC Diff, IFC Explorer, New IFC Spreadsheet, Image Plane, Unclone, Rewire, Glue, Re-Extrude
- Panel Tools: Panel, Panel Cut, Panel Sheet, Nest
- Structure Tools: Structure, Structural System, Multiple Structures
- IFC Tools: IFC Diff, IFC Expand, Create 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
- Jak zacząć
- Instalacja: Pobieranie programu, Windows, Linux, Mac, Dodatkowych komponentów, Docker, AppImage, Ubuntu Snap
- Podstawy: Informacje na temat FreeCAD, Interfejs użytkownika, Profil nawigacji myszką, Metody wyboru, Nazwa obiektu, Edytor ustawień, Środowiska pracy, Struktura dokumentu, Właściwości, Pomóż w rozwoju FreeCAD, Dotacje
- Pomoc: Poradniki, Wideo poradniki
- Środowiska pracy: Strona Startowa, Złożenie, BIM, CAM, Rysunek Roboczy, MES, Inspekcja, Siatka, OpenSCAD, Część, Projekt Części, Punkty, Inżynieria Wsteczna, Robot, Szkicownik, Arkusz Kalkulacyjny, Powierzchnia 3D, Rysunek Techniczny, Test Framework