@@ -1058,25 +1058,56 @@ def __sub__(self, other):
10581058 """
10591059 Perform difference on Geometry objects with the - operator
10601060 """
1061- material = self .material or other .material
1062- try :
1063- new_polygon = filter_non_polygons (self .geom - other .geom )
1064- if isinstance (new_polygon , MultiPolygon ):
1065- return CompoundGeometry (
1066- [Geometry (polygon , material ) for polygon in new_polygon .geoms ]
1061+ material = pre .DEFAULT_MATERIAL
1062+ if isinstance (self , CompoundGeometry ):
1063+ subs_geom_acc = []
1064+ for geom in self .geoms :
1065+ new_geom = geom - other
1066+ subs_geom_acc .append (new_geom )
1067+ return CompoundGeometry (subs_geom_acc )
1068+ else :
1069+ material = self .material or pre .DEFAULT_MATERIAL
1070+ try :
1071+ new_polygon = filter_non_polygons (self .geom - other .geom )
1072+ if isinstance (new_polygon , GeometryCollection ): # Non-polygon results
1073+ return None
1074+ elif isinstance (new_polygon , MultiPolygon ):
1075+ return CompoundGeometry (
1076+ [Geometry (polygon , material ) for polygon in new_polygon .geoms ]
1077+ )
1078+ elif isinstance (new_polygon , Polygon ):
1079+ if self .assigned_control_point and new_polygon .contains (
1080+ self .assigned_control_point
1081+ ):
1082+ return Geometry (
1083+ new_polygon , material , self .assigned_control_point
1084+ )
1085+ else :
1086+ return Geometry (new_polygon , material )
1087+ except :
1088+ raise ValueError (
1089+ f"Cannot perform 'difference' on these two objects: { self } - { other } "
10671090 )
1068- if isinstance (new_polygon , GeometryCollection ):
1069- return None
1070- # Check to see if assigned_control_point is still valid
1071- if self .assigned_control_point and new_polygon .contains (
1072- self .assigned_control_point
1073- ):
1074- return Geometry (new_polygon , material , self .control_points [0 ])
1075- return Geometry (new_polygon , material )
1076- except :
1077- raise ValueError (
1078- f"Cannot perform 'difference' on these two objects: { self } - { other } "
1079- )
1091+
1092+ # material = self.material or other.material
1093+ # try:
1094+ # new_polygon = filter_non_polygons(self.geom - other.geom)
1095+ # if isinstance(new_polygon, MultiPolygon):
1096+ # return CompoundGeometry(
1097+ # [Geometry(polygon, material) for polygon in new_polygon.geoms]
1098+ # )
1099+ # if isinstance(new_polygon, GeometryCollection):
1100+ # return None
1101+ # # Check to see if assigned_control_point is still valid
1102+ # if self.assigned_control_point and new_polygon.contains(
1103+ # self.assigned_control_point
1104+ # ):
1105+ # return Geometry(new_polygon, material, self.control_points[0])
1106+ # return Geometry(new_polygon, material)
1107+ # except:
1108+ # raise ValueError(
1109+ # f"Cannot perform 'difference' on these two objects: {self} - {other}"
1110+ # )
10801111
10811112 def __add__ (self , other ):
10821113 """
0 commit comments