def needImage(self, image): if not self.isClose(image): return False if polygon.pointsInPolygon(image.stagecorners, self.stagecorners): return True if polygon.pointsInPolygon([image.stagecenter], self.stagecorners): return True if polygon.pointsInPolygon(self.stagecorners, image.stagecorners): return True if polygon.pointsInPolygon([self.stagecenter], image.stagecorners): return True return False
def setPolygon(self): vertices = self.panel.getTargetPositions('Polygon Vertices') if len(vertices) < 3: self.polygonrasterpoints = self.rasterpoints else: self.polygonrasterpoints = polygon.pointsInPolygon(self.rasterpoints, vertices) self.setTargets(self.polygonrasterpoints, 'Polygon Raster')
def setPolygon(self): vertices = self.panel.getTargetPositions('Polygon Vertices') if len(vertices) < 3: self.polygonrasterpoints = self.rasterpoints else: self.polygonrasterpoints = polygon.pointsInPolygon( self.rasterpoints, vertices) self.setTargets(self.polygonrasterpoints, 'Polygon Raster')
def makeRaster(self): shape = self.currentimagedata['image'].shape spacing = self.settings['raster spacing'] angledeg = self.settings['raster angle'] anglerad = math.radians(angledeg) rasterpoints = raster.createRaster(shape, spacing, anglerad) regionrasters = [] fullrasterset = set() for region in self.regionarrays: regionraster = polygon.pointsInPolygon(rasterpoints, region) regionrasters.append(regionraster) fullrasterset = fullrasterset.union(regionraster) # set is unordered, so use original rasterpoints for order self.fullraster = [] for point in rasterpoints: if point in fullrasterset: self.fullraster.append(point) fullrasterdisplay = self.transpose_points(self.fullraster) self.setTargets(fullrasterdisplay, 'acquisition', block=False)
def insideRegionArrays(self, rasterpoints, spacing): fullrasterset = set() ## this block will reduce the number of raster points if self.regionarrays: region = self.regionarrays[0] gmin0 = gmax0 = region[0][0] gmin1 = gmax1 = region[0][1] for region in self.regionarrays: min0 = min(region[:, 0]) min1 = min(region[:, 1]) max0 = max(region[:, 0]) max1 = max(region[:, 1]) if min0 < gmin0: gmin0 = min0 if min1 < gmin1: gmin1 = min1 if max0 > gmax0: gmax0 = max0 if max1 > gmax1: gmax1 = max1 gmin0 -= (2 * spacing) gmin1 -= (2 * spacing) gmax0 += (2 * spacing) gmax1 += (2 * spacing) newrasterpoints = [] for rasterpoint in rasterpoints: if gmin0 < rasterpoint[0] < gmax0: if gmin1 < rasterpoint[1] < gmax1: newrasterpoints.append(rasterpoint) rasterpoints = newrasterpoints #for region in self.regionarrays: for region in self.regionarrays: ### keep raster points that are either in the polygon ### or near the polygon fillraster = polygon.pointsInPolygon(rasterpoints, region) fullrasterset = fullrasterset.union(fillraster) leftovers = list(set(rasterpoints).difference(fillraster)) if len(region) > 1: distances = polygon.distancePointsToPolygon(leftovers, region) else: # handle the case for one point in the region regionlist = region.tolist() regionlist = [(regionlist[0][0], regionlist[0][1]), (regionlist[0][0] + 1, regionlist[0][1] + 1)] newregion = numpy.array(regionlist) distances = polygon.distancePointsToPolygon( leftovers, newregion) isnear = distances < spacing #nearraster = numpy.compress(distances<spacing, rasterpoints) nearraster = [] for i, point in enumerate(leftovers): if isnear[i]: nearraster.append(point) fullrasterset = fullrasterset.union(nearraster) # set is unordered, so use original rasterpoints for order fullraster = [] for point in rasterpoints: if point in fullrasterset: fullraster.append(point) return fullraster
def insideRegionArrays(self, rasterpoints,spacing): fullrasterset = set() ## this block will reduce the number of raster points if self.regionarrays: region = self.regionarrays[0] gmin0 = gmax0 = region[0][0] gmin1 = gmax1 = region[0][1] for region in self.regionarrays: min0 = min(region[:,0]) min1 = min(region[:,1]) max0 = max(region[:,0]) max1 = max(region[:,1]) if min0 < gmin0: gmin0 = min0 if min1 < gmin1: gmin1 = min1 if max0 > gmax0: gmax0 = max0 if max1 > gmax1: gmax1 = max1 gmin0 -= (2*spacing) gmin1 -= (2*spacing) gmax0 += (2*spacing) gmax1 += (2*spacing) newrasterpoints = [] for rasterpoint in rasterpoints: if gmin0 < rasterpoint[0] < gmax0: if gmin1 < rasterpoint[1] < gmax1: newrasterpoints.append(rasterpoint) rasterpoints = newrasterpoints #for region in self.regionarrays: for region in self.regionarrays: ### keep raster points that are either in the polygon ### or near the polygon fillraster = polygon.pointsInPolygon(rasterpoints, region) fullrasterset = fullrasterset.union(fillraster) leftovers = list(set(rasterpoints).difference(fillraster)) if len(region) > 1: distances = polygon.distancePointsToPolygon(leftovers, region) else: # handle the case for one point in the region regionlist = region.tolist() regionlist =[(regionlist[0][0],regionlist[0][1]),(regionlist[0][0]+1,regionlist[0][1]+1)] newregion = numpy.array(regionlist) distances = polygon.distancePointsToPolygon(leftovers, newregion) isnear = distances < spacing #nearraster = numpy.compress(distances<spacing, rasterpoints) nearraster = [] for i, point in enumerate(leftovers): if isnear[i]: nearraster.append(point) fullrasterset = fullrasterset.union(nearraster) # set is unordered, so use original rasterpoints for order fullraster = [] for point in rasterpoints: if point in fullrasterset: fullraster.append(point) return fullraster