Changeset 6518


Ignore:
Timestamp:
09/02/10 12:02:58 (9 years ago)
Author:
pnorton
Message:

Added some additional text to the metadata title.

Location:
cowsclient/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cowsclient/trunk/cowsclient/lib/figure_builder.py

    r6517 r6518  
    175175        renderer = Renderer(fig.dpi) 
    176176 
     177 
     178        title, titleHeight = self._drawTitleToAxes(axes, renderer) 
     179         
     180        txt, textHeight = self._drawMetadataTextToAxes(axes, renderer, self.metadataItems) 
     181 
     182        # fit the axis round the text 
     183 
     184        pos = axes.get_position() 
     185        newpos = Bbox( [[pos.x0,  pos.y1 - (titleHeight + textHeight) / height], [pos.x1, pos.y1]] ) 
     186        axes.set_position(newpos ) 
     187 
     188        # position the text below the title 
     189 
     190        newAxisHeight = (newpos.y1 - newpos.y0) * height 
     191        txt.set_position( (0.02, 0.98 - (titleHeight/newAxisHeight) )) 
     192 
     193        for loc, spine in axes.spines.iteritems(): 
     194            spine.set_edgecolor(borderColor) 
     195         
     196        # Draw heading box 
     197         
     198        headingBoxHeight = titleHeight - 1 
     199         
     200        axes.add_patch(Rectangle((0, 1.0 - (headingBoxHeight/newAxisHeight)), 1, (headingBoxHeight/newAxisHeight), 
     201                       facecolor=borderColor, 
     202                      fill = True, 
     203                      linewidth=0)) 
     204 
     205        # reduce the figure height 
     206         
     207        originalHeight = fig.get_figheight() 
     208        pos = axes.get_position() 
     209        topBound = 20 / float(dpi) 
     210         
     211        textHeight = (pos.y1 - pos.y0) * originalHeight 
     212         
     213        newHeight = topBound * 2 + textHeight 
     214         
     215        # work out the new proportions for the figure 
     216         
     217        border = topBound / float(newHeight) 
     218        newpos = Bbox( [[pos.x0,  border], [pos.x1, 1 - border]] ) 
     219        axes.set_position(newpos ) 
     220         
     221        fig.set_figheight(newHeight) 
     222         
     223        return figureToImage(fig) 
     224     
     225    def _drawMetadataTextToAxes(self, axes, renderer, metadataItems): 
     226        ''' 
     227        Draws the metadata text to the axes 
     228         
     229        @param axes: the axes to draw the text on 
     230        @type axes: matplotlib.axes.Axes 
     231        @param renderer: the matplotlib renderer to evaluate the text size 
     232        @param metadataItems: a list of metadata items to get the text form 
     233         
     234        @return: the text object, the total metadata text height in pixels 
     235        ''' 
     236         
    177237        lines = self.metadataItems 
    178          
    179238        text = '\n'.join(lines) 
    180  
    181         title = axes.text(0.02,0.98,"Plot Metadata:", 
    182                 fontdict=titleFont, 
    183                 horizontalalignment='left', 
    184                 verticalalignment='top',) 
    185  
    186         extent = title.get_window_extent(renderer) 
    187         titleHeight = (extent.y1 - extent.y0 + 8) 
    188          
    189239        txt = axes.text(0.02, 0.98 ,text, 
    190240                fontdict=metadataFont, 
     
    195245         
    196246        textHeight = (extent.y1 - extent.y0 + 10) 
    197          
    198         log.debug("textHeight = %s, titleHeight = %s" % (textHeight, titleHeight,)) 
    199          
    200         # fit the axis round the text 
    201  
    202         pos = axes.get_position() 
    203         newpos = Bbox( [[pos.x0,  pos.y1 - (titleHeight + textHeight) / height], [pos.x1, pos.y1]] ) 
    204          
    205         axes.set_position(newpos ) 
    206  
    207         # position the text below the title 
    208  
    209         newAxisHeight = (newpos.y1 - newpos.y0) * height 
    210         txt.set_position( (0.02, 0.98 - (titleHeight/newAxisHeight) )) 
    211  
    212         for loc, spine in axes.spines.iteritems(): 
    213             spine.set_edgecolor(borderColor) 
    214          
    215         # Draw heading box 
    216          
    217         headingBoxHeight = titleHeight - 3 
    218          
    219         axes.add_patch(Rectangle((0, 1.0 - (headingBoxHeight/newAxisHeight)), 1, (headingBoxHeight/newAxisHeight), 
    220                        facecolor=borderColor, 
    221                       fill = True, 
    222                       linewidth=0)) 
    223  
    224         # reduce the figure height 
    225          
    226         originalHeight = fig.get_figheight() 
    227         pos = axes.get_position() 
    228         topBound = 20 / float(dpi) 
    229          
    230         textHeight = (pos.y1 - pos.y0) * originalHeight 
    231          
    232         newHeight = topBound * 2 + textHeight 
    233         log.debug("newHeight = %s, originalHeight = %s, topBound = %s" % (newHeight, originalHeight, topBound)) 
    234          
    235         # work out the new proportions for the figure 
    236          
    237         border = topBound / float(newHeight) 
    238         newpos = Bbox( [[pos.x0,  border], [pos.x1, 1 - border]] ) 
    239         axes.set_position(newpos ) 
    240          
    241         fig.set_figheight(newHeight) 
    242          
    243         return figureToImage(fig) 
     247        return txt, textHeight         
     248 
     249    def _drawTitleToAxes(self, axes, renderer): 
     250        ''' 
     251        Draws the metadata tile text onto the axes 
     252         
     253        @return: the text object, the height of the title text in pixels 
     254        ''' 
     255         
     256        titleText = self._getTitleText() 
     257 
     258        title = axes.text(0.02,0.98,titleText, 
     259                fontdict=titleFont, 
     260                horizontalalignment='left', 
     261                verticalalignment='top',) 
     262 
     263        extent = title.get_window_extent(renderer) 
     264        titleHeight = (extent.y1 - extent.y0 + 8) 
     265        return title, titleHeight         
     266 
     267    def _getTitleText(self): 
     268         
     269        titleText = "Plot Metadata:" 
     270        additionalText = config.get('additional_figure_text', '') 
     271         
     272        if additionalText != "": 
     273         
     274            if additionalText.find('<date>') > 0: 
     275                timeString = time.strftime("%Y-%m-%D %H:%M:%S", time.localtime()) 
     276                additionalText = additionalText.replace("<date>", timeString) 
     277             
     278            titleText += " %s" % (additionalText,) 
     279         
     280        return titleText 
    244281 
    245282    def _buildMetadataItems(self, layerInfoList): 
     
    293330            endpoint = p['ENDPOINT'] 
    294331             
    295             #info = LayerInfo(endpoint=endpoint, layerName=name) 
    296             log.debug("name = %s, endpoint = %s" % (name, endpoint,)) 
    297  
    298332            try: 
    299333                legendURL = self._getLegendURL(endpoint, name, p) 
     
    302336                legendURL = None 
    303337             
    304             log.debug("legendURL = %s" % (legendURL,)) 
    305338             
    306339            li = LayerInfo(endpoint, name, p, legendURL) 
    307             log.debug("li.legendURL = %s" % (repr(li.legendURL),)) 
    308340            infoList.append(li) 
    309341             
     
    370402        legURL = parseEndpointString(legURL, p) 
    371403         
    372         log.debug("legURL = %s" % (legURL,)) 
    373404        return legURL 
    374405         
     
    429460     
    430461    def buildLegendImage(self, infoList, width): 
    431         log.debug("self.legendLabels = %s" % (self.legendLabels,)) 
    432462         
    433463        legendImages = self._getLegendImages(infoList) 
    434464         
    435465        height = self._calculateHeight(legendImages) 
    436          
    437         log.debug("width = %s, height = %s" % (width, height,)) 
    438466         
    439467        combinedImage = Image.new('RGBA', (width, height)) 
  • cowsclient/trunk/development.ini

    r6517 r6518  
    2323beaker.session.secret = somesecret 
    2424serverurl=http://localhost:5005 
     25 
    2526image_folder = %(here)s/cowsclient/public/layout/images 
     27additional_figure_text = (CEDA COWS <date>) 
    2628 
    2729# select a custom openlayers path, cc_openlayers is the cows client reduced version 
Note: See TracChangeset for help on using the changeset viewer.