Filter elements using ifcopenshell selector syntax and return matching element summaries. Examples: - ``IfcWall`` — all walls - ``IfcWall, IfcColumn`` — walls and columns - ``! IfcWall`` — everything except walls - ``IfcWall, Name = "My Wall"`` — walls with a specific name attri
(model: ifcopenshell.file, query: str)
| 26 | |
| 27 | |
| 28 | def select(model: ifcopenshell.file, query: str) -> list[dict[str, Any]]: |
| 29 | """Filter elements using ifcopenshell selector syntax and return matching element summaries. |
| 30 | |
| 31 | Examples: |
| 32 | - ``IfcWall`` — all walls |
| 33 | - ``IfcWall, IfcColumn`` — walls and columns |
| 34 | - ``! IfcWall`` — everything except walls |
| 35 | - ``IfcWall, Name = "My Wall"`` — walls with a specific name attribute |
| 36 | - ``type = "Concrete Wall"`` — elements assigned that type product |
| 37 | - ``material = "Concrete"`` — elements with that material |
| 38 | """ |
| 39 | elements = ifcopenshell.util.selector.filter_elements(model, query) |
| 40 | results = [] |
| 41 | for element in sorted(elements, key=lambda e: e.id()): |
| 42 | entry: dict[str, Any] = { |
| 43 | "id": element.id(), |
| 44 | "type": element.is_a(), |
| 45 | "repr": str(element), |
| 46 | } |
| 47 | if hasattr(element, "Name"): |
| 48 | entry["name"] = element.Name |
| 49 | results.append(entry) |
| 50 | return results |