Changeset 1132


Ignore:
Timestamp:
20.01.2016 23:11:51 (4 years ago)
Author:
klaus
Message:

faster drawing routine, but slows down with number of redraws

Location:
SHX/trunk/SeismicHandler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/SeismicHandler/modules/wx_.py

    r1131 r1132  
    1010import math 
    1111import os 
     12import numpy as np 
    1213from functools import partial 
    1314from SeismicHandler.basics.messages import msgs, subscribe_ui_event, \ 
     
    876877            norm = globalnorm and self.maxAmplitude or self._normtype[1] 
    877878            # zoom=1/tzoom makes trace stay within bitmap 
    878             t.prepare_image_data(pltwidth, zheight, 
    879                 timewindow, zoom=prepzoom, norm=norm) 
    880             #print "dbg: img data", pltwidth, zheight, timewindow, prepzoom, norm 
    881              
     879            #t.prepare_image_data( pltwidth, zheight, 
     880            #    timewindow, zoom=prepzoom, norm=norm) 
     881                         
    882882            shx_graphics = t.get_graphics() 
    883883            if shx_graphics == None: 
     
    918918                portion = plotStartSec / (timewindow[1] - timewindow[0]) 
    919919                plotoffset = portion * pltwidth 
    920             #ks t.shx_graphics.plotoffset = plotoffset 
    921  
    922             # For vertical plotting the data has to be transformed 
    923             if self.traceOrder in [0, 1]: 
    924                 ImageData = shx_graphics.ImageData 
    925             if self.traceOrder == 2: 
    926                 ImageData = [] 
    927                 # simply swap x and y 
    928                 for line in shx_graphics.ImageData: 
    929                     ImageData.append([line[1], pltwidth - line[0], 
    930                                                   line[3], pltwidth - line[2]]) 
    931             elif self.traceOrder == 3: 
    932                 ImageData = [] 
    933                 # dito plus mirror x 
    934                 for line in shx_graphics.ImageData: 
    935                     ImageData.append([zheight - line[1], line[0], 
    936                                                    zheight - line[3], line[2]]) 
     920 
     921            ## For vertical plotting the data has to be transformed 
     922            #if self.traceOrder in [0, 1]: 
     923            #    ImageData = shx_graphics.ImageData 
     924            #if self.traceOrder == 2: 
     925            #    ImageData = [] 
     926            #    # simply swap x and y 
     927            #    for line in shx_graphics.ImageData: 
     928            #        ImageData.append([line[1], pltwidth - line[0], 
     929            #                                      line[3], pltwidth - line[2]]) 
     930            #elif self.traceOrder == 3: 
     931            #    ImageData = [] 
     932            #    # dito plus mirror x 
     933            #    for line in shx_graphics.ImageData: 
     934            #        ImageData.append([zheight - line[1], line[0], 
     935            #            zheight - line[3], line[2]]) 
    937936 
    938937            # get color, etc. attribute 
     
    963962                dbuffer.SetPen(wx.Pen(color, style.linewidth, linestyle)) 
    964963                dbuffer.BeginDrawing() 
    965                 dbuffer.DrawLineList(ImageData) 
     964                #dbuffer.DrawLineList(ImageData) 
     965                dbuffer.DrawLines( 
     966                    self.prepImage(t,pltwidth,zheight,timewindow,prepzoom,norm) 
     967                ) 
    966968                dbuffer.EndDrawing() 
    967969 
     
    11241126        self.Refresh() 
    11251127        self.Update() 
     1128 
     1129    def prepImage( self, trc, width, height, timewindow, zoom, norm ): 
     1130        "Return polygon ready for plotting via wx." 
     1131 
     1132        # get data slice of current time window 
     1133        if not timewindow: 
     1134            # use trace's total dimensions 
     1135            windowstart, windowend = (trc.get_info("relstart"), 
     1136                trc.get_info("relend")) 
     1137        else: 
     1138            windowstart, windowend = timewindow 
     1139        try: 
     1140            pt = trc.slice_relative(windowstart, windowend) 
     1141        except: 
     1142            return None 
     1143             
     1144        # scaling in time direction 
     1145        duration_total = windowend - windowstart 
     1146        duration_trace = pt.stats.endtime - pt.stats.starttime 
     1147        pixel_width = duration_trace * width / duration_total 
     1148         
     1149        # save pixel_width (but dont' really understand) 
     1150        shx_graphics = trc.get_graphics() 
     1151        if shx_graphics != None: 
     1152            shx_graphics.PlotPixels = pixel_width 
     1153 
     1154        # make sure, norm is a number 
     1155        if hasattr(norm, "lower"): 
     1156            norm = norm.upper()[0] 
     1157            if norm == "W": 
     1158                norm = abs(pt.max()) 
     1159            elif norm == "T": 
     1160                norm = self.max() 
     1161            else: 
     1162                raise ValueError("Invalid input for normation!") 
     1163         
     1164        # scaling in amplitude direction 
     1165        try: 
     1166            trczoom = trc.stats.sh.ZOOM 
     1167        except: 
     1168            trczoom = 1.0 
     1169        amplscale = 1. / norm * height / 2 * zoom * trczoom 
     1170        return zip( 
     1171            np.linspace( 0., width, len(pt.data) ), 
     1172            pt.data*amplscale + height/2 
     1173        ) 
    11261174 
    11271175    #@timeit 
  • SHX/trunk/SeismicHandler/patches/obspy_.py

    r1131 r1132  
    6464                                           norm="window", norm_amplitude=None): 
    6565    """ 
     66    ROUTINE DISABLED, too slow 
     67     
    6668    Preparing trace data for fast plotting. Using numpy's minmax feature - this 
    6769    will not just downsample the data! 
     
    208210 
    209211    timestore.timer_on()  #******************************************** 
     212    # this part is actually very slow (takes almost two third of redraw time) 
    210213    for i in xrange(1, len(y)): 
    211214        newx = i * stretch 
Note: See TracChangeset for help on using the changeset viewer.