diff --git a/src/ifcopenshell-python/ifcopenshell/api/aggregate/assign_object.py b/src/ifcopenshell-python/ifcopenshell/api/aggregate/assign_object.py index 685b680a95..79f8fa225a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/aggregate/assign_object.py +++ b/src/ifcopenshell-python/ifcopenshell/api/aggregate/assign_object.py @@ -57,10 +57,10 @@ class Usecase: :param product: The part of the aggregate, typically an IfcElement or IfcSpatialStructureElement subclass - :type product: ifcopenshell.entity_instance + :type product: ifcopenshell.entity_instance.entity_instance :param relating_object: The whole of the aggregate, typically an IfcElement or IfcSpatialStructureElement subclass - :type relating_object: ifcopenshell.entity_instance + :type relating_object: ifcopenshell.entity_instance.entity_instance :return: The IfcRelAggregate relationship instance :rtype: ifcopenshell.entity_instance.entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/aggregate/unassign_object.py b/src/ifcopenshell-python/ifcopenshell/api/aggregate/unassign_object.py index 23f3d91311..457026c3d6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/aggregate/unassign_object.py +++ b/src/ifcopenshell-python/ifcopenshell/api/aggregate/unassign_object.py @@ -38,7 +38,7 @@ class Usecase: :param product: The part of the aggregate, typically an IfcElement or IfcSpatialStructureElement subclass - :type product: ifcopenshell.entity_instance + :type product: ifcopenshell.entity_instance.entity_instance :return: The IfcRelAggregate relationship instance, only returned if the whole still contains any other parts. :rtype: ifcopenshell.entity_instance.entity_instance, None diff --git a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py index 62bf6428ca..a8258b6de9 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py +++ b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py @@ -30,7 +30,7 @@ class Usecase: :param product: The product you want to edit. This may be any rooted IFC entity. - :type product: ifcopenshell.entity_instance + :type product: ifcopenshell.entity_instance.entity_instance :param attributes: a dictionary of attribute names and values. :type attributes: dict, optional :return: None diff --git a/src/ifcopenshell-python/ifcopenshell/api/boundary/assign_connection_geometry.py b/src/ifcopenshell-python/ifcopenshell/api/boundary/assign_connection_geometry.py index 274a3e0051..a8f15b4cc9 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/boundary/assign_connection_geometry.py +++ b/src/ifcopenshell-python/ifcopenshell/api/boundary/assign_connection_geometry.py @@ -20,19 +20,64 @@ import ifcopenshell.util.unit class Usecase: - def __init__(self, file, **kwargs): - """location, axis and ref_direction defines the plane""" + def __init__(self, file, rel_space_boundary=None, outer_boundary=None, inner_boundaries=None, location=None, axis=None, ref_direction=None, unit_scale=None): + """Create and assign a connection geometry to a space boundary relationship + + A space boundary may optionally have a plane that represents how that + space is adjacent to another space, known as the connection geometry. + You may specify this plane in terms of an outer boundary polyline, zero + or more inner boundaries (such as for windows), and a positional matrix + for the orientation of the plane. + + :param rel_space_bounary: The space boundary relationship to assign the + connection geometry to. + :type rel_space_bounary: ifcopenshell.entity_instance.entity_instance + :param outer_boundary: A list of 2D points representing an open + polyline. The last point will connect to the first point. Each + point is represented by an interable of 2 floats. The coordinates of + the points are relative to the positional matrix arguments. + :type outer_boundary: list[list[float]] + :param inner_boundaries: A list of zero or more inner boundaries to use + for the plane. Each boundary is represented by an open polyline, as + defined by the outer_boundary argument. + :type inner_boundaries: list[list[list[float]]], optional + :param location: The local origin of the connection geometry, defined as + an XYZ coordinate relative to the placement of the space that is + being bounded. + :type location: list[float] + :param axis: The local X axis of the connection geometry, defined as an + XYZ vector relative to the placement of the space that is being + bounded. + :type axis: list[float] + :param ref_direction: The local Z axis of the connection geometry, + defined as an XYZ vector relative to the placement of the space that + is being bounded. The Y vector is automatically derived using the + right hand rule. + :type ref_direction: list[float] + :param unit_scale: The unit scale as calculated by + ifcopenshell.util.unit.calculate_unit_scale. If not provided, it + will be automatically calculated for you. + :type unit_scale: float, optional + :return: None + :rtype: None + + Example:: + + ifcopenshell.api.run("boundary.assign_connection_geometry", model, + rel_space_boundary=element, + outer_boundary=[(0., 0.), (1., 0.), (1., 1.), (0., 1.)], + location=[0., 0., 0.], axis=[1., 0., 0.], ref_direction=[0., 0., 1.], + ) + """ self.file = file - self.rel_space_boundary = None - self.outer_boundary = None - self.inner_boundaries = () - self.location = None - self.axis = None - self.ref_direction = None - self.unit_scale = None + self.rel_space_boundary = rel_space_boundary + self.outer_boundary = outer_bounary + self.inner_boundaries = inner_boundaries or () + self.location = location + self.axis = axis + self.ref_direction = ref_direction + self.unit_scale = unit_scale self.ifc_vertices = [] - for key, value in kwargs.items(): - setattr(self, key, value) def execute(self): if self.unit_scale is None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/boundary/edit_attributes.py b/src/ifcopenshell-python/ifcopenshell/api/boundary/edit_attributes.py index 244ae77dd3..a67b3fb2bb 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/boundary/edit_attributes.py +++ b/src/ifcopenshell-python/ifcopenshell/api/boundary/edit_attributes.py @@ -18,16 +18,39 @@ class Usecase: - def __init__(self, file, **kwargs): - """location, axis and ref_direction defines the plane""" + def __init__(self, file, entity=None, relating_space=None, related_building_element=None, parent_boundary=None, corresponding_boundary=None): + """Modify the relationships of a space boundary relationship + + Currently this function is quite minimal and offers no advantage to + manual assignment of the space boundary attributes. + + :param entity: The IfcRelSpaceBoundary to modify + :type entity: ifcopenshell.entity_instance.entity_instance + :param relating_space: The IfcSpace or IfcExternalSpatialElement that + the space boundary is related to. + :type relating_space: ifcopenshell.entity_instance.entity_instance + :param related_building_element: The IfcElement that defines the + boundary, typically an IfcWall. + :type relating_space: ifcopenshell.entity_instance.entity_instance + :param parent_boundary: A parent IfcRelSpaceBoundary, only provided if + this is an inner boundary. This can apply to 1st and 2nd level + boundaries. + :type parent_boundary: ifcopenshell.entity_instance.entity_instance, + optional + :param corresponding_boundary: The other IfcRelSpaceBoundary on the + other side of the related element. The pair together represents a + thermal boundary. This only applies to 2nd level boundaries. + :type corresponding_boundary: ifcopenshell.entity_instance.entity_instance, + optional + :return: None + :rtype: None + """ self.file = file - self.entity: "IfcRelSpaceBoundary" - self.relating_space: "IfcSpace | IfcExternalSpatialElement" - self.related_building_element: "IfcElement" - self.parent_boundary: "IfcRelSpaceBoundary" = None - self.corresponding_boundary: "IfcRelSpaceBoundary" = None - for key, value in kwargs.items(): - setattr(self, key, value) + self.entity = entity + self.relating_space = relating_space + self.related_building_element = related_building_element + self.parent_boundary = parent_boundary + self.corresponding_boundary = corresponding_boundary def execute(self): self.entity.RelatingSpace = self.relating_space