Changeset 414


Ignore:
Timestamp:
19.07.2011 16:55:28 (8 years ago)
Author:
marcus
Message:
  • method to derive screen coordinates from given trace and time
  • drawing of picks
File:
1 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/sandbox/traceplotter.py

    r412 r414  
    5959        self.traces = Traces() 
    6060        self.overlay = wx.Overlay() 
     61        self.ovPicks = wx.Overlay() 
    6162        self.refresh = False 
    6263 
     
    7778        self.Bind(wx.EVT_MOTION, self.OnMotion) 
    7879        self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) 
     80        self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown) 
     81        self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) 
    7982 
    8083    # event processing 
     84    def OnLeftDown(self, evt): 
     85        self._captureMouse(evt) 
     86 
     87    def OnRightDown(self, evt): 
     88        self._captureMouse(evt) 
     89 
    8190    def OnMotion(self, evt): 
    8291        """ 
     
    8796 
    8897        # draw box 
    89         if evt.RightIsDown(): 
     98        if evt.RightIsDown() and evt.Dragging(): 
    9099            pass 
    91100        # draw position line 
    92         else: 
     101        elif evt.LeftIsDown() and evt.Dragging(): 
     102#        else: 
    93103            dc = wx.ClientDC(self) 
    94104            odc = wx.DCOverlay(self.overlay, dc) 
     
    139149        # if window was resized, renew overlay buffers 
    140150        if evt and (renewOverlay or evt.GetEventType() == wx.EVT_SIZE.typeId): 
    141             self.overlay = wx.Overlay() 
    142             self.picklines = wx.Overlay() 
     151            self.overlay.Reset() 
     152            self.ovPicks.Reset() 
    143153 
    144154        # painting is only done in idle state 
     
    173183        Release of left mouse button. 
    174184        """ 
     185        if self.HasCapture(): 
     186            self.ReleaseMouse() 
     187            self.dragStart = None 
     188 
    175189        x, y = evt.GetPositionTuple() 
    176190        trace, timestamp = self.ScreenToTraceAndTime(x, y) 
     
    266280    def TraceAndTimeToScreen(self, trace, time): 
    267281        """ 
    268         Return x, y from given trace and time code. 
    269         """ 
    270         pass 
     282        Return x, y from given trace (midpoint) and time code. 
     283        """ 
     284        if self.relativeAxis: 
     285            start = trace.stats.starttime 
     286            end = trace.stats.endtime 
     287            pixel_width = trace.shx.PlotPixels 
     288        else: 
     289            start = self.start 
     290            end = self.end 
     291 
     292            # horizontal 
     293            if self.traceOrder in [0, 1]: 
     294                pixel_width = self.width - STATION_INFO - MARGIN 
     295            # vertical 
     296            elif self.traceOrder in [2, 3]: 
     297                pixel_width = self.height - STATION_INFO - MARGIN 
     298 
     299        # relative position inside trace window 
     300        relpos = (time - start) / (end - start) * pixel_width 
     301 
     302        # horizontal 
     303        if self.traceOrder in [0, 1]: 
     304            return relpos + STATION_INFO, trace.shx.midpoint 
     305        # vertical 
     306        elif self.traceOrder == 2: 
     307            return trace.shx.midpoint, self.height - relpos - STATION_INFO 
     308        elif self.traceOrder == 3: 
     309            return trace.shx.midpoint, relpos + STATION_INFO 
    271310 
    272311    def load(self, fnames=[]): 
     
    311350        self._resetTimeRange() 
    312351 
     352    def _captureMouse(self, evt): 
     353        self.CaptureMouse() 
     354        self.dragStart = evt.GetPosition() 
     355 
    313356    def _drawPicks(self): 
    314357        """ 
     
    332375            return 
    333376 
    334         print _picks 
    335         return 
    336  
    337         pl = wx.Overlay() 
     377        # XXX to get rid of the motion indicator 
     378        if len(_picks) == 1: 
     379            self.OnPaint(None) 
     380             
     381        # reset overlay for mouse motion indicator 
     382        self.overlay.Reset() 
     383 
    338384        dc = wx.ClientDC(self) 
    339         odc = wx.DCOverlay(pl, dc) 
     385        odc = wx.DCOverlay(self.ovPicks, dc) 
    340386        odc.Clear() 
    341         dc.SetPen(wx.Pen("Red", 1)) 
    342387        dc.SetBrush(wx.TRANSPARENT_BRUSH) 
    343         if self.traceOrder in [0, 1]: 
    344             dc.DrawLine( 
    345                 x, trace.shx.midpoint - self.traceheight // 2, \ 
    346                 x, trace.shx.midpoint + self.traceheight // 2 
    347             ) 
    348         elif self.traceOrder in [2, 3]: 
    349             dc.DrawLine( 
    350                 trace.shx.midpoint - self.traceheight // 2, y, 
    351                 trace.shx.midpoint + self.traceheight // 2, y 
    352             ) 
     388 
     389        th2 = self.traceheight / 2 
     390        for pick in _picks: 
     391            color = "Red" 
     392            dc.SetPen(wx.Pen(color, 1)) 
     393            dc.SetTextForeground(color) 
     394            if self.traceOrder in [0, 1]: 
     395                dc.DrawLine( 
     396                    pick[2][0], pick[2][1] - th2, 
     397                    pick[2][0], pick[2][1] + th2 
     398                ) 
     399                dc.DrawText(pick[1], pick[2][0] + 2, pick[2][1] - th2 +2 ) 
     400            elif self.traceOrder in [2, 3]: 
     401                dc.DrawLine( 
     402                    pick[2][0] - th2, pick[2][1], 
     403                    pick[2][0] + th2, pick[2][1], 
     404                ) 
    353405        del odc 
    354406 
Note: See TracChangeset for help on using the changeset viewer.