Changeset 425
- Timestamp:
- 07/27/2011 04:52:01 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
SHX/trunk/sandbox/traceplotter.py
r424 r425 158 158 if evt.RightIsDown(): 159 159 self.ZoomWindow = None 160 self.__zoombox(dc, self.dragStart, (x, y), trace.shx.midpoint, \161 160 self.__zoombox(dc, self.dragStart, (x, y), 161 trace.shx.midpoint, size=2) 162 162 # draw position line 163 163 elif evt.LeftIsDown(): … … 165 165 if self.traceOrder in [0, 1]: 166 166 dc.DrawLine( 167 x, mmth2 - self.Scrolled, \167 x, mmth2 - self.Scrolled, 168 168 x, mpth2 - self.Scrolled 169 169 ) … … 240 240 if self.traceOrder in [0, 1]: 241 241 self.Scrolled = self.GetScrollPos(wx.VERTICAL) * \ 242 242 self.GetScrollPixelsPerUnit()[1] 243 243 elif self.traceOrder in [2, 3]: 244 244 self.Scrolled = self.GetScrollPos(wx.HORIZONTAL) * \ 245 245 self.GetScrollPixelsPerUnit()[0] 246 246 self.OnPaint(evt, renewOverlay=True) 247 247 evt.Skip() … … 249 249 def OnIdle(self, evt): 250 250 """ 251 Idle processing. Redraw is only triggered here not on PAINT event. 251 Idle processing. Redraw is only triggered here not on PAINT 252 event. 252 253 """ 253 254 if self.refresh: … … 260 261 Called if redraw is requested. 261 262 262 Just set flag for redraw - execution triggered from IDLE event. In case263 of resize renew overlay buffers.263 Just set flag for redraw - execution triggered from IDLE event. 264 In case of resize renew overlay buffers. 264 265 """ 265 266 # if window was resized, renew overlay buffers … … 275 276 def OnNotifyTimeAxis(self, orientation): 276 277 """ 277 Handle changes of time axis mode (absolute vs. relative time axis). 278 Handle changes of time axis mode (absolute vs. relative time 279 axis). 278 280 """ 279 281 recent = self.relativeAxis … … 286 288 def OnNotifyTraceOrder(self, order): 287 289 """ 288 Handle changes of trace plotting mode (horizontal vs. vertical modes). 290 Handle changes of trace plotting mode (horizontal vs. vertical 291 modes). 289 292 """ 290 293 recent = self.traceOrder … … 292 295 if recent != self.traceOrder: 293 296 # reset display height 294 msgs.sendMessage('notify.tracecount', count=len(self.traces), reset=True) 295 msgs.sendMessage('ui.change.displayheight', height=len(self.traces)) 297 msgs.sendMessage('notify.tracecount', count=len(self.traces), 298 reset=True) 299 msgs.sendMessage('ui.change.displayheight', 300 height=len(self.traces)) 296 301 self._setup() 297 302 # BAD: setting evt=True … … 319 324 def ScreenToTraceAndTime(self, x, y): 320 325 """ 321 Returns trace instance and time code derived from cursor position inside322 graphical panel.326 Returns trace instance and time code derived from cursor 327 position inside graphical panel. 323 328 """ 324 329 x, y = self.CalcUnscrolledPosition((x,y)) … … 335 340 for t in self.traces: 336 341 if tracepos >= t.shx.midpoint - theight and \ 337 342 tracepos <= t.shx.midpoint + theight: 338 343 trace = t 339 344 break … … 376 381 timestamp = start + t 377 382 378 # do not return trace if timestamp is outside, region is enlarged by one379 # pixel383 # do not return trace if timestamp is outside, region is enlarged 384 # by one pixel. 380 385 pixel_duration = duration/pixel_width 381 386 if trace and (trace.stats.starttime > timestamp + pixel_duration or \ 382 387 trace.stats.endtime + pixel_duration < timestamp): 383 388 trace = None 384 389 … … 409 414 # horizontal 410 415 if self.traceOrder in [0, 1]: 411 x, y = self.CalcScrolledPosition((relpos + STATION_INFO, trace.shx.midpoint)) 416 x, y = self.CalcScrolledPosition( 417 (relpos + STATION_INFO, trace.shx.midpoint)) 412 418 # vertical 413 419 elif self.traceOrder == 2: 414 x, y = self.CalcScrolledPosition((trace.shx.midpoint, self.height - relpos - STATION_INFO)) 420 x, y = self.CalcScrolledPosition( 421 (trace.shx.midpoint, self.height - relpos - STATION_INFO)) 415 422 elif self.traceOrder == 3: 416 x, y = self.CalcScrolledPosition((trace.shx.midpoint, relpos + STATION_INFO)) 423 x, y = self.CalcScrolledPosition( 424 (trace.shx.midpoint, relpos + STATION_INFO)) 417 425 return x, y 418 426 … … 434 442 except Exception, e: 435 443 msg = e.message and e.message or "File not readable!" 436 dlg = wx.MessageDialog(self, msg, "An error occured!", \437 444 dlg = wx.MessageDialog(self, msg, "An error occured!", 445 wx.OK | wx.ICON_ERROR) 438 446 dlg.ShowModal() 439 447 dlg.Destroy() … … 446 454 t.stats.network = "XX" 447 455 t.stats.channel = "EHA" 448 t.trim(t.stats.starttime +4, t.stats.endtime-10)456 t.trim(t.stats.starttime + 4, t.stats.endtime - 10) 449 457 self.traces.add(t) 450 458 t = self.traces[0].copy() 451 459 t.stats.network = "XX" 452 460 t.stats.channel = "EHB" 453 t.trim(t.stats.starttime +10, t.stats.endtime-3)461 t.trim(t.stats.starttime + 10, t.stats.endtime - 3) 454 462 self.traces.add(t) 455 463 except Exception, inst: … … 538 546 pick[2][0] + th2, pick[2][1], 539 547 ) 540 dc.DrawRotatedText(pick[1], pick[2][0]-th2+2, pick[2][1]-2, 90) 548 dc.DrawRotatedText(pick[1], pick[2][0] - th2 + 2, 549 pick[2][1] - 2, 90) 541 550 542 551 #draw zoom window … … 553 562 def _drawTraces(self): 554 563 """ 555 Do the real plotting of waveforms including station text and time scale. 564 Do the real plotting of waveforms including station text and 565 time scale. 556 566 """ 557 567 width, height = self.GetVirtualSize() … … 624 634 # simply swap x and y 625 635 for line in t.shx.ImageData: 626 ImageData.append([line[1], pltwidth - line[0], line[3], \627 636 ImageData.append([line[1], pltwidth - line[0], 637 line[3], pltwidth - line[2]]) 628 638 elif self.traceOrder == 3: 629 639 ImageData = [] 630 640 # dito plus mirror x 631 641 for line in t.shx.ImageData: 632 ImageData.append([theight - line[1], line[0], \633 642 ImageData.append([theight - line[1], line[0], 643 theight - line[3], line[2]]) 634 644 635 645 buffer.BeginDrawing() … … 639 649 # copy trace picture to canvas 640 650 if self.traceOrder in [0, 1]: 641 canvas.Blit(plotoffset + STATION_INFO, i * theight, pltwidth, \642 651 canvas.Blit(plotoffset + STATION_INFO, i * theight, pltwidth, 652 theight, buffer, 0, 0, wx.AND) 643 653 elif self.traceOrder == 2: 644 canvas.Blit(i * theight, -plotoffset + MARGIN, theight, \645 654 canvas.Blit(i * theight, -plotoffset + MARGIN, theight, 655 pltwidth, buffer, 0, 0, wx.AND) 646 656 elif self.traceOrder == 3: 647 canvas.Blit(i * theight, STATION_INFO + plotoffset, theight, \648 657 canvas.Blit(i * theight, STATION_INFO + plotoffset, theight, 658 pltwidth, buffer, 0, 0, wx.AND) 649 659 650 660 # trace numbering … … 662 672 t.shx.midpoint = tmp = i * theight + theight//2 663 673 if self.traceOrder in [0, 1]: 664 canvas.DrawText(txt, 5, tmp - h //2)665 canvas.DrawLine(STATION_INFO, tmp, width -MARGIN, tmp)674 canvas.DrawText(txt, 5, tmp - h // 2) 675 canvas.DrawLine(STATION_INFO, tmp, width - MARGIN, tmp) 666 676 canvas.SetPen(wx.Pen('Red', 1, wx.LONG_DASH)) 667 canvas.DrawLine(STATION_INFO, tmp +theight//2, width-MARGIN, \668 tmp+theight//2)669 canvas.DrawLine(STATION_INFO, tmp -theight//2, width-MARGIN, \670 tmp-theight//2)677 canvas.DrawLine(STATION_INFO, tmp + theight // 2, 678 width - MARGIN, tmp + theight // 2) 679 canvas.DrawLine(STATION_INFO, tmp - theight // 2, 680 width - MARGIN, tmp - theight // 2) 671 681 elif self.traceOrder == 2: 672 canvas.DrawRotatedText(txt, tmp - h//2, height - MARGIN, 90) 673 canvas.DrawLine(t.shx.midpoint, MARGIN, tmp, height-STATION_INFO) 682 canvas.DrawRotatedText(txt, tmp - h // 2, height - MARGIN, 90) 683 canvas.DrawLine(t.shx.midpoint, MARGIN, 684 tmp, height - STATION_INFO) 674 685 canvas.SetPen(wx.Pen('Red', 1, wx.LONG_DASH)) 675 canvas.DrawLine(tmp +theight//2, MARGIN, tmp+theight//2, \676 height-STATION_INFO)677 canvas.DrawLine(tmp -theight//2, MARGIN, tmp-theight//2, \678 height-STATION_INFO)686 canvas.DrawLine(tmp + theight // 2, MARGIN, 687 tmp + theight // 2, height - STATION_INFO) 688 canvas.DrawLine(tmp - theight // 2, MARGIN, 689 tmp - theight // 2, height - STATION_INFO) 679 690 elif self.traceOrder == 3: 680 canvas.DrawRotatedText(txt, tmp - h //2, \681 STATION_INFO - (STATION_INFO-w)//2, 90)682 canvas.DrawLine(tmp, STATION_INFO, tmp, height -MARGIN)691 canvas.DrawRotatedText(txt, tmp - h // 2, 692 STATION_INFO - (STATION_INFO - w) // 2, 90) 693 canvas.DrawLine(tmp, STATION_INFO, tmp, height - MARGIN) 683 694 canvas.SetPen(wx.Pen('Red', 1, wx.LONG_DASH)) 684 canvas.DrawLine(tmp+theight //2, STATION_INFO, tmp+theight//2, \685 height-MARGIN)686 canvas.DrawLine(tmp -theight//2, STATION_INFO, tmp-theight//2, \687 height-MARGIN)695 canvas.DrawLine(tmp+theight // 2, STATION_INFO, 696 tmp + theight // 2, height - MARGIN) 697 canvas.DrawLine(tmp - theight // 2, STATION_INFO, 698 tmp - theight // 2, height - MARGIN) 688 699 689 700 # time axis … … 713 724 # basic time axis line 714 725 if self.traceOrder in [0, 1]: 715 canvas.DrawLine(varpos_start, fixpos, length + varpos_start, fixpos) 726 canvas.DrawLine(varpos_start, fixpos, 727 length + varpos_start, fixpos) 716 728 elif self.traceOrder in [2, 3]: 717 canvas.DrawLine(fixpos, varpos_start, fixpos, varpos_start + length) 729 canvas.DrawLine(fixpos, varpos_start, 730 fixpos, varpos_start + length) 718 731 719 732 # sections with ticks and time string … … 732 745 # time string 733 746 canvas.DrawText(txt, varpos_current - tw / 2, 734 747 fixpos + TIMESCALE_OFFSET_TEXT) 735 748 # major tick 736 749 canvas.DrawLine(varpos_current, fixpos, 737 750 varpos_current, fixpos + TIMESCALE_TICKS_MAJOR) 738 751 # minor ticks 739 752 for j in range(1, 5): … … 750 763 varpos_current = varpos_start + i * chunk 751 764 canvas.DrawRotatedText(txt, fixpos + TIMESCALE_OFFSET_TEXT, 752 765 varpos_current + tw / 2, 90) 753 766 canvas.DrawLine(fixpos, varpos_current, 754 767 fixpos + TIMESCALE_TICKS_MAJOR, varpos_current) 755 768 for j in range(1, 5): 756 769 if self.traceOrder == 2: … … 759 772 fixpos, 760 773 varpos_current + j * chunk2, 761 762 774 fixpos + TIMESCALE_TICKS_MINOR, 775 varpos_current + j * chunk2 763 776 ) 764 777 … … 774 787 def _resetTimeRange(self, **kwargs): 775 788 """ 776 Gather information about traces. Called via message bus.789 Gather information about traces. Called via message system. 777 790 """ 778 791 min = UTCDateTime() # now … … 802 815 def __zoombox(self, dc, start, end, midpoint, color="DARKORANGE", size=1): 803 816 marginfactor = 0.3 804 mf2 = (1 -marginfactor)*2817 mf2 = (1 - marginfactor) * 2 805 818 th2 = self.traceheight / 2 806 819 offset = midpoint - th2 - self.Scrolled … … 808 821 dc.SetPen(wx.Pen(color, size)) 809 822 if self.traceOrder in [0, 1]: 810 dc.DrawRectangle(start[0], offset + th2 *marginfactor, \811 end[0]-start[0], th2*mf2)823 dc.DrawRectangle(start[0], offset + th2 * marginfactor, 824 end[0] - start[0], th2 * mf2) 812 825 elif self.traceOrder in [2, 3]: 813 dc.DrawRectangle(offset + th2 *marginfactor, start[1], \814 th2*mf2, end[1]-start[1])826 dc.DrawRectangle(offset + th2 * marginfactor, start[1], 827 th2 * mf2, end[1] - start[1]) 815 828 816 829 class tracePlotter(wx.Frame): … … 819 832 """ 820 833 def __init__(self, parent, title, size=(640,280)): 821 wx.Frame.__init__(self, parent, title=title, size=size, \822 834 wx.Frame.__init__(self, parent, title=title, size=size, 835 style=wx.DEFAULT_FRAME_STYLE | wx.FULL_REPAINT_ON_RESIZE) 823 836 824 837 files = [] … … 835 848 firstmenu = wx.Menu() 836 849 readdb = wx.MenuItem(firstmenu, wx.NewId(), 'Re&ad...\tr') 837 readdb.SetBitmap(wx.ArtProvider.GetBitmap(wx.ART_FOLDER_OPEN, \838 850 readdb.SetBitmap(wx.ArtProvider.GetBitmap(wx.ART_FOLDER_OPEN, 851 wx.ART_OTHER, (16, 16))) 839 852 self.Bind(wx.EVT_MENU, self.OnReadDb, readdb) 840 853 firstmenu.AppendItem(readdb) 841 854 842 855 read = wx.MenuItem(firstmenu, wx.NewId(), 'Read &file...\tCTRL+R') 843 read.SetBitmap(wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, \844 856 read.SetBitmap(wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, 857 wx.ART_OTHER, (16, 16))) 845 858 self.Bind(wx.EVT_MENU, self.OnRead, read) 846 859 firstmenu.AppendItem(read) … … 848 861 quit = wx.MenuItem(firstmenu, wx.NewId(), '&Quit\tCtrl+Q') 849 862 quit.SetBitmap(wx.ArtProvider.GetBitmap(wx.ART_QUIT, 850 863 wx.ART_OTHER, (16, 16))) 851 864 self.Bind(wx.EVT_MENU, self.OnQuit, quit) 852 865 firstmenu.AppendItem(quit) … … 871 884 tb.AddControl(wx.StaticText(tb, -1, msg)) 872 885 timeaxis = wx.Choice(tb, wx.NewId(), wx.DefaultPosition, wx.DefaultSize, 873 886 ["absolute", "relative"]) 874 887 tb.AddControl(timeaxis) 875 888 self.Bind(wx.EVT_CHOICE, self.OnTimeAxisChange, timeaxis) … … 877 890 msg = ' trace order/direction ' 878 891 tb.AddControl(wx.StaticText(tb, -1, msg)) 879 traceorder = wx.Choice(tb, wx.NewId(), wx.DefaultPosition, wx.DefaultSize, \ 892 traceorder = wx.Choice( 893 tb, wx.NewId(), wx.DefaultPosition, wx.DefaultSize, 880 894 ["left-right, first at bottom", "left-right, first at top", 881 895 "bottom-top, first left", "top-bottom, first left"] … … 892 906 msg = ' height ' 893 907 tb.AddControl(wx.StaticText(tb, -1, msg)) 894 height = wx.Slider(tb, wx.NewId(), 2, 1, 2, wx.DefaultPosition, (70, -1), wx.SL_HORIZONTAL | wx.SL_LABELS) 908 height = wx.Slider(tb, wx.NewId(), 2, 1, 2, wx.DefaultPosition, 909 (70, -1), wx.SL_HORIZONTAL | wx.SL_LABELS) 895 910 tb.AddControl(height) 896 911 self.height = height … … 934 949 self.filename = getattr(self, "filename", "") 935 950 936 dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", \937 951 dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", 952 wx.OPEN | wx.FD_MULTIPLE) 938 953 939 954 files = [] … … 951 966 952 967 def OnReadDb(self, evt): 953 dlg = wx.MessageDialog(self, "not implemented yet", \954 968 dlg = wx.MessageDialog(self, "not implemented yet", 969 "An error occured!", wx.OK) 955 970 dlg.ShowModal() 956 971 dlg.Destroy()
Note: See TracChangeset
for help on using the changeset viewer.