promote get_shape_aspects to util.element method

This commit is contained in:
Andrej730
2024-02-19 17:33:49 +05:00
parent c918497df2
commit c76a5a7ee7
4 changed files with 48 additions and 13 deletions
@@ -16,7 +16,9 @@
# You should have received a copy of the GNU Lesser General Public License
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
from __future__ import annotations
import ifcopenshell
from typing import List
def get_pset(element, name, prop=None, psets_only=False, qtos_only=False, should_inherit=True, verbose=False):
@@ -379,6 +381,33 @@ def get_types(type):
return []
def get_shape_aspects(element: ifcopenshell.entity_instance) -> List[ifcopenshell.entity_instance]:
"""Gets element shape aspects
:param element: The element to get the shape aspects of.
:type element: ifcopenshell.entity_instance.entity_instance
:return: The associated shape aspects of the element.
:rtype: list[ifcopenshell.entity_instance.entity_instance]
Example:
.. code:: python
element = ifcopenshell.by_type("IfcWall")[0]
shape_aspect = ifcopenshell.util.element.get_shape_aspects(element)
"""
# IfcProduct
if hasattr(element, "Representation"):
return element.Representation.HasShapeAspects
# IfcTypeProduct
shape_aspects = []
for repersentation_map in element.RepresentationMaps:
shape_aspects += repersentation_map.HasShapeAspects
return shape_aspects
def get_material(element, should_skip_usage=False, should_inherit=True):
"""Gets the material of the element
@@ -319,6 +319,24 @@ class TestGetTypesIFC2X3(test.bootstrap.IFC2X3):
assert subject.get_types(element_type) == (element,)
class TestGetShapeAspects(test.bootstrap.IFC4):
def test_getting_the_shape_aspects_of_a_product_type(self):
element_type = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWallType")
shape_aspect = self.file.createIfcShapeAspect()
representation_map = self.file.createIfcRepresentationMap()
element_type.RepresentationMaps = (representation_map,)
shape_aspect.PartOfProductDefinitionShape = representation_map
assert tuple(subject.get_shape_aspects(element_type)) == (shape_aspect,)
def test_getting_the_shape_aspects_of_a_product(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
shape_aspect = self.file.createIfcShapeAspect()
product_shape = self.file.createIfcProductDefinitionShape()
element.Representation = product_shape
shape_aspect.PartOfProductDefinitionShape = product_shape
assert tuple(subject.get_shape_aspects(element)) == (shape_aspect,)
class TestGetMaterial(test.bootstrap.IFC4):
def test_getting_the_material_of_a_product(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")