diff --git a/src/sectionproperties/pre/geometry.py b/src/sectionproperties/pre/geometry.py index c0a61b33..bdae94d3 100644 --- a/src/sectionproperties/pre/geometry.py +++ b/src/sectionproperties/pre/geometry.py @@ -2510,17 +2510,22 @@ def load_dxf( my_dxf.process(spline_delta=spline_delta, degrees_per_segment=degrees_per_segment) my_dxf.cleanup() - polygons = my_dxf.polygons - new_polygons = c2s.utils.find_holes(polygons) - - if isinstance(new_polygons, MultiPolygon): - return CompoundGeometry(new_polygons) - elif isinstance(new_polygons, Polygon): # pyright: ignore [reportUnnecessaryIsInstance] - return Geometry(new_polygons) - else: + # ensure list length > 0 + if len(new_polygons) == 0: msg = f"No shapely.Polygon objects found in file: {dxf_filepath}" raise RuntimeError(msg) + # ensure only Polygons are generated + for poly in new_polygons: + if not isinstance(poly, Polygon): # pyright: ignore [reportUnnecessaryIsInstance] + msg = f"Not all objects found in file: {dxf_filepath} are Polygons" + raise RuntimeError(msg) + + if len(new_polygons) == 1: + return Geometry(new_polygons[0]) + else: + return CompoundGeometry(MultiPolygon(new_polygons)) + def create_facets( points_list: list[tuple[float, float]], diff --git a/typings/cad_to_shapely/__init__.pyi b/typings/cad_to_shapely/__init__.pyi index 87797693..082a9fb5 100644 --- a/typings/cad_to_shapely/__init__.pyi +++ b/typings/cad_to_shapely/__init__.pyi @@ -1,2 +1,2 @@ from .dxf import DxfImporter -from .utils import find_holes +from .utils import filter_polygons, find_holes \ No newline at end of file diff --git a/typings/cad_to_shapely/utils.pyi b/typings/cad_to_shapely/utils.pyi index f61ebec0..7254214c 100644 --- a/typings/cad_to_shapely/utils.pyi +++ b/typings/cad_to_shapely/utils.pyi @@ -1,3 +1,7 @@ from shapely.geometry import Polygon def find_holes(polygons: list[Polygon]) -> Polygon: ... +def filter_polygons( + polygons: list[Polygon], + filter_flag: int = ..., +) -> list[Polygon]: ... \ No newline at end of file diff --git a/uv.lock b/uv.lock index 0860c55f..6a6fb78e 100644 --- a/uv.lock +++ b/uv.lock @@ -1646,6 +1646,7 @@ version = "2.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ce/d7/32de906d890e3ccdad421b6db2a67ff94ebecb1f933e5f1038b69f007c30/pytest_check-2.5.0.tar.gz", hash = "sha256:3a6be8431c7720287958436d97a6b823eed5ae5ceb7da5572a0e4a9462feaf88", size = 26844 } wheels = [