Skip to content

Commit 6ae7eee

Browse files
committed
Updated implementation of CompoundGeometry.from_points() to include materials as per #199
1 parent 389011b commit 6ae7eee

File tree

1 file changed

+38
-12
lines changed

1 file changed

+38
-12
lines changed

sectionproperties/pre/geometry.py

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,6 +1242,13 @@ def from_points(
12421242
)
12431243
if holes is None:
12441244
holes = list()
1245+
if materials is not pre.DEFAULT_MATERIAL:
1246+
if len(materials) != len(control_points):
1247+
raise ValueError(
1248+
f"If materials are provided, the number of materials in the list must "
1249+
"match the number of control_points provided.\n"
1250+
f"len(materials)=={len(materials)}, len(control_points)=={len(control_points)}."
1251+
)
12451252

12461253
# First, generate all invidual polygons from points and facets
12471254
current_polygon_points = []
@@ -1297,17 +1304,26 @@ def from_points(
12971304
f"does not match the number of control_points given ({len(control_points)})."
12981305
)
12991306
if not interiors:
1300-
return CompoundGeometry(
1301-
[
1302-
Geometry(exterior, control_points=control_points[idx])
1303-
for idx, exterior in enumerate(exteriors)
1304-
]
1305-
)
1307+
if materials is pre.DEFAULT_MATERIAL:
1308+
return CompoundGeometry(
1309+
[
1310+
Geometry(exterior, control_points=control_points[idx], material=materials)
1311+
for idx, exterior in enumerate(exteriors)
1312+
]
1313+
)
1314+
else:
1315+
return CompoundGeometry(
1316+
[
1317+
Geometry(exterior, control_points=control_points[idx], material=materials[idx])
1318+
for idx, exterior in enumerate(exteriors)
1319+
]
1320+
)
1321+
13061322
else:
13071323
# "Punch" all holes through each exterior geometry
13081324
punched_exteriors = []
13091325
punched_exterior_geometries = []
1310-
for exterior in exteriors:
1326+
for idx, exterior in enumerate(exteriors):
13111327
punched_exterior = exterior
13121328
for interior in interiors:
13131329
punched_exterior = punched_exterior - interior
@@ -1322,12 +1338,22 @@ def from_points(
13221338
f"Control points given are not contained within the geometry"
13231339
f" once holes are subtracted: {control_points}"
13241340
)
1325-
exterior_geometry = Geometry(
1326-
punched_exterior, control_points=exterior_control_point
1327-
)
1328-
punched_exterior_geometries.append(exterior_geometry)
1341+
if materials is pre.DEFAULT_MATERIAL:
1342+
1343+
exterior_geometry = Geometry(
1344+
punched_exterior, control_points=exterior_control_point, material=materials
1345+
)
1346+
punched_exterior_geometries.append(exterior_geometry)
1347+
1348+
else:
1349+
1350+
exterior_geometry = Geometry(
1351+
punched_exterior, control_points=exterior_control_point, material=materials[idx]
1352+
)
1353+
punched_exterior_geometries.append(exterior_geometry)
1354+
1355+
return CompoundGeometry(punched_exterior_geometries)
13291356

1330-
return CompoundGeometry(punched_exterior_geometries)
13311357

13321358
@classmethod
13331359
def from_3dm(cls, filepath: Union[str, pathlib.Path], **kwargs) -> CompoundGeometry:

0 commit comments

Comments
 (0)