def performFind(self): """ Loads the baseline images from disk and finds them on the screen. Works with the Transforms class to load extra data stored in the PNG's to control how they're matched. """ # sequence and series for series in self.seriesRange: regions = [] lastRegion = self.region nextRegion = Region(self.region) # try to match all images in the sequence try: for (sequence, filename) in enumerate(self.getImageNames(series=series,state=self.state)): transform = self.transform(filename, entity=self.entity, regionsMatched=regions, context=self) # Apply prev search attribs nextRegion = transform.apply(nextRegion, self.transform.CONTEXT_PREVIOUS) # Apply search attribs pattern = transform.apply(Pattern(filename), self.transform.CONTEXT_CURRENT) self.logger.trace("Loading %%s", self.logger.getFormatter()(pattern)) # find the image on the screen lastRegion = nextRegion.wait( pattern ) # If we don't set to zero wait time (dialog handler threads wait indefinitely) lastRegion = transform.apply(lastRegion, self.transform.CONTEXT_MATCH) self.logger.trace("validated %%s %%s in region %%s nameType=%s colType=%s ser=%s seq=%s" % (self.nameType, self.collectionType, series, sequence), self.logger.getFormatter()(pattern), self.logger.getFormatter()(lastRegion), self.logger.getFormatter()(nextRegion)) regions.append( lastRegion ) # Transform next region with the spacial region # spacialRegion is only used if there are spacial modifiers nextRegion = transform.apply(Region(nextRegion), self.transform.CONTEXT_NEXT, override=lastRegion) except FindFailed, e: self.logger.trace("failed to find on screen %%s in %%s nameType=%s colType=%s ser=%s seq=%s" % (self.nameType, self.collectionType, series, sequence), self.logger.getFormatter()(self).setLabel("Images"), self.logger.getFormatter()(nextRegion)) else: region = None for currentRegion in regions: if not region: region = Region(currentRegion) else: region.add(currentRegion) region = transform.apply(region, self.transform.CONTEXT_FINAL) # Apply entity transforms transform.apply(self.entity, self.transform.CONTEXT_ENTITY) self.lastRegionFound = region self.lastSeriesFound = series return region
class PracticeDrawingStrategy(DrawingStrategy): region = None def goto(self, x, y): if not self.region: self.region = Region(x, y, 1, 1) else: self.region = self.region.add(Location(x,y)) def on(self): self.region = None super(PracticeDrawingStrategy, self).on() def off(self): self.obj.center(self.region) super(PracticeDrawingStrategy, self).off()
class ContiniousDrawingStrategy(DrawingStrategy): queue = None region = None def goto(self, x, y): if self.enabled: self.queue.append([x, y]) if not self.region: self.region = Region(x, y, 1, 1) else: self.region = self.region.add(Location(x, y)) def on(self): super(ContiniousDrawingStrategy, self).on() self.queue = [] self.region = None def off(self): super(ContiniousDrawingStrategy, self).off() # Prepare to draw annotation self.obj.center(self.region) # Move to first location self.obj.mouseMove(self.queue[0][0], self.queue[0][1]) self.obj.startDrawing() for location in self.queue[1:]: self.obj.mouseMove(location[0], location[1]) self.obj.stopDrawing()
def performFind(self): """ Loads the baseline images from disk and finds them on the screen. Works with the Transforms class to load extra data stored in the PNG's to control how they're matched. """ # sequence and series for series in self.seriesRange: regions = [] lastRegion = self.region nextRegion = Region(self.region) # try to match all images in the sequence try: for (sequence, filename) in enumerate( self.getImageNames(series=series, state=self.state)): transform = self.transform(filename, entity=self.entity, regionsMatched=regions, context=self) # Apply prev search attribs nextRegion = transform.apply( nextRegion, self.transform.CONTEXT_PREVIOUS) # Apply search attribs pattern = transform.apply(Pattern(filename), self.transform.CONTEXT_CURRENT) self.logger.trace("Loading %%s", self.logger.getFormatter()(pattern)) # find the image on the screen lastRegion = nextRegion.wait( pattern ) # If we don't set to zero wait time (dialog handler threads wait indefinitely) lastRegion = transform.apply(lastRegion, self.transform.CONTEXT_MATCH) self.logger.trace( "validated %%s %%s in region %%s nameType=%s colType=%s ser=%s seq=%s" % (self.nameType, self.collectionType, series, sequence), self.logger.getFormatter()(pattern), self.logger.getFormatter()(lastRegion), self.logger.getFormatter()(nextRegion)) regions.append(lastRegion) # Transform next region with the spacial region # spacialRegion is only used if there are spacial modifiers nextRegion = transform.apply(Region(nextRegion), self.transform.CONTEXT_NEXT, override=lastRegion) except FindFailed, e: self.logger.trace( "failed to find on screen %%s in %%s nameType=%s colType=%s ser=%s seq=%s" % (self.nameType, self.collectionType, series, sequence), self.logger.getFormatter()(self).setLabel("Images"), self.logger.getFormatter()(nextRegion)) else: region = None for currentRegion in regions: if not region: region = Region(currentRegion) else: region.add(currentRegion) region = transform.apply(region, self.transform.CONTEXT_FINAL) # Apply entity transforms transform.apply(self.entity, self.transform.CONTEXT_ENTITY) self.lastRegionFound = region self.lastSeriesFound = series return region