示例#1
0
    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()
示例#4
0
    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