@@ -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