From 71e59be21c79462c19f60ec7061f55092fb18c56 Mon Sep 17 00:00:00 2001 From: Edward Astill Date: Fri, 28 Feb 2025 15:37:08 +0800 Subject: [PATCH 1/3] Rename method to clarify functionality in geometry processing Replaced `find_holes` with `filter_polygons` to improve clarity of intent and better reflect the method's purpose. This change enhances code readability and semantic accuracy in the polygon filtering process. --- src/sectionproperties/pre/geometry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sectionproperties/pre/geometry.py b/src/sectionproperties/pre/geometry.py index c0a61b33..7a83e3c2 100644 --- a/src/sectionproperties/pre/geometry.py +++ b/src/sectionproperties/pre/geometry.py @@ -2511,7 +2511,7 @@ def load_dxf( my_dxf.cleanup() polygons = my_dxf.polygons - new_polygons = c2s.utils.find_holes(polygons) + new_polygons = c2s.utils.filter_polygons(polygons) if isinstance(new_polygons, MultiPolygon): return CompoundGeometry(new_polygons) From cba295d34e55afebdb01537d5f3216fd9642e193 Mon Sep 17 00:00:00 2001 From: robbievanleeuwen Date: Thu, 6 Mar 2025 11:48:21 +0000 Subject: [PATCH 2/3] Bump pytest-check from 2.4.1 to 2.5.0 --- uv.lock | 1 + 1 file changed, 1 insertion(+) 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 = [ From 740228f33ff3a474c1e6da3572be52b138cffe3e Mon Sep 17 00:00:00 2001 From: Edward Astill Date: Fri, 7 Mar 2025 12:59:48 +0800 Subject: [PATCH 3/3] changes to support filter_polygons --- src/sectionproperties/pre/geometry.py | 21 +++++++++++++-------- typings/cad_to_shapely/__init__.pyi | 2 +- typings/cad_to_shapely/utils.pyi | 4 ++++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/sectionproperties/pre/geometry.py b/src/sectionproperties/pre/geometry.py index 7a83e3c2..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.filter_polygons(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