# IfcOpenShell - IFC toolkit and geometry engine # Copyright (C) 2021 Thomas Krijnen # # This file is part of IfcOpenShell. # # IfcOpenShell is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # IfcOpenShell is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . from typing import Any, Literal, Union from typing_extensions import Self import ifcopenshell # `std::vector` usually translated to `tuple[xxx, ...]`. ON_SLABS_AND_WALLS: Any ON_SLABS_AT_FLOORPLANS: Any ALWAYS: Any ATPATH: Any ATSTART: Any ATEND: Any NOTDEFINED: Any MATRIX4: Any POINT3: Any DIRECTION3: Any LINE: Any CIRCLE: Any ELLIPSE: Any BSPLINE_CURVE: Any OFFSET_CURVE: Any PLANE: Any CYLINDER: Any SPHERE: Any TORUS: Any BSPLINE_SURFACE: Any EDGE: Any LOOP: Any FACE: Any SHELL: Any SOLID: Any LOFT: Any EXTRUSION: Any REVOLVE: Any SWEEP_ALONG_CURVE: Any NODE: Any COLLECTION: Any BOOLEAN_RESULT: Any FUNCTION_ITEM: Any FUNCTOR_ITEM: Any PIECEWISE_FUNCTION: Any GRADIENT_FUNCTION: Any CANT_FUNCTION: Any OFFSET_FUNCTION: Any COLOUR: Any STYLE: Any CARTESIAN_DOUBLE: Any CARTESIAN_QUOTIENT: Any FILTERED_CARTESIAN_QUOTIENT: Any EXACT_PREDICATES: Any EXACT_CONSTRUCTIONS: Any FT_AUTODETECT: Any FT_IFCSPF: Any FT_IFCXML: Any FT_IFCZIP: Any FT_ROCKSDB: Any FT_UNKNOWN: Any CURVES: Any SURFACES_AND_SOLIDS: Any CURVES_SURFACES_AND_SOLIDS: Any TRIANGULATED: Any NATIVE: Any SERIALIZED: Any MAXSTEPSIZE: Any MINSTEPS: Any TRIANGLE_MESH: Any POLYHEDRON_WITHOUT_HOLES: Any POLYHEDRON_WITH_HOLES: Any SHARED_PTR_DISOWN: Any cvar: Any class IfcSpfHeader: """ IFC Header definition: https://standards.buildingsmart.org/documents/Implementation/ImplementationGuide_IFCHeaderData_Version_1.0.2.pdf """ def file(self, *args): ... def file_description_py(self): ... def file_name_py(self): ... def file_schema_py(self): ... def read(self): ... def tryRead(self): ... def write(self, out): ... class BRep(Representation): def as_compound(self, force_meters): ... def begin(self): ... def calculate_projected_surface_area(self, ax, along_x, along_y, along_z): ... def calculate_surface_area(self, arg2): ... def calculate_volume(self, arg2): ... def end(self): ... def item(self, i): ... def item_id(self, i): ... def shapes(self): ... def size(self): ... class BRepElement(Element): def calculate_projected_surface_area(self, along_x, along_y, along_z): ... @property def geometry(self) -> BRep: ... def geometry_pointer(self): ... @property def surface_area(self): ... @property def volume(self): ... class ColladaSerializer(WriteOnlyGeometrySerializer): def finalize(self): ... def isTesselated(self): ... def object_id(self, o): ... def ready(self): ... def setFile(self, arg2): ... def setUnitNameAndMagnitude(self, name, magnitude): ... def write(self, *args): ... def writeHeader(self): ... class ConversionResult: def ItemId(self): ... def Placement(self): ... def Shape(self): ... def Style(self): ... def StylePtr(self): ... def append(self, trsf): ... def apply_transform(self, unit_scale): ... def hasStyle(self): ... def prepend(self, trsf): ... def setStyle(self, newStyle): ... class ConversionResultShape: def Serialize(self, place, arg3): ... def Triangulate(self, *args): ... def add(self, arg2): ... def area(self): ... def axis(self): ... def bounding_box(self, *args): ... def box(self): ... def concat(self, arg2): ... def convex_decomposition(self): ... def convex_tag(self, b): ... def edges(self): ... def facets(self): ... def halfspaces(self): ... def intersect(self, arg2): ... def is_manifold(self): ... def length(self): ... def map(self, *args): ... def moved(self, arg2): ... def num_edges(self): ... def num_faces(self): ... def num_vertices(self): ... def plane_equation(self): ... def position(self): ... def serialize(self): ... def serialize_obj(self): ... def set_box(self, b): ... def solid(self): ... def solid_mt(self): ... def subtract(self, arg2): ... def surface_area_along_direction(self, tol, arg3, along_x, along_y, along_z): ... def surface_genus(self): ... def vertices(self): ... def volume(self): ... def wrap_in_compound(self): ... class DoubleArray3: def back(self): ... def begin(self): ... def empty(self): ... def end(self): ... def fill(self, u): ... def front(self): ... def iterator(self): ... def rbegin(self): ... def rend(self): ... def size(self): ... def swap(self, v): ... class Element: # TODO: Remove from the wrapper? def SetParents(self, newparents): ... # TODO: could it be None? @property def context(self) -> str: """Element's geometry context. E.g 'Body': """ ... @property def guid(self) -> str: """Mirroring IfcRoot.GlobalId.""" ... @property def id(self) -> int: """Element's STEP ID.""" ... # TODO: could it be None? @property def name(self) -> str: """Mirroring IfcRoot.Name.""" ... @property def parent_id(self) -> int: """Parent object STEP id. E.g. IfcBuildingStorey that element's in. """ ... # TODO: Returns SwigPyObject. Should we just remove it from the wrapper? def parents(self): ... @property def product(self) -> entity_instance: ... @property def transformation(self) -> Transformation: ... @property def transformation_buffer(self) -> bytes: ... @property def type(self) -> str: """Element's IFC Class. E.g. 'IfcWall'. """ ... @property def unique_id(self) -> str: """Interal unique id for the element. E.g. 'product-186f8dc2-070c-46e1-a65b-a435a043ba3e-body'. """ ... class GeometrySerializer: READ_BREP: Any READ_TRIANGULATION: Any def geometry_settings(self, *args): ... def isTesselated(self): ... def object_id(self, o): ... def read(self, *args): ... def setUnitNameAndMagnitude(self, name, magnitude): ... def settings(self, *args): ... def write(self, *args): ... class GltfSerializer(WriteOnlyGeometrySerializer): def finalize(self): ... def isTesselated(self): ... def ready(self): ... def setFile(self, arg2): ... def setUnitNameAndMagnitude(self, arg2, arg3): ... def write(self, *args): ... def writeHeader(self): ... class HdfSerializer(GeometrySerializer): def finalize(self): ... def isTesselated(self): ... def read(self, *args): ... def ready(self): ... def remove(self, guid: str) -> None: ... def setFile(self, arg2): ... def setUnitNameAndMagnitude(self, arg2, arg3): ... def write(self, *args): ... def writeHeader(self): ... class IfcBaseEntity(entity_instance): def declaration(self): ... def get(self, name): ... def get_inverse(self, name): ... def populate_derived(self): ... def set_id(self, i): ... class IfcBaseType(entity_instance): def declaration(self): ... class IfcEntityInstanceData: ... class IfcLateBoundEntity(IfcBaseEntity): def declaration(self): ... class InstanceStreamer: def bypassTypes(self, type_names): ... def bypassed_instances(self): ... coerce_attribute_count: bool def hasSemicolon(self): ... def inverses(self, *args): ... def pushPage(self, page): ... def readInstancePy(self, type_as_declaration_instance): ... def references(self, *args): ... def semicolonCount(self): ... def status(self): ... class Iterator: initialization_outcome_: Any processed_: Any def bounds_max(self): ... def bounds_min(self): ... def compute_bounds(self, with_geometry): ... def create(self): ... def file(self): ... def filters(self, *args): ... def get(self) -> Element: """Get last processed element.""" ... def getLog(self): ... def get_native(self): ... def get_object(self, id): ... def get_task_items(self): ... def get_task_products(self): ... def had_error_processing_elements(self): ... def initialize(self) -> bool: """Return true if the iterator is initialized with any elements, false otherwise.""" ... def next(self) -> Union[entity_instance, None]: """Process next shape representation. :return: Processed ``entity_instance`` or ``None`` if nothing is left to process. """ ... def process_concurrently(self): ... def process_finished_rep(self, rep): ... def progress(self) -> int: """Return current progress (0-100). Updated after processing each representation. """ ... def set_cache(self, cache: Union[GeometrySerializer, None]) -> None: ... def unit_magnitude(self): ... def unit_name(self): ... class JsonSerializer: JSON_DIALECT_CREOOX: Any def finalize(self): ... def ready(self): ... def setFile(self, arg2): ... def writeHeader(self): ... class OpaqueCoordinate_3: def get(self, i): ... def set(self, i, n): ... class OpaqueCoordinate_4: def get(self, i): ... def set(self, i, n): ... class OpaqueNumber: def clone(self): ... def to_double(self): ... def to_string(self): ... class Representation: def entity(self): ... @property def id(self) -> str: """ Example: `2432-openings-2468`, where - 2432 - mapped representation id - 2468 - IfcRelVoidsElement """ def settings(self): ... class RocksDBPrefixIterator: def key(self): ... def next(self): ... def valid(self): ... def value(self): ... class RocksDbSerializer: def finalize(self): ... def ready(self): ... def setFile(self, arg2): ... def writeHeader(self): ... class Serialization(Representation): @property def brep_data(self): ... @property def surface_style_ids(self): ... @property def surface_styles(self): ... class SerializedElement(Element): @property def geometry(self) -> Serialization: ... class SerializerSettings: def get_(self, name): ... def get_type(self, name): ... def set_(self, *args): ... def setting_names(self): ... class Settings: def get_(self, name): ... def get_type(self, name): ... def set_(self, *args): ... def setting_names(self): ... class SvgSerializer(WriteOnlyGeometrySerializer): SH_NONE: Any SH_FULL: Any SH_LEFT: Any def addDrawing(self, pos, dir, ref, name, include_projection): ... def addSizeComponent(self, fi): ... def addTextAnnotations(self, k): ... def addXCoordinate(self, fi): ... def addYCoordinate(self, fi): ... def doWriteHeader(self): ... def finalize(self): ... def getMirrorX(self): ... def getMirrorY(self): ... def getOnlyValid(self, b): ... def getProfileThreshold(self): ... def getSegmentProjection(self): ... def getSubtractionSettings(self): ... def getUnifyInputs(self): ... def getUsePrefiltering(self): ... def growBoundingBox(self, x, y): ... def idElement(self, elem): ... def isTesselated(self): ... def nameElement(self, *args): ... def object_id(self, storey, o): ... def ready(self): ... def resetScale(self): ... def resize(self): ... def setAlwaysProject(self, b): ... def setAutoElevation(self, b): ... def setAutoSection(self, b): ... def setBoundingRectangle(self, width, height): ... def setDrawDoorArcs(self, b): ... def setDrawStoreyHeights(self, sh): ... def setDrawingCenter(self, x, y): ... def setElevationRef(self, s): ... def setElevationRefGuid(self, s): ... def setFile(self, f): ... def setMirrorX(self, b): ... def setMirrorY(self, b): ... def setNoCSS(self, b): ... def setOnlyValid(self, b): ... def setPolygonal(self, b): ... def setPrintSpaceAreas(self, b): ... def setPrintSpaceNames(self, b): ... def setProfileThreshold(self, i): ... def setScale(self, s): ... def setSectionHeight(self, h, storey): ... def setSectionHeightsFromStoreys(self, offset): ... def setSectionRef(self, s): ... def setSegmentProjection(self, b): ... def setSpaceNameTransform(self, v): ... def setStoreyHeightLineLength(self, d): ... def setSubtractionSettings(self, sbp): ... def setUnifyInputs(self, b): ... def setUnitNameAndMagnitude(self, arg2, arg3): ... def setUseHlrPoly(self, b): ... def setUseNamespace(self, b): ... def setUsePrefiltering(self, b): ... def setWithoutStoreys(self, b): ... def start_path(self, *args): ... def write(self, *args): ... def writeHeader(self): ... class SwigPyIterator: def advance(self, n): ... def copy(self): ... def decr(self, n): ... def distance(self, x): ... def equal(self, x): ... def incr(self, n): ... def next(self): ... def previous(self): ... def value(self): ... class Transformation: def data(self): ... @property def matrix(self): ... class Triangulation(Representation): def addEdge(self, item_id, style, i0, i1): ... def addFace(self, *args): ... def addNormal(self, X, Y, Z): ... def addVertex(self, item_index, material_index, X, Y, Z): ... @staticmethod def box_project_uvs(vertices, normals): ... @property def colors_buffer(self): ... @property def edges(self) -> tuple[int, ...]: ... @property def edges_buffer(self) -> bytes: ... @property def edges_item_ids(self) -> tuple[int, ...]: ... @property def edges_item_ids_buffer(self) -> bytes: ... @staticmethod def empty(settings): ... @property def faces(self) -> tuple[int, ...]: ... @property def faces_buffer(self) -> bytes: ... @property def faces_tri(self) -> tuple[int, ...]: ... @property def item_ids(self) -> tuple[int, ...]: ... @property def item_ids_buffer(self) -> bytes: ... @property def material_ids(self) -> tuple[int, ...]: ... @property def material_ids_buffer(self) -> bytes: ... @property def materials(self) -> tuple[style, ...]: ... @property def normals(self): ... @property def normals_buffer(self) -> bytes: ... @property def polyhedral_faces_with_holes(self): ... @property def polyhedral_faces_without_holes(self): ... def registerEdge(self, item_id, i0, i1): ... def registerEdgeCount(self, n1, n2, edgecount): ... def resetWelds(self): ... @property def uvs(self): ... def uvs_ref(self): ... @property def verts(self) -> tuple[float, ...]: ... @property def verts_buffer(self) -> bytes: ... class TriangulationElement(Element): @property def geometry(self) -> Triangulation: ... def geometry_pointer(self): ... class TtlWktSerializer(WriteOnlyGeometrySerializer): def finalize(self): ... def isTesselated(self): ... def ready(self): ... def setFile(self, arg2): ... def setUnitNameAndMagnitude(self, arg2, arg3): ... def ttl_object_id(self, o, postfix): ... def write(self, *args): ... def writeHeader(self): ... class WaveFrontOBJSerializer(WriteOnlyGeometrySerializer): def finalize(self): ... def isTesselated(self): ... def ready(self): ... def setFile(self, arg2): ... def setUnitNameAndMagnitude(self, arg2, arg3): ... def write(self, *args): ... def writeHeader(self): ... def writeMaterial(self, style): ... class WriteOnlyGeometrySerializer(GeometrySerializer): def read(self, *args): ... class XmlSerializer: def finalize(self): ... def ready(self): ... def setFile(self, arg2): ... def writeHeader(self): ... class _SwigNonDynamicMeta(type): ... class abstract_arrangement: def get_face_pairs(self): ... def merge(self, edge_indices): ... def num_edges(self): ... def num_faces(self): ... def write(self, polygons, progress): ... class aggregation_type(parameter_type): array_type: Any bag_type: Any list_type: Any set_type: Any def as_aggregation_type(self) -> aggregation_type: ... def bound1(self): ... def bound2(self): ... def type_of_aggregation(self): ... def type_of_aggregation_string(self): ... def type_of_element(self) -> parameter_type: ... class attribute: def name(self) -> str: ... def optional(self) -> bool: ... def type_of_attribute(self) -> parameter_type: ... class attribute_value_derived: ... class boolean_result: INTERSECTION: Any SUBTRACTION: Any UNION: Any operation: Any def calc_hash(self): ... @property def children(self): ... def clone_(self): ... def kind(self): ... @staticmethod def operation_str(op): ... class bspline_curve(curve): control_points: Any degree: Any knots: Any multiplicities: Any weights: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... class bspline_surface(surface): control_points: Any degree: Any knots: Any multiplicities: Any weights: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... class buffer: def filename(self): ... def get_value(self): ... def is_ready(self): ... class cant_function(function_item): def calc_hash(self): ... def clone_(self): ... def end(self): ... def get_cant(self): ... def get_gradient(self): ... def kind(self): ... def start(self): ... class circle(curve): radius: Any def calc_hash(self): ... def clone_(self): ... @staticmethod def from_3_points(p1, p2, p3): ... def kind(self): ... @property def matrix(self): ... class clash: a: Any b: Any clash_type: Any distance: Any p1: Any p2: Any class clashes: def append(self, x): ... def assign(self, n, x): ... def back(self): ... def begin(self): ... def capacity(self): ... def clear(self): ... def empty(self): ... def end(self): ... def erase(self, *args): ... def front(self): ... def get_allocator(self): ... def insert(self, *args): ... def iterator(self): ... def pop(self): ... def pop_back(self): ... def push_back(self, x): ... def rbegin(self): ... def rend(self): ... def reserve(self, n): ... def resize(self, *args): ... def size(self): ... def swap(self, v): ... class collection: def calc_hash(self): ... @property def children(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class colour(item): def r(self) -> float: ... def g(self) -> float: ... def b(self) -> float: ... def calc_hash(self) -> int: ... def clone_(self) -> Self: ... @property def components(self) -> tuple[float, float, float]: """RGB tuple.""" ... def kind(self) -> int: ... class context: def add(self, segments): ... def build(self): ... def get_face_pairs(self): ... def merge(self, edge_indices): ... def num_edges(self): ... def num_faces(self): ... def write(self, arg2): ... class curve(geom_item): def print_impl(self, o, classname, indent): ... class cylinder(surface): radius: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class declaration: def _is(self, *args: Union[str, declaration]) -> bool: ... def as_entity(self) -> Union[entity, None]: ... def as_enumeration_type(self) -> Union[enumeration_type, None]: ... def as_select_type(self) -> Union[select_type, None]: ... def as_type_declaration(self) -> Union[type_declaration, None]: ... def index_in_schema(self) -> int: ... def name(self) -> str: ... def name_uc(self) -> str: """Get name in upper case.""" ... def schema(self) -> schema_definition: ... def type(self): ... class direction3: def calc_hash(self): ... def clone_(self): ... @property def components(self): ... def kind(self): ... class drawing_meta: matrix_3: Any pln_3d: Any class edge(trimmed_curve): def calc_hash(self): ... def clone_(self): ... def kind(self): ... class ellipse(curve): radius: Any radius2: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class entity(declaration): def all_attributes(self) -> tuple[attribute, ...]: ... def all_inverse_attributes(self) -> tuple[inverse_attribute, ...]: ... def argument_types(self) -> tuple[str, ...]: """Get a tuple of types for each attribute in ``all_attributes()``.""" ... def as_entity(self) -> entity: ... def attribute_by_index(self, index: int) -> attribute: ... def attribute_count(self) -> int: ... def attribute_index(self, *args: Union[str, attribute]) -> int: """ :param args: A single attribute name / attribute. """ ... def attributes(self) -> tuple[attribute, ...]: ... def derived(self) -> tuple[bool, ...]: """Return a tuple of booleans indicating whether each direct attribute is derived.""" ... def is_abstract(self) -> bool: ... def set_attributes(self, attributes, derived): ... def set_inverse_attributes(self, inverse_attributes): ... def set_subtypes(self, subtypes): ... def subtypes(self) -> tuple[entity, ...]: ... def supertype(self) -> Union[entity, None]: ... class entity_instance: file: ifcopenshell.file """Reference to IFC file to prevent it's garbage collection, if entity is still used.""" file_: Any id_: Any def data(self, *args): ... def declaration(self) -> declaration: ... def file_pointer(self): """Internal IfcFile pointer address. Same as ``file.file_pointer``). """ ... def get_argument(self, *args): ... def get_argument_index(self, a): ... def get_argument_name(self, i): ... def get_argument_type(self, i): ... def get_attribute_category(self, name: str) -> Literal[0, 1, 2]: """Get attribute category id. Available categories: - `0` - invalid attribute - `1` - forward attribute - `2` - inverse attributes """ ... def get_attribute_names(self): ... def get_attribute_value(self, index): ... def get_inverse(self, a): ... def get_inverse_attribute_names(self): ... def id(self) -> int: ... def identity(self) -> int: """Entity instance identity, unique across all opened IFC files during current session.""" ... def is_a(self, *args): ... def setArgumentAsAggregateOfAggregateOfDouble(self, i, v): ... def setArgumentAsAggregateOfAggregateOfEntityInstance(self, i, v): ... def setArgumentAsAggregateOfAggregateOfInt(self, i, v): ... def setArgumentAsAggregateOfDouble(self, i, v): ... def setArgumentAsAggregateOfEntityInstance(self, i, v): ... def setArgumentAsAggregateOfInt(self, i, v): ... def setArgumentAsAggregateOfString(self, i, v): ... def setArgumentAsBool(self, i, v): ... def setArgumentAsDouble(self, i, v): ... def setArgumentAsEntityInstance(self, i, v): ... def setArgumentAsInt(self, i, v): ... def setArgumentAsLogical(self, i, v): ... def setArgumentAsNull(self, i): ... def setArgumentAsString(self, i, a): ... def set_attribute_value(self, *args): ... def toString(self, arg2, upper): ... def to_string(self, valid_spf): ... def unset_attribute_value(self, i): ... class enumeration_type(declaration): def argument_types(self) -> tuple[str, ...]: ... def as_enumeration_type(self) -> enumeration_type: ... def enumeration_items(self) -> tuple[str, ...]: ... def lookup_enum_offset(self, string: str) -> int: """Get index of the string in enum.""" ... def lookup_enum_value(self, i: int) -> str: """Get a string for the index in enum.""" ... class extrusion(sweep): depth: Any direction: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class face: basis: Any def calc_hash(self): ... @property def children(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... def print_impl(self, o, indent): ... class file: def FreshId(self): ... def add(self, entity: entity_instance, id: int) -> entity_instance: ... def addEntities(self, entities): ... def add_type_ref(self, new_entity): ... def batch(self) -> None: """Enable batch mode. Batch mode: 1. Calling ``remove(entity)`` does not immediately remove the entity; it marks it for deletion instead. 2. When you call ``unbatch()``, all marked entities are deleted in a single operation. Difference from usual removal: - In normal mode, removing an entity immediately traverses and removes all inverse references to it. - In batch mode, inverse references are not updated per entity. Instead, the entire inverse reference map is scanned during ``unbatch()`` to remove references to all deleted entities. Batch deletion may be slower than immediate deletion, depending on the size of the inverse reference map. """ ... def unbatch(self) -> None: """Exit batch mode.""" ... def build_inverses(self): ... def build_inverses_(self, arg2): ... def by_guid(self, guid: str) -> entity_instance: ... def by_id(self, id: int) -> entity_instance: ... def by_type(self, *args): ... def by_type_excl_subtypes(self, *args): ... def bypass_type(self, type_name): ... calculate_unit_factors: bool check_existance_before_adding: bool def create(self, decl): ... @staticmethod def createTimestamp(): ... def entity_names(self) -> tuple[int, ...]: """Get a tuple of step ids present in the file.""" ... def file_pointer(self) -> int: """Internal IfcFile pointer address. Same as ``int(self.this)``. """ ... def get_inverses_by_declaration( self, instance_id: int, type: declaration, attribute_index: int ) -> tuple[entity_instance, ...]: """Get instance inverses of the particular type defined by ``declaration``. :param declaration: Type of inverses to find. Supertypes are also supported - e.g. 'IfcRoot' will also include all 'IfcRelationship' inverses. :param attribute_index: Find references only from the provided attribute index. Could be set to ``-1`` to consider all attributes. """ ... def getMaxId(self): ... def get_total_inverses_by_id(self, instance_id: int) -> int: ... def getUnit(self, unit_type): ... def get_inverse(self, e: entity_instance) -> tuple[entity_instance, ...]: ... def get_inverse_indices(self, *args: Union[entity_instance, int]) -> tuple[int, ...]: """Get the attribute indices for each inverse from `get_inverse`, that reference the provided entity.. :param args: entity or it's id. Maximum 1 entity at the time. """ ... def get_total_inverses(self, e: entity_instance) -> int: ... def good(self): ... def header(self, *args) -> IfcSpfHeader: """Internal IfcSpfHeader instance, always prefer ``ifcopenshell.file.header`` instead.""" def ifcroot_type(self) -> entity: ... def initialize(self, *args): ... instantiate_typed_instances: bool def key_value_store_iter(self, prefix): ... def key_value_store_query(self, key): ... def process_deletion_inverse(self, inst): ... def recalculate_id_counter(self): ... def remove(self, entity: entity_instance) -> None: ... def remove_type_ref(self, new_entity): ... def reset_identity_cache(self): ... @property def schema(self): ... def storage_mode(self): ... def to_string(self): ... @staticmethod def traverse(instance: entity_instance, max_level: int) -> tuple[entity_instance, ...]: ... @staticmethod def traverse_breadth_first(instance: entity_instance, max_level: int) -> tuple[entity_instance, ...]: ... def types(self) -> tuple[str, ...]: """Return a tuple of classes present in the file. E.g. `("IfcWallType", "IfcWall", "IfcArbitraryClosedProfileDef", ...)`. """ ... def write(self, fn): ... class file_open_status: SUCCESS: int READ_ERROR: int NO_HEADER: int UNSUPPORTED_SCHEMA: int INVALID_SYNTAX: int UNKNOWN: int def value(self): ... class fn_evaluator: settings_: Any def clone(self): ... def end(self): ... def evaluate(self, u): ... def length(self): ... def start(self): ... class function_item(implicit_item): def calc_hash(self): ... def end(self): ... def kind(self): ... def length(self): ... def start(self): ... class function_item_evaluator: def evaluate(self, *args): ... def evaluation_points(self, *args): ... class functor_item(function_item): def calc_hash(self): ... def clone_(self): ... def end(self): ... def kind(self): ... def start(self): ... class geom_item(item): matrix: Any surface_style: Any class geometry_conversion_result: breps: Any elements: Any index: Any item: Any products: Any products_2: Any representation: Any class gradient_function(function_item): def calc_hash(self): ... def clone_(self): ... def end(self): ... def get_horizontal(self): ... def get_vertical(self): ... def kind(self): ... def start(self): ... class equal_functor: ... class hash_functor: ... class horizontal_plan_at_element: ... class implicit_item(geom_item): ... class inverse_attribute: bag_type: Any set_type: Any unspecified_type: Any def attribute_reference(self): ... def bound1(self): ... def bound2(self): ... def entity_reference(self): ... def name(self): ... def type_of_aggregation(self): ... def type_of_aggregation_string(self): ... class item: instance: Any orientation: Any def calc_hash(self): ... # TODO: hide from the wrapper? def clone_(self) -> Self: ... def hash(self): ... def identity(self): ... def reverse(self): ... # TODO: hide from the wrapper? def kind(self): """Internal enum item index.""" class less_functor: ... class line(curve): def calc_hash(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class line_segment: def back(self): ... def begin(self): ... def empty(self): ... def end(self): ... def fill(self, u): ... def front(self): ... def iterator(self): ... def rbegin(self): ... def rend(self): ... def size(self): ... def swap(self, v): ... class loft: axis: Any def calc_hash(self): ... @property def children(self): ... def clone_(self): ... def kind(self): ... def print_impl(self, o, indent): ... class loop: closed: Any external: Any fi: Any def calc_hash(self): ... def calculate_linear_edge_curves(self): ... def centroid(self): ... @property def children(self): ... def clone_(self): ... def is_polyhedron(self): ... def kind(self): ... def remove_linear_edge_curves(self): ... class matrix4(item): IDENTITY: Any AFFINE_WO_SCALE: Any AFFINE_W_UNIFORM_SCALE: Any AFFINE_W_NONUNIFORM_SCALE: Any OTHER: Any tag: Any def calc_hash(self): ... def clone_(self): ... @property def components(self): ... def is_identity(self): ... def kind(self): ... def translation_part(self): ... def post_multiply_scale(self, s): ... def pre_multiply_scale(self, s): ... class named_type(parameter_type): def _is(self, *args): ... def as_named_type(self) -> named_type: ... def declared_type(self) -> declaration: ... class node(item): def calc_hash(self): ... def clone_(self): ... def kind(self): ... class offset_curve(curve): basis: Any offset: Any reference: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... class offset_function(function_item): def calc_hash(self): ... def clone_(self): ... def end(self): ... def get_basis(self): ... def get_offset(self): ... def kind(self): ... def start(self): ... class parameter_type: def _is(self, *args: Union[str, declaration]) -> bool: """ :param args: IFC class name or declaration to check. Argument accepts only 1 value. """ ... def as_aggregation_type(self) -> Union[aggregation_type, None]: ... def as_named_type(self) -> Union[named_type, None]: ... def as_simple_type(self) -> Union[simple_type, None]: ... class piecewise_function(function_item): def calc_hash(self): ... def clone_(self): ... def end(self): ... def is_empty(self): ... def kind(self): ... def length(self): ... def span_count(self): ... def span_fn(self, i): ... def spans(self): ... def start(self): ... class plane(surface): def calc_hash(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class point3: def calc_hash(self): ... def clone_(self): ... @property def components(self): ... def kind(self): ... class polygon_2: boundary: Any inner_boundaries: Any point_inside: Any class ray_intersection_result: distance: Any dot_product: Any instance: Any normal: Any position: Any ray_distance: Any style_index: Any class ray_intersection_results: def append(self, x): ... def assign(self, n, x): ... def back(self): ... def begin(self): ... def capacity(self): ... def clear(self): ... def empty(self): ... def end(self): ... def erase(self, *args): ... def front(self): ... def get_allocator(self): ... def insert(self, *args): ... def iterator(self): ... def pop(self): ... def pop_back(self): ... def push_back(self, x): ... def rbegin(self): ... def rend(self): ... def reserve(self, n): ... def resize(self, *args): ... def size(self): ... def swap(self, v): ... class revolve(sweep): angle: Any axis_origin: Any direction: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class schema_definition: def declaration_by_name(self, *args: str) -> declaration: """ :return: ``declaration`` but upcasted to the most advanced available type (e.g. ``entity``, ``type_declaration``, etc). """ ... def declarations(self) -> tuple[declaration, ...]: """ :return: returned declarations are also upcasted, see ``declaration_by_name``. """ ... def entities(self) -> tuple[entity, ...]: ... def enumeration_types(self) -> tuple[enumeration_type, ...]: ... def select_types(self) -> tuple[select_type, ...]: ... def type_declarations(self) -> tuple[type_declaration, ...]: ... def instantiate(self, decl, data): ... def name(self) -> str: ... class select_type(declaration): def as_select_type(self) -> select_type: ... def select_list(self) -> tuple[declaration, ...]: ... class shell: closed: Any def calc_hash(self): ... def centroid(self): ... @property def children(self): ... def clone_(self): ... def kind(self): ... def print_impl(self, o, indent): ... class simple_type(parameter_type): binary_type: Any boolean_type: Any integer_type: Any logical_type: Any number_type: Any real_type: Any string_type: Any datatype_COUNT: Any def as_simple_type(self) -> simple_type: ... def declared_type(self): ... class solid: def calc_hash(self): ... @property def children(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class sphere(surface): radius: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class style(item): diffuse: colour name: str """E.g. 'IfcSurfaceStyleShading-218', where 218 is style's STEP id.""" specular: colour specularity: float """Can be `float('nan')`""" surface: colour transparency: float """Can be `float('nan')`""" use_surface_color: bool def calc_hash(self) -> int: ... def clone_(self) -> Self: ... def get_color(self) -> colour: """ "Return surface color if it's used, otherwise return diffuse color.""" ... def has_specularity(self) -> bool: ... def has_transparency(self) -> bool: ... def instance_id(self) -> int: """ Possible values for `instance_id`: - IFC style id if style assigned to the representation items directly or through material with a style; - IFC material id if both true: - element has a material without a style; - there are parts of the geometry that has no other style assigned to them; - -1 in case if there is no material; - 0 in case if there are default materials used. """ ... def kind(self) -> int: ... class surface(geom_item): ... class svg_groups_of_line_segments: def append(self, x): ... def assign(self, n, x): ... def back(self): ... def begin(self): ... def capacity(self): ... def clear(self): ... def empty(self): ... def end(self): ... def erase(self, *args): ... def front(self): ... def get_allocator(self): ... def insert(self, *args): ... def iterator(self): ... def pop(self): ... def pop_back(self): ... def push_back(self, x): ... def rbegin(self): ... def rend(self): ... def reserve(self, n): ... def resize(self, *args): ... def size(self): ... def swap(self, v): ... class svg_groups_of_polygons: def append(self, x): ... def assign(self, n, x): ... def back(self): ... def begin(self): ... def capacity(self): ... def clear(self): ... def empty(self): ... def end(self): ... def erase(self, *args): ... def front(self): ... def get_allocator(self): ... def insert(self, *args): ... def iterator(self): ... def pop(self): ... def pop_back(self): ... def push_back(self, x): ... def rbegin(self): ... def rend(self): ... def reserve(self, n): ... def resize(self, *args): ... def size(self): ... def swap(self, v): ... class svg_line_segments: def append(self, x): ... def assign(self, n, x): ... def back(self): ... def begin(self): ... def capacity(self): ... def clear(self): ... def empty(self): ... def end(self): ... def erase(self, *args): ... def front(self): ... def get_allocator(self): ... def insert(self, *args): ... def iterator(self): ... def pop(self): ... def pop_back(self): ... def push_back(self, x): ... def rbegin(self): ... def rend(self): ... def reserve(self, n): ... def resize(self, *args): ... def size(self): ... def swap(self, v): ... class svg_loop: def append(self, x): ... def assign(self, n, x): ... def back(self): ... def begin(self): ... def capacity(self): ... def clear(self): ... def empty(self): ... def end(self): ... def erase(self, *args): ... def front(self): ... def get_allocator(self): ... def insert(self, *args): ... def iterator(self): ... def pop(self): ... def pop_back(self): ... def push_back(self, x): ... def rbegin(self): ... def rend(self): ... def reserve(self, n): ... def resize(self, *args): ... def size(self): ... def swap(self, v): ... class svg_loops: def append(self, x): ... def assign(self, n, x): ... def back(self): ... def begin(self): ... def capacity(self): ... def clear(self): ... def empty(self): ... def end(self): ... def erase(self, *args): ... def front(self): ... def get_allocator(self): ... def insert(self, *args): ... def iterator(self): ... def pop(self): ... def pop_back(self): ... def push_back(self, x): ... def rbegin(self): ... def rend(self): ... def reserve(self, n): ... def resize(self, *args): ... def size(self): ... def swap(self, v): ... class svg_point: def back(self): ... def begin(self): ... def empty(self): ... def end(self): ... def fill(self, u): ... def front(self): ... def iterator(self): ... def rbegin(self): ... def rend(self): ... def size(self): ... def swap(self, v): ... class svg_polygons: def append(self, x): ... def assign(self, n, x): ... def back(self): ... def begin(self): ... def capacity(self): ... def clear(self): ... def empty(self): ... def end(self): ... def erase(self, *args): ... def front(self): ... def get_allocator(self): ... def insert(self, *args): ... def iterator(self): ... def pop(self): ... def pop_back(self): ... def push_back(self, x): ... def rbegin(self): ... def rend(self): ... def reserve(self, n): ... def resize(self, *args): ... def size(self): ... def swap(self, v): ... class sweep(geom_item): basis: Any class sweep_along_curve(sweep): curve: Any surface: Any direction: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... class torus(surface): radius1: Any radius2: Any def calc_hash(self): ... def clone_(self): ... def kind(self): ... @property def matrix(self): ... class tree: def add_element(self, *args): ... def add_file(self, *args): ... def clash_clearance_many(self, set_a, set_b, clearance, check_all): ... def clash_collision_many(self, set_a, set_b, allow_touching): ... def clash_intersection_many(self, set_a, set_b, tolerance, check_all): ... def distances(self): ... def enable_face_styles(self, *args): ... @staticmethod def is_manifold(fs): ... def protrusion_distances(self): ... def select(self, *args): ... def select_box(self, *args): ... def select_ray(self, p0, d, length): ... def styles(self): ... def uint8_to_b64(self, uuids_array): ... @staticmethod def vector_to_list(ps): ... def write_h5(self): ... class trimmed_curve(geom_item): basis: Any curve_sense: Any start: Any end: Any def reverse(self): ... class type_by_kind: max: Any class type_declaration(declaration): def argument_types(self): ... def as_type_declaration(self) -> type_declaration: ... def declared_type(self): ... class uninitialized_tag: ... def arrange_polygons(polygons): ... def clear_schemas(): ... def construct_iterator(geometry_library, settings, file, num_threads): ... def construct_iterator_with_include_exclude(geometry_library, settings, file, elems, include, num_threads): ... def construct_iterator_with_include_exclude_globalid(geometry_library, settings, file, elems, include, num_threads): ... def construct_iterator_with_include_exclude_id(geometry_library, settings, file, elems, include, num_threads): ... def convert_loop_to_function_item(loop): ... def create_box(*args): ... def create_epeck(*args): ... def create_shape(*args): ... def flatten(deep): ... def get_feature(x): ... def get_info_cpp(v, include_identifier): ... def get_log(): ... def guess_file_type(fn): ... def helmert_curve_point(A0, A1, A2, s): ... def kind_to_string(k): ... def less(arg1, arg2): ... def line_segments_to_polygons(s, eps, segments): ... def map_shape(settings, instance): ... def nary_union(sequence): ... def new_IfcBaseClass(schema_identifier: str, name: str) -> entity_instance: ... def open(fn, readonly): ... def parse_ifcxml(filename): ... def polygons_to_svg(*args): ... def read(data): ... def register_schema(arg1): ... def schema_by_name(arg1: str) -> schema_definition: ... def schema_names() -> tuple[str, ...]: ... def serialise(schema_name, shape_str, advanced): ... def set_feature(x, v): ... def set_log_format_json(): ... def set_log_format_text(): ... def stream_from_string(data): ... def svg_to_line_segments(data, class_name): ... def svg_to_polygons(data, class_name): ... def taxonomy_item_repr(i): ... def tesselate(schema_name, shape_str, d): ... def turn_off_detailed_logging() -> None: ... def turn_on_detailed_logging() -> None: ... def version() -> str: ...