Add cut() function for polygon
This commit is contained in:
parent
ffbaf8f4c4
commit
4466198924
@ -172,3 +172,38 @@ class Polygon(Shape):
|
|||||||
return (type(self), reordered_vertices.data.tobytes(), self.layer), \
|
return (type(self), reordered_vertices.data.tobytes(), self.layer), \
|
||||||
(offset, scale/norm_value, rotation, self.dose), \
|
(offset, scale/norm_value, rotation, self.dose), \
|
||||||
lambda: Polygon(reordered_vertices*norm_value, layer=self.layer)
|
lambda: Polygon(reordered_vertices*norm_value, layer=self.layer)
|
||||||
|
|
||||||
|
def cut(self,
|
||||||
|
cut_xs: numpy.ndarray = None,
|
||||||
|
cut_ys: numpy.ndarray = None
|
||||||
|
) -> List['Polygon']:
|
||||||
|
import float_raster
|
||||||
|
xy = (self.offset + self.vertices).T
|
||||||
|
|
||||||
|
if cut_xs is None:
|
||||||
|
cut_xs = tuple()
|
||||||
|
if cut_ys is None:
|
||||||
|
cut_ys = tuple()
|
||||||
|
|
||||||
|
mins, maxs = self.get_bounds()
|
||||||
|
dx, dy = maxs - mins
|
||||||
|
|
||||||
|
cx = numpy.hstack((min(tuple(cut_xs) + (mins[0],)) - dx, cut_xs, max((maxs[0],) + tuple(cut_xs)) + dx))
|
||||||
|
cy = numpy.hstack((min(tuple(cut_ys) + (mins[1],)) - dy, cut_ys, max((maxs[1],) + tuple(cut_ys)) + dy))
|
||||||
|
|
||||||
|
shape_with_extra_verts = float_raster.create_vertices(xy, cx, cy)
|
||||||
|
|
||||||
|
polygons = []
|
||||||
|
for cx_min, cx_max in zip(cx, cx[1:]):
|
||||||
|
for cy_min, cy_max in zip(cy, cy[1:]):
|
||||||
|
clipped_verts = float_raster.clip_vertices_to_window(
|
||||||
|
copy.deepcopy(shape_with_extra_verts),
|
||||||
|
cx_min, cx_max, cy_min, cy_max)
|
||||||
|
final_verts = numpy.hstack((
|
||||||
|
numpy.real(clipped_verts)[:, None],
|
||||||
|
numpy.imag(clipped_verts)[:, None]))
|
||||||
|
polygons.append(Polygon(
|
||||||
|
vertices=final_verts,
|
||||||
|
layer=self.layer,
|
||||||
|
dose=self.dose))
|
||||||
|
return polygons
|
||||||
|
Loading…
Reference in New Issue
Block a user