def __init__(self, logger=None, app=None): if app is not None and logger is None: logger = app.logger if logger is None: logger = log.NullLogger() self.logger = logger if app is None: app = Widgets.Application(logger=self.logger) self.app = app self.dc = get_canvas_types() self.count = 0
def __init__(self, app): super(Viewer, self).__init__() self.logger = app.logger self.dc = get_canvas_types() self.top = app.make_window(title="Simple Ginga 3D Viewer") vw = CanvasView(self.logger) vw.ui_set_active(True) self.vw = vw # quick hack to get 'u' to invoke hidden camera mode bm = vw.get_bindmap() bm.mode_map['u'] = bm.mode_map['mode_camera'] bd = vw.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.set_surface(vw) self.canvas = canvas # add canvas to view private_canvas = vw.get_canvas() private_canvas.add(canvas) # add little mode indicator that shows keyboard modal states #vw.show_mode_indicator(True, corner='ur') # little hack because we don't have a way yet to ask for this # variation of back end through ginga.toolkit w = vw.get_widget() ww = Widgets.wrap(vw.get_widget()) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) vbox.add_widget(ww, stretch=1) hbox = Widgets.HBox() hbox.set_border_width(4) wquit = Widgets.Button("Quit") wquit.add_callback('activated', self.quit) hbox.add_widget(Widgets.Label(''), stretch=1) hbox.add_widget(wquit) vbox.add_widget(hbox) self.top.set_widget(vbox)
def __init__(self, app): super(Viewer, self).__init__() self.logger = app.logger self.dc = get_canvas_types() self.top = app.make_window(title="Simple Ginga 3D Viewer") vw = CanvasView(self.logger) vw.ui_set_active(True) self.vw = vw # quick hack to get 'u' to invoke hidden camera mode bm = vw.get_bindmap() bm.mode_map['u'] = bm.mode_map['mode_camera'] bd = vw.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.set_surface(vw) self.canvas = canvas # add canvas to view private_canvas = vw.get_canvas() private_canvas.add(canvas) # add little mode indicator that shows keyboard modal states #vw.show_mode_indicator(True, corner='ur') # little hack because we don't have a way yet to ask for this # variation of back end through ginga.toolkit ww = Widgets.wrap(vw.get_widget()) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) vbox.add_widget(ww, stretch=1) hbox = Widgets.HBox() hbox.set_border_width(4) wquit = Widgets.Button("Quit") wquit.add_callback('activated', self.quit) hbox.add_widget(Widgets.Label(''), stretch=1) hbox.add_widget(wquit) vbox.add_widget(hbox) self.top.set_widget(vbox)
def __init__(self, logger, app, thread_pool): """ Parameters ---------- logger : python compatible logger a logging-module compatible logger object app : ginga pgw web application object thread_pool : a ginga thread pool """ self.logger = logger self.app = app self.thread_pool = thread_pool self.dc = get_canvas_types() # dict of viewers self.viewers = {}
def __init__(self,panel_name,ui, logger, row, col, drow, dcol, autocut_params='stddev'): #super(image_panel, self).__init__() # enable some user interaction #fi.get_bindings.enable_all(True) self.logger = logger self.ui = ui self.dc = get_canvas_types() fi = CanvasView(self.logger, render='widget') fi.enable_autocuts('on') fi.set_autocut_params(autocut_params) #fi.set_autocut_params('stddev') fi.enable_autozoom('on') #fi.set_callback('drag-drop', self.drop_file) #fi.set_callback('none-move',self.cursor_cb) fi.set_bg(0.2, 0.2, 0.2) fi.ui_set_active(True) fi.show_focus_indicator(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) self.cutout = fi.get_widget() self.ui.cutoutsLayout.addWidget(self.cutout, row, col, drow, dcol) self.fitsimage = fi canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) #canvas.rectangle(.5,.5,10,0) self.canvas = canvas # add canvas to view #fi.add(canvas) private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.register_for_cursor_drawing(fi) #canvas.add_callback('draw-event', self.draw_cb) canvas.set_draw_mode('draw') canvas.ui_set_active(True) self.canvas = canvas self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort()
"""Test ap_regions.py""" import numpy as np import pytest regions = pytest.importorskip('regions') from astropy import units as u from ginga.util.ap_region import (astropy_region_to_ginga_canvas_object as r2g, ginga_canvas_object_to_astropy_region as g2r) from ginga.canvas.CanvasObject import get_canvas_types dc = get_canvas_types() class Test_R2G(object): """Test conversions from AstroPy regions to Ginga canvas types.""" def test_point1(self): r = regions.PointPixelRegion(center=regions.PixCoord(x=42, y=43), visual=regions.RegionVisual(symbol='x')) o = r2g(r) assert isinstance(o, dc.Point) and o.style == 'cross' assert np.all(np.isclose((o.x, o.y), (r.center.x, r.center.y))) def test_point2(self): r = regions.PointPixelRegion(center=regions.PixCoord(x=42, y=43), visual=regions.RegionVisual(symbol='+')) o = r2g(r)
def __init__(self, logger): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() from ginga.gw import Widgets, Viewers self.app = Widgets.Application(logger=logger) #self.app.add_callback('shutdown', self.quit) self.top = self.app.make_window("Ginga example2") self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) hbox = Widgets.HBox() hbox.set_border_width(2) hbox.set_spacing(4) v1 = Viewers.CanvasView(logger) v1.enable_autocuts('on') v1.set_autocut_params('zscale') v1.enable_autozoom('on') v1.set_zoom_algorithm('rate') v1.set_zoomrate(1.4) v1.show_pan_mark(True) v1.set_callback('drag-drop', self.drop_file) v1.set_callback('none-move', self.motion) v1.set_bg(0.2, 0.2, 0.2) v1.ui_setActive(True) v1.set_name('tweedledee') self.viewer1 = v1 self._mi1 = ModeIndicator(v1) bd = v1.get_bindings() bd.enable_all(True) # shared canvas between the two viewers canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') self.canvas = canvas # Tell viewer1 to use this canvas v1.set_canvas(canvas) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() v1.set_desired_size(300, 300) iw = Viewers.GingaViewerWidget(viewer=v1) hbox.add_widget(iw, stretch=1) # Add a second viewer viewing the same canvas v2 = Viewers.CanvasView(logger) v2.enable_autocuts('on') v2.set_autocut_params('zscale') v2.enable_autozoom('on') v2.set_zoom_algorithm('rate') v2.set_zoomrate(1.4) v2.show_pan_mark(True) v2.set_callback('drag-drop', self.drop_file) v2.set_callback('none-move', self.motion) v2.set_bg(0.2, 0.2, 0.2) v2.ui_setActive(True) v1.set_name('tweedledum') self.viewer2 = v2 self._mi2 = ModeIndicator(v2) # Tell viewer2 to use this same canvas v2.set_canvas(canvas) bd = v2.get_bindings() bd.enable_all(True) v2.set_desired_size(300, 300) iw = Viewers.GingaViewerWidget(viewer=v2) hbox.add_widget(iw, stretch=1) vbox.add_widget(hbox, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.set_border_width(2) wdrawtype = Widgets.ComboBox() for name in self.drawtypes: wdrawtype.append_text(name) index = self.drawtypes.index('rectangle') wdrawtype.set_index(index) wdrawtype.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawtype = wdrawtype wdrawcolor = Widgets.ComboBox() for name in self.drawcolors: wdrawcolor.append_text(name) index = self.drawcolors.index('lightblue') wdrawcolor.set_index(index) wdrawcolor.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawcolor = wdrawcolor wfill = Widgets.CheckBox("Fill") wfill.add_callback('activated', lambda w, tf: self.set_drawparams()) self.wfill = wfill walpha = Widgets.SpinBox(dtype=float) walpha.set_limits(0.0, 1.0, incr_value=0.1) walpha.set_value(1.0) walpha.set_decimals(2) walpha.add_callback('value-changed', lambda w, val: self.set_drawparams()) self.walpha = walpha wclear = Widgets.Button("Clear Canvas") wclear.add_callback('activated', lambda w: self.clear_canvas()) wopen = Widgets.Button("Open File") wopen.add_callback('activated', lambda w: self.open_file()) wquit = Widgets.Button("Quit") wquit.add_callback('activated', lambda w: self.quit()) hbox.add_widget(Widgets.Label(''), stretch=1) for w in (wopen, wdrawtype, wdrawcolor, wfill, Widgets.Label('Alpha:'), walpha, wclear, wquit): hbox.add_widget(w, stretch=0) vbox.add_widget(hbox, stretch=0) self.top.set_widget(vbox)
def __init__(self, logger): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() root = Gtk.Window(title="Gtk3 CanvasView Example") root.set_border_width(2) root.connect("delete_event", lambda w, e: quit(w)) self.root = root self.select = GtkHelp.FileSelection(root) vbox = Gtk.VBox(spacing=2) fi = CanvasView(logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file_cb) fi.set_callback('cursor-changed', self.cursor_cb) fi.set_bg(0.2, 0.2, 0.2) fi.ui_set_active(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view private_canvas = fi.get_canvas() private_canvas.register_for_cursor_drawing(fi) private_canvas.add(canvas) canvas.ui_set_active(True) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() # add a color bar fi.show_color_bar(True) fi.show_focus_indicator(True) # add little mode indicator that shows keyboard modal states fi.show_mode_indicator(True, corner='ur') w = fi.get_widget() w.set_size_request(512, 512) vbox.pack_start(w, True, True, 1) self.readout = Gtk.Label("") vbox.pack_start(self.readout, False, False, 0) hbox = Gtk.HBox(spacing=5) wdrawtype = GtkHelp.combo_box_new_text() index = 0 for name in self.drawtypes: wdrawtype.insert_text(index, name) index += 1 index = self.drawtypes.index('rectangle') wdrawtype.set_active(index) wdrawtype.connect('changed', self.set_drawparams) self.wdrawtype = wdrawtype wdrawcolor = GtkHelp.combo_box_new_text() index = 0 for name in self.drawcolors: wdrawcolor.insert_text(index, name) index += 1 index = self.drawcolors.index('lightblue') wdrawcolor.set_active(index) wdrawcolor.connect('changed', self.set_drawparams) self.wdrawcolor = wdrawcolor wfill = GtkHelp.CheckButton("Fill") wfill.sconnect('toggled', self.set_drawparams) self.wfill = wfill walpha = GtkHelp.SpinButton() adj = walpha.get_adjustment() adj.configure(0.0, 0.0, 1.0, 0.1, 0.1, 0) walpha.set_value(1.0) walpha.set_digits(1) walpha.sconnect('value-changed', self.set_drawparams) self.walpha = walpha wclear = Gtk.Button("Clear Canvas") wclear.connect('clicked', self.clear_canvas) wopen = Gtk.Button("Open File") wopen.connect('clicked', self.open_file) wquit = Gtk.Button("Quit") wquit.connect('clicked', quit) for w in (wquit, wclear, walpha, Gtk.Label("Alpha:"), wfill, wdrawcolor, wdrawtype, wopen): hbox.pack_end(w, False, False, 0) vbox.pack_start(hbox, False, False, 0) root.add(vbox)
def __init__(self, logger, window): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() self.top = window self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) fi = EnhancedCanvasView(logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.setSurface(fi) self.canvas = canvas # add canvas to view private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.ui_setActive(True) canvas.register_for_cursor_drawing(fi) fi.set_canvas(canvas) ## self.drawtypes = canvas.get_drawtypes() ## self.drawtypes.sort() # add a color bar private_canvas.add(self.dc.ColorBar(side='bottom', offset=10)) # add little mode indicator that shows modal states in # the corner private_canvas.add(self.dc.ModeIndicator(corner='ur', fontsize=14)) # little hack necessary to get correct operation of the mode indicator # in all circumstances bm = fi.get_bindmap() bm.add_callback('mode-set', lambda *args: fi.redraw(whence=3)) fi.set_desired_size(512, 512) w = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(w, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() btn3 = Widgets.CheckBox("I'm using a trackpad") btn3.add_callback('activated', lambda w, tf: self.use_trackpad_cb(tf)) hbox.add_widget(btn3) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) self.top.set_widget(vbox)
def __init__(self, logger, window): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() self.top = window self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_margins(2, 2, 2, 2) vbox.set_spacing(1) fi = Viewers.CanvasView(logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file_cb) fi.set_callback('cursor-changed', self.cursor_cb) fi.set_bg(0.2, 0.2, 0.2) fi.ui_set_active(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # so trackpad scrolling can be adjusted settings = bd.get_settings() settings.set(scroll_zoom_direct_scale=True, scroll_zoom_acceleration=0.07) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.ui_set_active(True) canvas.register_for_cursor_drawing(fi) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() # add a color bar fi.show_color_bar(True) # add little mode indicator that shows keyboard modal states fi.show_mode_indicator(True, corner='ur') fi.set_desired_size(512, 512) w = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(w, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.set_margins(2, 2, 2, 2) hbox.set_spacing(4) wdrawtype = Widgets.ComboBox() for name in self.drawtypes: wdrawtype.append_text(name) index = self.drawtypes.index('rectangle') wdrawtype.set_index(index) wdrawtype.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawtype = wdrawtype wdrawcolor = Widgets.ComboBox() for name in self.drawcolors: wdrawcolor.append_text(name) index = self.drawcolors.index('lightblue') wdrawcolor.set_index(index) wdrawcolor.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawcolor = wdrawcolor wfill = Widgets.CheckBox("Fill") wfill.add_callback('activated', lambda w, tf: self.set_drawparams()) self.wfill = wfill walpha = Widgets.SpinBox(dtype=float) walpha.set_limits(0.0, 1.0, incr_value=0.1) walpha.set_value(1.0) walpha.set_decimals(2) walpha.add_callback('value-changed', lambda w, val: self.set_drawparams()) self.walpha = walpha wclear = Widgets.Button("Clear Canvas") wclear.add_callback('activated', lambda w: self.clear_canvas()) ## wopen = Widgets.Button("Open File") ## wopen.add_callback('activated', lambda w: self.open_file()) ## wquit = Widgets.Button("Quit") ## wquit.add_callback('activated', lambda w: self.quit()) hbox.add_widget(Widgets.Label(''), stretch=1) for w in (wdrawtype, wdrawcolor, wfill, Widgets.Label('Alpha:'), walpha, wclear): hbox.add_widget(w, stretch=0) vbox.add_widget(hbox, stretch=0) mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() hbox.set_spacing(4) btn1 = Widgets.RadioButton("Draw") btn1.set_state(mode == 'draw') btn1.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) btn1.set_tooltip("Choose this to draw on the canvas") hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Edit", group=btn1) btn2.set_state(mode == 'edit') btn2.add_callback('activated', lambda w, val: self.set_mode_cb('edit', val)) btn2.set_tooltip("Choose this to edit things on the canvas") hbox.add_widget(btn2) hbox.add_widget(Widgets.Label('Zoom sensitivity: ')) slider = Widgets.Slider(orientation='horizontal', dtype=float) slider.add_callback('value-changed', lambda w, val: self.adjust_scrolling_accel_cb(val)) slider.set_limits(0.0, 12.0, 0.005) slider.set_value(8.0) hbox.add_widget(slider, stretch=1) # hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) # need to put this in an hbox with an expanding label or the # browser wants to resize the canvas hbox = Widgets.HBox() hbox.add_widget(vbox, stretch=0) hbox.add_widget(Widgets.Label(''), stretch=1) self.top.set_widget(hbox)
def __init__(self, logger): super(FitsViewer, self).__init__() self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() fi = CanvasView(logger, render='widget') fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) #fi.enable_draw(False) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view #fi.add(canvas) private_canvas = fi.get_canvas() private_canvas.register_for_cursor_drawing(fi) private_canvas.add(canvas) canvas.ui_setActive(True) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() # add a color bar #fi.show_color_bar(True) fi.show_focus_indicator(True) # add little mode indicator that shows keyboard modal states fi.show_mode_indicator(True, corner='ur') w = fi.get_widget() w.resize(512, 512) vbox = QtGui.QVBoxLayout() vbox.setContentsMargins(QtCore.QMargins(2, 2, 2, 2)) vbox.setSpacing(1) vbox.addWidget(w, stretch=1) self.readout = QtGui.QLabel("") vbox.addWidget(self.readout, stretch=0, alignment=QtCore.Qt.AlignCenter) hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) wdrawtype = QtGui.QComboBox() for name in self.drawtypes: wdrawtype.addItem(name) index = self.drawtypes.index('rectangle') wdrawtype.setCurrentIndex(index) wdrawtype.activated.connect(self.set_drawparams) self.wdrawtype = wdrawtype wdrawcolor = QtGui.QComboBox() for name in self.drawcolors: wdrawcolor.addItem(name) index = self.drawcolors.index('lightblue') wdrawcolor.setCurrentIndex(index) wdrawcolor.activated.connect(self.set_drawparams) self.wdrawcolor = wdrawcolor wfill = QtGui.QCheckBox("Fill") wfill.stateChanged.connect(self.set_drawparams) self.wfill = wfill walpha = QtGui.QDoubleSpinBox() walpha.setRange(0.0, 1.0) walpha.setSingleStep(0.1) walpha.setValue(1.0) walpha.valueChanged.connect(self.set_drawparams) self.walpha = walpha wclear = QtGui.QPushButton("Clear Canvas") wclear.clicked.connect(self.clear_canvas) wopen = QtGui.QPushButton("Open File") wopen.clicked.connect(self.open_file) wquit = QtGui.QPushButton("Quit") wquit.clicked.connect(self.quit) hbox.addStretch(1) for w in (wopen, wdrawtype, wdrawcolor, wfill, QtGui.QLabel('Alpha:'), walpha, wclear, wquit): hbox.addWidget(w, stretch=0) hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) vw = QtGui.QWidget() self.setCentralWidget(vw) vw.setLayout(vbox)
def __init__(self, name, logger, gv, zv): self.logger = logger self.gv = gv self.zv = zv self.name = name self.app = gv.app ## self.drawcolors = colors.get_colors() self.dc = get_canvas_types() from ginga.gw import Widgets, Viewers self.top = self.app.make_window(name) self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) fi = Viewers.CanvasView(logger=logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.gw = fi bd = fi.get_bindings() bd.enable_all(True) bd.get_settings().set(scroll_zoom_direct_scale=True) # add a color bar fi.private_canvas.add(self.dc.ColorBar(side='bottom', offset=10)) # add little mode indicator that shows modal states in # lower left hand corner fi.private_canvas.add(self.dc.ModeIndicator(corner='ur', fontsize=10)) # little hack necessary to get correct operation of the mode indicator # in all circumstances bm = fi.get_bindmap() bm.add_callback('mode-set', lambda *args: fi.redraw(whence=3)) # add a new "zview" mode bm.add_mode('z', 'zview', mode_type='locked', msg=None) # zview had this kind of zooming function bm.map_event('zview', (), 'right', 'zoom_in') bm.map_event('zview', (), 'left', 'zoom_out') # canvas that we will draw on canvas = self.dc.DrawingCanvas() ## canvas.enable_draw(True) ## canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.setSurface(fi) self.canvas = canvas # add canvas to view fi.get_canvas().add(canvas) canvas.ui_setActive(True) fi.set_desired_size(512, 512) iw = Viewers.GingaViewerWidget(viewer=fi) self.viewer_w = iw vbox.add_widget(iw, stretch=1) bm.map_event('zview', (), 'p', 'radial-plot') fi.set_callback('keydown-radial-plot', self.gv.plot_cmd_cb, self.zv.do_radial_plot, "Radial Profile", self.viewer_w) bm.map_event('zview', (), 'e', 'contour-plot') fi.set_callback('keydown-contour-plot', self.gv.plot_cmd_cb, self.zv.do_contour_plot, "Contours", self.viewer_w) bm.map_event('zview', (), 'g', 'gaussians-plot') fi.set_callback('keydown-gaussians-plot', self.gv.plot_cmd_cb, self.zv.do_gaussians_plot, "FWHM", self.viewer_w) self.readout = Widgets.Label("") self.readout.set_color(bg='black', fg='lightgreen') vbox.add_widget(self.readout, stretch=0) self.top.set_widget(vbox)
def astropy_region_to_ginga_canvas_object(r): """ Convert an Astropy region object to a Ginga canvas object. Parameters ---------- r : subclass of `~regions.PixelRegion` The region object to be converted Returns ------- obj : subclass of `~ginga.canvas.CanvasObject` The corresponding Ginga canvas object """ if not HAVE_REGIONS: raise ValueError( "Please install the Astropy 'regions' package to use this function" ) dc = get_canvas_types() obj = None if isinstance(r, (regions.CirclePixelRegion, )): obj = dc.Circle(r.center.x, r.center.y, r.radius) elif isinstance(r, (regions.EllipsePixelRegion, )): obj = dc.Ellipse(r.center.x, r.center.y, r.width / 2, r.height / 2., rot_deg=r.angle.to(u.deg).value) # NOTE: need to check for Text before Point, because Text seems to be # a subclass of Point in regions elif isinstance(r, (regions.TextPixelRegion, )): # NOTE: font needed here, but will be overridden later if specified # in the region's visuals obj = dc.Text(r.center.x, r.center.y, text=r.text, font='sans', rot_deg=float(r.visual.get('textangle', 0.0))) elif isinstance(r, (regions.PointPixelRegion, )): # what is a reasonable default radius? radius = 15 style = r.visual.get('symbol', '*') style = pt_regions.get(style, 'square') obj = dc.Point(r.center.x, r.center.y, radius, style=style) elif isinstance(r, (regions.LinePixelRegion, )): obj = dc.Line(r.start.x, r.start.y, r.end.x, r.end.y) if r.meta.get('line', '0') == '1': obj.arrow = 'both' elif isinstance(r, (regions.RectanglePixelRegion, )): obj = dc.Box(r.center.x, r.center.y, r.width / 2, r.height / 2., rot_deg=r.angle.to(u.deg).value) elif isinstance(r, (regions.PolygonPixelRegion, )): points = np.array(r.vertices.xy).T obj = dc.Polygon(points) elif isinstance(r, (regions.CircleAnnulusPixelRegion, )): rin = r.inner_radius rout = r.outer_radius wd = rout - rin obj = dc.Annulus(r.center.x, r.center.y, rin, width=wd, atype='circle') elif isinstance(r, (regions.EllipseAnnulusPixelRegion, )): xwd = (r.outer_width - r.inner_width) / 2.0 ywd = (r.outer_height - r.inner_height) / 2.0 obj = dc.Annulus2R(r.center.x, r.center.y, r.inner_width / 2.0, r.inner_height / 2.0, xwidth=xwd, ywidth=ywd, atype='ellipse', rot_deg=r.angle.to(u.deg).value) elif isinstance(r, (regions.RectangleAnnulusPixelRegion, )): xwd = (r.outer_width - r.inner_width) / 2.0 ywd = (r.outer_height - r.inner_height) / 2.0 obj = dc.Annulus2R(r.center.x, r.center.y, r.inner_width / 2.0, r.inner_height / 2.0, xwidth=xwd, ywidth=ywd, atype='box', rot_deg=r.angle.to(u.deg).value) else: raise ValueError("Don't know how to convert this object") # Set visual styling attributes obj.color = r.visual.get('color', 'green') if hasattr(obj, 'font'): obj.font = r.visual.get('font', 'Sans') if 'fontsize' in r.visual: obj.fontsize = int(r.visual['fontsize']) if hasattr(obj, 'linewidth'): obj.linewidth = r.visual.get('linewidth', 1) if hasattr(obj, 'fill'): obj.fill = r.visual.get('fill', False) # Limited support for other metadata obj.editable = r.meta.get('edit', True) obj.set_data(name=r.meta.get('name', None)) # needed for compound objects like annulus obj.sync_state() return obj
def ginga_canvas_object_to_astropy_region(obj): """ Convert a Ginga canvas object to an AstroPy region object. Parameters ---------- obj : subclass of `~ginga.canvas.CanvasObject` The Ginga canvas object to be converted Returns ------- r : subclass of `~regions.PixelRegion` The corresponding AstroPy region object """ if not HAVE_REGIONS: raise ValueError( "Please install the Astropy 'regions' package to use this function" ) dc = get_canvas_types() r = None if isinstance(obj, (dc.Circle, )): r = regions.CirclePixelRegion(center=regions.PixCoord(x=obj.x, y=obj.y), radius=obj.radius) elif isinstance(obj, (dc.Ellipse, )): r = regions.EllipsePixelRegion(center=regions.PixCoord(x=obj.x, y=obj.y), width=obj.xradius * 2, height=obj.yradius * 2, angle=obj.rot_deg * u.deg) elif isinstance(obj, (dc.Text, )): r = regions.TextPixelRegion(center=regions.PixCoord(x=obj.x, y=obj.y), text=obj.text) r.visual['textangle'] = str(obj.rot_deg) elif isinstance(obj, (dc.Point, )): r = regions.PointPixelRegion(center=regions.PixCoord(x=obj.x, y=obj.y)) style = pt_ginga.get(obj.style, '*') r.visual['symbol'] = style elif isinstance(obj, (dc.Line, )): r = regions.LinePixelRegion(start=regions.PixCoord(x=obj.x1, y=obj.y1), end=regions.PixCoord(x=obj.x2, y=obj.y2)) elif isinstance(obj, (dc.Box, )): r = regions.RectanglePixelRegion(center=regions.PixCoord(x=obj.x, y=obj.y), width=obj.xradius * 2, height=obj.yradius * 2, angle=obj.rot_deg * u.deg) elif isinstance(obj, (dc.Polygon, )): x, y = np.asarray(obj.points).T r = regions.PolygonPixelRegion(vertices=regions.PixCoord(x=x, y=y)) elif isinstance(obj, (dc.Annulus, )) and obj.atype == 'circle': rin = obj.radius rout = rin + obj.width r = regions.CircleAnnulusPixelRegion(center=regions.PixCoord(x=obj.x, y=obj.y), inner_radius=rin, outer_radius=rout) elif isinstance(obj, (dc.Annulus2R, )) and obj.atype == 'ellipse': r = regions.EllipseAnnulusPixelRegion( center=regions.PixCoord(x=obj.x, y=obj.y), inner_width=obj.xradius * 2, inner_height=obj.yradius * 2, outer_width=obj.xradius * 2 + obj.xwidth * 2, outer_height=obj.yradius * 2 + obj.ywidth * 2, angle=obj.rot_deg * u.deg) elif isinstance(obj, (dc.Annulus2R, )) and obj.atype == 'box': r = regions.RectangleAnnulusPixelRegion( center=regions.PixCoord(x=obj.x, y=obj.y), inner_width=obj.xradius * 2, inner_height=obj.yradius * 2, outer_width=obj.xradius * 2 + obj.xwidth * 2, outer_height=obj.yradius * 2 + obj.ywidth * 2, angle=obj.rot_deg * u.deg) else: raise ValueError("Don't know how to convert this object") # Set visual styling attributes r.visual['color'] = obj.color if hasattr(obj, 'font'): r.visual['font'] = obj.font if obj.fontsize is not None: r.visual['fontsize'] = str(obj.fontsize) if hasattr(obj, 'linewidth'): r.visual['linewidth'] = obj.linewidth if hasattr(obj, 'fill'): r.visual['fill'] = obj.fill = r.visual.get('fill', False) # Limited support for other metadata r.meta['edit'] = 1 if obj.editable else 0 meta = obj.get_data() if meta is not None and meta.get('name', None) is not None: r.meta['name'] = meta.get('name') return r
def __init__(self, logger, window, viewer_class=None, width=512, height=512): if viewer_class is None: viewer_class = EnhancedCanvasView self.logger = logger self.url = window.url self.dc = get_canvas_types() self.pixel_base = 1.0 self.top = window self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) # load binding preferences if available cfgfile = os.path.join(ginga_home, "ipg_bindings.cfg") bindprefs = SettingGroup(name='bindings', logger=logger, preffile=cfgfile) bindprefs.load(onError='silent') bd = ImageViewBindings(logger, settings=bindprefs) fi = viewer_class(logger, bindings=bd) fi.url = self.url fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.1) fi.enable_autozoom('on') #fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi fi.ipg_parent = self bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.set_surface(fi) self.canvas = canvas # add canvas to view private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.ui_setActive(True) fi.set_canvas(canvas) fi.set_desired_size(width, height) # force allocation of a surface--may be resized later fi.configure_surface(width, height) # add little mode indicator that shows modal states in # the corner fi.show_mode_indicator(True) w = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(w, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.add_widget(Widgets.Label('Zoom sensitivity: ')) slider = Widgets.Slider(orientation='horizontal', dtype=float) slider.add_callback('value-changed', lambda w, val: self.adjust_scrolling_accel_cb(val)) slider.set_limits(1.0, 9.5, 0.1) val = 4.0 slider.set_value(val) self.adjust_scrolling_accel_cb(val) hbox.add_widget(slider, stretch=1) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) # need to put this in an hbox with an expanding label or the # browser wants to resize the canvas, distorting it hbox = Widgets.HBox() hbox.add_widget(vbox, stretch=0) hbox.add_widget(Widgets.Label(''), stretch=1) self.top.set_widget(hbox)
def __init__(self, logger): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() from ginga.gw import Widgets, Viewers self.app = Widgets.Application(logger=logger) #self.app.add_callback('shutdown', self.quit) self.top = self.app.make_window("Ginga shared canvas example") self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) hbox = Widgets.HBox() hbox.set_border_width(2) hbox.set_spacing(4) v1 = Viewers.CanvasView(logger) v1.enable_autocuts('on') v1.set_autocut_params('zscale') v1.enable_autozoom('on') v1.set_zoom_algorithm('rate') v1.set_zoomrate(1.4) v1.show_pan_mark(True) v1.set_callback('drag-drop', self.drop_file) v1.set_callback('none-move', self.motion) v1.set_bg(0.2, 0.2, 0.2) v1.ui_set_active(True) v1.set_name('tweedledee') self.viewer1 = v1 self._mi1 = ModeIndicator(v1) bd = v1.get_bindings() bd.enable_all(True) # shared canvas between the two viewers shcanvas = self.dc.DrawingCanvas() # Tell viewer1 to use this canvas v1.set_canvas(shcanvas) v1.set_desired_size(300, 300) iw = Viewers.GingaViewerWidget(viewer=v1) hbox.add_widget(iw, stretch=1) # Add a second viewer viewing the same canvas v2 = Viewers.CanvasView(logger) v2.enable_autocuts('on') v2.set_autocut_params('zscale') v2.enable_autozoom('on') v2.set_zoom_algorithm('rate') v2.set_zoomrate(1.4) v2.show_pan_mark(True) v2.set_callback('drag-drop', self.drop_file) v2.set_callback('none-move', self.motion) v2.set_bg(0.2, 0.2, 0.2) v2.ui_set_active(True) v1.set_name('tweedledum') self.viewer2 = v2 self._mi2 = ModeIndicator(v2) # Tell viewer2 to use this same canvas v2.set_canvas(shcanvas) bd = v2.get_bindings() bd.enable_all(True) v2.set_desired_size(300, 300) iw = Viewers.GingaViewerWidget(viewer=v2) hbox.add_widget(iw, stretch=1) # 2nd canvas as a subcanvas of the shared canvas canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.register_for_cursor_drawing(v1) canvas.register_for_cursor_drawing(v2) canvas.set_drawtype('rectangle', color='lightblue') self.canvas = canvas shcanvas.add(self.canvas) shcanvas.ui_set_active(True) canvas.ui_set_active(True) canvas.set_surface(v1) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() vbox.add_widget(hbox, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.set_border_width(2) wdrawtype = Widgets.ComboBox() for name in self.drawtypes: wdrawtype.append_text(name) index = self.drawtypes.index('rectangle') wdrawtype.set_index(index) wdrawtype.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawtype = wdrawtype wdrawcolor = Widgets.ComboBox() for name in self.drawcolors: wdrawcolor.append_text(name) index = self.drawcolors.index('lightblue') wdrawcolor.set_index(index) wdrawcolor.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawcolor = wdrawcolor wfill = Widgets.CheckBox("Fill") wfill.add_callback('activated', lambda w, tf: self.set_drawparams()) self.wfill = wfill walpha = Widgets.SpinBox(dtype=float) walpha.set_limits(0.0, 1.0, incr_value=0.1) walpha.set_value(1.0) walpha.set_decimals(2) walpha.add_callback('value-changed', lambda w, val: self.set_drawparams()) self.walpha = walpha wclear = Widgets.Button("Clear Canvas") wclear.add_callback('activated', lambda w: self.clear_canvas()) wopen = Widgets.Button("Open File") wopen.add_callback('activated', lambda w: self.open_file()) wquit = Widgets.Button("Quit") wquit.add_callback('activated', lambda w: self.quit()) hbox.add_widget(Widgets.Label(''), stretch=1) for w in (wopen, wdrawtype, wdrawcolor, wfill, Widgets.Label('Alpha:'), walpha, wclear, wquit): hbox.add_widget(w, stretch=0) vbox.add_widget(hbox, stretch=0) mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() btn1 = Widgets.RadioButton("Draw") btn1.set_state(mode == 'draw') btn1.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) btn1.set_tooltip("Choose this to draw on the canvas") hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Edit", group=btn1) btn2.set_state(mode == 'edit') btn2.add_callback('activated', lambda w, val: self.set_mode_cb('edit', val)) btn2.set_tooltip("Choose this to edit things on the canvas") hbox.add_widget(btn2) ## btn3 = Widgets.CheckBox("I'm using a trackpad") ## btn3.add_callback('activated', lambda w, tf: self.use_trackpad_cb(tf)) ## hbox.add_widget(btn3) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) self.top.set_widget(vbox)
def __init__(self, logger): super(FitsViewer, self).__init__() self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() fig = Figure() w = FigureCanvas(fig) fi = ImageViewCanvas(logger=logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.enable_draw(False) fi.set_callback('drag-drop', self.drop_file_cb) fi.set_callback('cursor-changed', self.cursor_cb) fi.set_bg(0.2, 0.2, 0.2) fi.ui_set_active(True) self.fitsimage = fi fi.set_figure(fig) bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view fi.get_canvas().add(canvas) canvas.ui_set_active(True) canvas.register_for_cursor_drawing(fi) canvas.add_callback('draw-event', self.draw_cb) w.resize(512, 512) vbox = QtGui.QVBoxLayout() vbox.setContentsMargins(QtCore.QMargins(2, 2, 2, 2)) vbox.setSpacing(1) vbox.addWidget(w, stretch=1) self.readout = QtGui.QLabel("") vbox.addWidget(self.readout, stretch=0, alignment=QtCore.Qt.AlignCenter) hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) wdrawtype = QtGui.QComboBox() self.drawtypes = fi.get_drawtypes() for name in self.drawtypes: wdrawtype.addItem(name) index = self.drawtypes.index('rectangle') wdrawtype.setCurrentIndex(index) wdrawtype.activated.connect(self.set_drawparams) self.wdrawtype = wdrawtype wdrawcolor = QtGui.QComboBox() for name in self.drawcolors: wdrawcolor.addItem(name) index = self.drawcolors.index('lightblue') wdrawcolor.setCurrentIndex(index) wdrawcolor.activated.connect(self.set_drawparams) self.wdrawcolor = wdrawcolor wfill = QtGui.QCheckBox("Fill") wfill.stateChanged.connect(self.set_drawparams) self.wfill = wfill walpha = QtGui.QDoubleSpinBox() walpha.setRange(0.0, 1.0) walpha.setSingleStep(0.1) walpha.setValue(1.0) walpha.valueChanged.connect(self.set_drawparams) self.walpha = walpha wclear = QtGui.QPushButton("Clear Canvas") wclear.clicked.connect(self.clear_canvas) wopen = QtGui.QPushButton("Open File") wopen.clicked.connect(self.open_file) wquit = QtGui.QPushButton("Quit") wquit.clicked.connect(self.close) hbox.addStretch(1) for w in (wopen, wdrawtype, wdrawcolor, wfill, QtGui.QLabel('Alpha:'), walpha, wclear, wquit): hbox.addWidget(w, stretch=0) hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) mode = self.canvas.get_draw_mode() hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) btn1 = QtGui.QRadioButton("Draw") btn1.setChecked(mode == 'draw') btn1.toggled.connect(lambda val: self.set_mode_cb('draw', val)) btn1.setToolTip("Choose this to draw on the canvas") hbox.addWidget(btn1) btn2 = QtGui.QRadioButton("Edit") btn2.setChecked(mode == 'edit') btn2.toggled.connect(lambda val: self.set_mode_cb('edit', val)) btn2.setToolTip("Choose this to edit things on the canvas") hbox.addWidget(btn2) btn3 = QtGui.QRadioButton("Pick") btn3.setChecked(mode == 'pick') btn3.toggled.connect(lambda val: self.set_mode_cb('pick', val)) btn3.setToolTip("Choose this to pick things on the canvas") hbox.addWidget(btn3) hbox.addWidget(QtGui.QLabel(''), stretch=1) hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) vw = QtGui.QWidget() self.setCentralWidget(vw) vw.setLayout(vbox)
def __init__(self, logger, window, viewer_class=None): if viewer_class is None: viewer_class = EnhancedCanvasView self.logger = logger self.url = window.url self.drawcolors = colors.get_colors() self.dc = get_canvas_types() self.top = window self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) fi = viewer_class(logger) fi.url = self.url fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # so trackpad scrolling can be adjusted settings = bd.get_settings() settings.set(scroll_zoom_direct_scale=True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() #canvas.enable_draw(True) #canvas.enable_edit(True) #canvas.set_drawtype('rectangle', color='lightblue') canvas.setSurface(fi) self.canvas = canvas # add canvas to view private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.ui_setActive(True) #canvas.register_for_cursor_drawing(fi) fi.set_canvas(canvas) ## self.drawtypes = canvas.get_drawtypes() ## self.drawtypes.sort() # add a color bar private_canvas.add(self.dc.ColorBar(side='bottom', offset=10)) # add little mode indicator that shows modal states in # the corner private_canvas.add(self.dc.ModeIndicator(corner='ur', fontsize=14)) # little hack necessary to get correct operation of the mode indicator # in all circumstances bm = fi.get_bindmap() bm.add_callback('mode-set', lambda *args: fi.redraw(whence=3)) fi.set_desired_size(512, 512) w = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(w, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() btn3 = Widgets.CheckBox("I'm using a trackpad") btn3.add_callback('activated', lambda w, tf: self.use_trackpad_cb(tf)) hbox.add_widget(btn3) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) # need to put this in an hbox with an expanding label or the # browser wants to resize the canvas, distorting it hbox = Widgets.HBox() hbox.add_widget(vbox, stretch=0) hbox.add_widget(Widgets.Label(''), stretch=1) self.top.set_widget(hbox)
def __init__(self, logger, window, viewer_class=None): if viewer_class is None: viewer_class = EnhancedCanvasView self.logger = logger self.url = window.url self.drawcolors = colors.get_colors() self.dc = get_canvas_types() self.top = window self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) fi = viewer_class(logger) fi.url = self.url fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # so trackpad scrolling can be adjusted settings = bd.get_settings() settings.set(scroll_zoom_direct_scale=True) # so trackpad scrolling can be adjusted settings = bd.get_settings() settings.set(scroll_zoom_direct_scale=True, scroll_zoom_acceleration=0.07) # canvas that we will draw on canvas = self.dc.DrawingCanvas() #canvas.enable_draw(True) #canvas.enable_edit(True) #canvas.set_drawtype('rectangle', color='lightblue') canvas.setSurface(fi) self.canvas = canvas # add canvas to view private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.ui_setActive(True) #canvas.register_for_cursor_drawing(fi) fi.set_canvas(canvas) ## self.drawtypes = canvas.get_drawtypes() ## self.drawtypes.sort() # add a color bar private_canvas.add(self.dc.ColorBar(side='bottom', offset=10)) # add little mode indicator that shows modal states in # the corner private_canvas.add(self.dc.ModeIndicator(corner='ur', fontsize=14)) # little hack necessary to get correct operation of the mode indicator # in all circumstances bm = fi.get_bindmap() bm.add_callback('mode-set', lambda *args: fi.redraw(whence=3)) fi.set_desired_size(512, 512) w = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(w, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.add_widget(Widgets.Label('Zoom sensitivity: ')) slider = Widgets.Slider(orientation='horizontal', dtype=float) slider.add_callback('value-changed', lambda w, val: self.adjust_scrolling_accel_cb(val)) slider.set_limits(0.0, 12.0, 0.005) slider.set_value(8.0) hbox.add_widget(slider, stretch=1) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) # need to put this in an hbox with an expanding label or the # browser wants to resize the canvas, distorting it hbox = Widgets.HBox() hbox.add_widget(vbox, stretch=0) hbox.add_widget(Widgets.Label(''), stretch=1) self.top.set_widget(hbox)
def __init__(self, logger): super(FitsViewer, self).__init__() self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() #fi = ImageViewCanvas(logger, render='widget') fi = CanvasView(logger, render='widget') fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) #fi.enable_draw(False) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view #fi.add(canvas) private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.ui_setActive(True) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() # add a color bar private_canvas.add(self.dc.ColorBar(side='bottom', offset=10)) # add little mode indicator that shows modal states in # the corner private_canvas.add(self.dc.ModeIndicator(corner='ur')) # little hack necessary to get correct operation of the mode indicator # in all circumstances bm = fi.get_bindmap() bm.add_callback('mode-set', lambda *args: fi.redraw(whence=3)) w = fi.get_widget() w.resize(512, 512) vbox = QtGui.QVBoxLayout() vbox.setContentsMargins(QtCore.QMargins(2, 2, 2, 2)) vbox.setSpacing(1) vbox.addWidget(w, stretch=1) self.readout = QtGui.QLabel("") vbox.addWidget(self.readout, stretch=0, alignment=QtCore.Qt.AlignCenter) hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) wdrawtype = QtGui.QComboBox() for name in self.drawtypes: wdrawtype.addItem(name) index = self.drawtypes.index('rectangle') wdrawtype.setCurrentIndex(index) wdrawtype.activated.connect(self.set_drawparams) self.wdrawtype = wdrawtype wdrawcolor = QtGui.QComboBox() for name in self.drawcolors: wdrawcolor.addItem(name) index = self.drawcolors.index('lightblue') wdrawcolor.setCurrentIndex(index) wdrawcolor.activated.connect(self.set_drawparams) self.wdrawcolor = wdrawcolor wfill = QtGui.QCheckBox("Fill") wfill.stateChanged.connect(self.set_drawparams) self.wfill = wfill walpha = QtGui.QDoubleSpinBox() walpha.setRange(0.0, 1.0) walpha.setSingleStep(0.1) walpha.setValue(1.0) walpha.valueChanged.connect(self.set_drawparams) self.walpha = walpha wclear = QtGui.QPushButton("Clear Canvas") wclear.clicked.connect(self.clear_canvas) wopen = QtGui.QPushButton("Open File") wopen.clicked.connect(self.open_file) wquit = QtGui.QPushButton("Quit") wquit.clicked.connect(self.quit) hbox.addStretch(1) for w in (wopen, wdrawtype, wdrawcolor, wfill, QtGui.QLabel('Alpha:'), walpha, wclear, wquit): hbox.addWidget(w, stretch=0) hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) vw = QtGui.QWidget() self.setCentralWidget(vw) vw.setLayout(vbox)
def __init__(self, logger): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() from ginga.gw import Widgets, Viewers, GwHelp self.app = Widgets.Application(logger=logger) self.app.add_callback('shutdown', self.quit) self.top = self.app.make_window("Ginga example2") self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) fi = Viewers.CanvasView(logger=logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # add a color bar fi.private_canvas.add(self.dc.ColorBar(side='bottom', offset=10)) # add little mode indicator that shows modal states in # lower left hand corner fi.private_canvas.add(self.dc.ModeIndicator(corner='ur', fontsize=14)) # little hack necessary to get correct operation of the mode indicator # in all circumstances bm = fi.get_bindmap() bm.add_callback('mode-set', lambda *args: fi.redraw(whence=3)) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue', coord='data') canvas.setSurface(fi) self.canvas = canvas # add canvas to view fi.get_canvas().add(canvas) canvas.ui_setActive(True) canvas.register_for_cursor_drawing(fi) canvas.add_callback('draw-event', self.draw_cb) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() fi.set_desired_size(512, 512) iw = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(iw, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.set_border_width(2) wdrawtype = Widgets.ComboBox() for name in self.drawtypes: wdrawtype.append_text(name) index = self.drawtypes.index('rectangle') wdrawtype.set_index(index) wdrawtype.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawtype = wdrawtype wdrawcolor = Widgets.ComboBox() for name in self.drawcolors: wdrawcolor.append_text(name) index = self.drawcolors.index('lightblue') wdrawcolor.set_index(index) wdrawcolor.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawcolor = wdrawcolor wfill = Widgets.CheckBox("Fill") wfill.add_callback('activated', lambda w, tf: self.set_drawparams()) self.wfill = wfill walpha = Widgets.SpinBox(dtype=float) walpha.set_limits(0.0, 1.0, incr_value=0.1) walpha.set_value(1.0) walpha.set_decimals(2) walpha.add_callback('value-changed', lambda w, val: self.set_drawparams()) self.walpha = walpha wclear = Widgets.Button("Clear Canvas") wclear.add_callback('activated', lambda w: self.clear_canvas()) wopen = Widgets.Button("Open File") wopen.add_callback('activated', lambda w: self.open_file()) wquit = Widgets.Button("Quit") wquit.add_callback('activated', lambda w: self.quit()) hbox.add_widget(Widgets.Label(''), stretch=1) for w in (wopen, wdrawtype, wdrawcolor, wfill, Widgets.Label('Alpha:'), walpha, wclear, wquit): hbox.add_widget(w, stretch=0) vbox.add_widget(hbox, stretch=0) mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() btn1 = Widgets.RadioButton("Draw") btn1.set_state(mode == 'draw') btn1.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) btn1.set_tooltip("Choose this to draw on the canvas") hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Edit", group=btn1) btn2.set_state(mode == 'edit') btn2.add_callback('activated', lambda w, val: self.set_mode_cb('edit', val)) btn2.set_tooltip("Choose this to edit things on the canvas") hbox.add_widget(btn2) btn3 = Widgets.RadioButton("Pick", group=btn1) btn3.set_state(mode == 'pick') btn3.add_callback('activated', lambda w, val: self.set_mode_cb('pick', val)) btn3.set_tooltip("Choose this to pick things on the canvas") hbox.add_widget(btn3) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) self.top.set_widget(vbox) self.fs = None if hasattr(GwHelp, 'FileSelection'): self.fs = GwHelp.FileSelection(self.top.get_widget())
def __init__(self, logger): super(FitsViewer, self).__init__() self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() fi = CanvasView(logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) #fi.enable_draw(False) fi.set_callback('drag-drop', self.drop_file_cb) fi.set_callback('none-move', self.cursor_cb) fi.ui_set_active(True) self.fitsimage = fi # quick hack to get 'u' to invoke hidden camera mode bm = fi.get_bindmap() bm.mode_map['u'] = bm.mode_map['mode_camera'] bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view #fi.add(canvas) private_canvas = fi.get_canvas() private_canvas.register_for_cursor_drawing(fi) private_canvas.add(canvas) canvas.ui_set_active(True) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() # add a color bar #fi.show_color_bar(True) #fi.show_focus_indicator(True) # add little mode indicator that shows keyboard modal states #fi.show_mode_indicator(True, corner='ur') w = fi.get_widget() w.resize(512, 512) vbox = QtGui.QVBoxLayout() vbox.setContentsMargins(QtCore.QMargins(2, 2, 2, 2)) vbox.setSpacing(1) vbox.addWidget(w, stretch=1) self.readout = QtGui.QLabel("") vbox.addWidget(self.readout, stretch=0, alignment=QtCore.Qt.AlignCenter) hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) wdrawtype = QtGui.QComboBox() for name in self.drawtypes: wdrawtype.addItem(name) index = self.drawtypes.index('rectangle') wdrawtype.setCurrentIndex(index) wdrawtype.activated.connect(self.set_drawparams) self.wdrawtype = wdrawtype wdrawcolor = QtGui.QComboBox() for name in self.drawcolors: wdrawcolor.addItem(name) index = self.drawcolors.index('lightblue') wdrawcolor.setCurrentIndex(index) wdrawcolor.activated.connect(self.set_drawparams) self.wdrawcolor = wdrawcolor wfill = QtGui.QCheckBox("Fill") wfill.stateChanged.connect(self.set_drawparams) self.wfill = wfill walpha = QtGui.QDoubleSpinBox() walpha.setRange(0.0, 1.0) walpha.setSingleStep(0.1) walpha.setValue(1.0) walpha.valueChanged.connect(self.set_drawparams) self.walpha = walpha wclear = QtGui.QPushButton("Clear Canvas") wclear.clicked.connect(self.clear_canvas) wopen = QtGui.QPushButton("Open File") wopen.clicked.connect(self.open_file) wquit = QtGui.QPushButton("Quit") wquit.clicked.connect(self.quit) hbox.addStretch(1) for w in (wopen, wdrawtype, wdrawcolor, wfill, QtGui.QLabel('Alpha:'), walpha, wclear, wquit): hbox.addWidget(w, stretch=0) hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) vw = QtGui.QWidget() self.setCentralWidget(vw) vw.setLayout(vbox)
def __init__(self, logger): super(FitsViewer, self).__init__() self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() fi = CanvasView(logger, render='widget') fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) #fi.show_pan_mark(True) #fi.enable_draw(False) fi.add_callback('drag-drop', self.drop_file_cb) fi.add_callback('cursor-changed', self.cursor_cb) fi.set_bg(0.2, 0.2, 0.2) fi.ui_set_active(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view #fi.add(canvas) private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.register_for_cursor_drawing(fi) canvas.add_callback('draw-event', self.draw_cb) canvas.set_draw_mode('draw') canvas.ui_set_active(True) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() # add a color bar #fi.show_color_bar(True) fi.show_focus_indicator(True) # add little mode indicator that shows keyboard modal states fi.show_mode_indicator(True, corner='ur') w = fi.get_widget() w.resize(512, 512) vbox = QtGui.QVBoxLayout() vbox.setContentsMargins(QtCore.QMargins(2, 2, 2, 2)) vbox.setSpacing(1) vbox.addWidget(w, stretch=1) self.readout = QtGui.QLabel("") vbox.addWidget(self.readout, stretch=0, alignment=QtCore.Qt.AlignCenter) hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) wdrawtype = QtGui.QComboBox() for name in self.drawtypes: wdrawtype.addItem(name) index = self.drawtypes.index('rectangle') wdrawtype.setCurrentIndex(index) wdrawtype.activated.connect(self.set_drawparams) self.wdrawtype = wdrawtype wdrawcolor = QtGui.QComboBox() for name in self.drawcolors: wdrawcolor.addItem(name) index = self.drawcolors.index('lightblue') wdrawcolor.setCurrentIndex(index) wdrawcolor.activated.connect(self.set_drawparams) self.wdrawcolor = wdrawcolor wfill = QtGui.QCheckBox("Fill") wfill.stateChanged.connect(self.set_drawparams) self.wfill = wfill walpha = QtGui.QDoubleSpinBox() walpha.setRange(0.0, 1.0) walpha.setSingleStep(0.1) walpha.setValue(1.0) walpha.valueChanged.connect(self.set_drawparams) self.walpha = walpha wclear = QtGui.QPushButton("Clear Canvas") wclear.clicked.connect(self.clear_canvas) wopen = QtGui.QPushButton("Open File") wopen.clicked.connect(self.open_file) wquit = QtGui.QPushButton("Quit") wquit.clicked.connect(self.quit) hbox.addStretch(1) for w in (wopen, wdrawtype, wdrawcolor, wfill, QtGui.QLabel('Alpha:'), walpha, wclear, wquit): hbox.addWidget(w, stretch=0) hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) mode = self.canvas.get_draw_mode() hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) btn1 = QtGui.QRadioButton("Draw") btn1.setChecked(mode == 'draw') btn1.toggled.connect(lambda val: self.set_mode_cb('draw', val)) btn1.setToolTip("Choose this to draw on the canvas") hbox.addWidget(btn1) btn2 = QtGui.QRadioButton("Edit") btn2.setChecked(mode == 'edit') btn2.toggled.connect(lambda val: self.set_mode_cb('edit', val)) btn2.setToolTip("Choose this to edit things on the canvas") hbox.addWidget(btn2) btn3 = QtGui.QRadioButton("Pick") btn3.setChecked(mode == 'pick') btn3.toggled.connect(lambda val: self.set_mode_cb('pick', val)) btn3.setToolTip("Choose this to pick things on the canvas") hbox.addWidget(btn3) hbox.addWidget(QtGui.QLabel(''), stretch=1) hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) vw = QtGui.QWidget() self.setCentralWidget(vw) vw.setLayout(vbox)
def __init__(self, logger, window): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() self.top = window self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) fi = Viewers.CanvasView(logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # so trackpad scrolling can be adjusted settings = bd.get_settings() settings.set(scroll_zoom_direct_scale=True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.setSurface(fi) self.canvas = canvas # add canvas to view private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.ui_setActive(True) canvas.register_for_cursor_drawing(fi) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() # add a color bar private_canvas.add(self.dc.ColorBar(side='bottom', offset=10)) # add little mode indicator that shows modal states in # the corner private_canvas.add(self.dc.ModeIndicator(corner='ur', fontsize=14)) # little hack necessary to get correct operation of the mode indicator # in all circumstances bm = fi.get_bindmap() bm.add_callback('mode-set', lambda *args: fi.redraw(whence=3)) fi.set_desired_size(512, 512) w = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(w, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.set_border_width(2) wdrawtype = Widgets.ComboBox() for name in self.drawtypes: wdrawtype.append_text(name) index = self.drawtypes.index('rectangle') wdrawtype.set_index(index) wdrawtype.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawtype = wdrawtype wdrawcolor = Widgets.ComboBox() for name in self.drawcolors: wdrawcolor.append_text(name) index = self.drawcolors.index('lightblue') wdrawcolor.set_index(index) wdrawcolor.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawcolor = wdrawcolor wfill = Widgets.CheckBox("Fill") wfill.add_callback('activated', lambda w, tf: self.set_drawparams()) self.wfill = wfill walpha = Widgets.SpinBox(dtype=float) walpha.set_limits(0.0, 1.0, incr_value=0.1) walpha.set_value(1.0) walpha.set_decimals(2) walpha.add_callback('value-changed', lambda w, val: self.set_drawparams()) self.walpha = walpha wclear = Widgets.Button("Clear Canvas") wclear.add_callback('activated', lambda w: self.clear_canvas()) ## wopen = Widgets.Button("Open File") ## wopen.add_callback('activated', lambda w: self.open_file()) ## wquit = Widgets.Button("Quit") ## wquit.add_callback('activated', lambda w: self.quit()) hbox.add_widget(Widgets.Label(''), stretch=1) for w in (wdrawtype, wdrawcolor, wfill, Widgets.Label('Alpha:'), walpha, wclear): hbox.add_widget(w, stretch=0) vbox.add_widget(hbox, stretch=0) mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() btn1 = Widgets.RadioButton("Draw") btn1.set_state(mode == 'draw') btn1.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) btn1.set_tooltip("Choose this to draw on the canvas") hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Edit", group=btn1) btn2.set_state(mode == 'edit') btn2.add_callback('activated', lambda w, val: self.set_mode_cb('edit', val)) btn2.set_tooltip("Choose this to edit things on the canvas") hbox.add_widget(btn2) btn3 = Widgets.CheckBox("I'm using a trackpad") btn3.add_callback('activated', lambda w, tf: self.use_trackpad_cb(tf)) hbox.add_widget(btn3) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) # need to put this in an hbox with an expanding label or the # browser wants to resize the canvas hbox = Widgets.HBox() hbox.add_widget(vbox, stretch=0) hbox.add_widget(Widgets.Label(''), stretch=1) self.top.set_widget(hbox)
def __init__(self, logger): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() from ginga.gw import Widgets, Viewers self.app = Widgets.Application() self.app.add_callback('shutdown', self.quit) self.top = self.app.window("Ginga example2") self.top.add_callback('closed', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) hbox = Widgets.HBox() hbox.set_border_width(2) hbox.set_spacing(4) v1 = Viewers.CanvasView(logger) v1.enable_autocuts('on') v1.set_autocut_params('zscale') v1.enable_autozoom('on') v1.set_zoom_algorithm('rate') v1.set_zoomrate(1.4) v1.show_pan_mark(True) v1.set_callback('drag-drop', self.drop_file) v1.set_callback('none-move', self.motion) v1.set_bg(0.2, 0.2, 0.2) v1.ui_setActive(True) self.viewer1 = v1 self._mi1 = ModeIndicator(v1) bd = v1.get_bindings() bd.enable_all(True) # shared canvas between the two viewers canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') self.canvas = canvas # Tell viewer1 to use this canvas v1.set_canvas(canvas) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() hbox.add_widget(v1, stretch=1) # Add a second viewer viewing the same canvas v2 = Viewers.CanvasView(logger) v2.enable_autocuts('on') v2.set_autocut_params('zscale') v2.enable_autozoom('on') v2.set_zoom_algorithm('rate') v2.set_zoomrate(1.4) v2.show_pan_mark(True) v2.set_callback('drag-drop', self.drop_file) v2.set_callback('none-move', self.motion) v2.set_bg(0.2, 0.2, 0.2) v2.ui_setActive(True) self.viewer2 = v2 self._mi2 = ModeIndicator(v2) # Tell viewer2 to use this same canvas v2.set_canvas(canvas) bd = v2.get_bindings() bd.enable_all(True) hbox.add_widget(v2, stretch=1) vbox.add_widget(hbox, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.set_border_width(2) wdrawtype = Widgets.ComboBox() for name in self.drawtypes: wdrawtype.append_text(name) index = self.drawtypes.index('rectangle') wdrawtype.set_index(index) wdrawtype.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawtype = wdrawtype wdrawcolor = Widgets.ComboBox() for name in self.drawcolors: wdrawcolor.append_text(name) index = self.drawcolors.index('lightblue') wdrawcolor.set_index(index) wdrawcolor.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawcolor = wdrawcolor wfill = Widgets.CheckBox("Fill") wfill.add_callback('activated', lambda w, tf: self.set_drawparams()) self.wfill = wfill walpha = Widgets.SpinBox(dtype=float) walpha.set_limits(0.0, 1.0, incr_value=0.1) walpha.set_value(1.0) walpha.set_decimals(2) walpha.add_callback('value-changed', lambda w, val: self.set_drawparams()) self.walpha = walpha wclear = Widgets.Button("Clear Canvas") wclear.add_callback('activated', lambda w: self.clear_canvas()) wopen = Widgets.Button("Open File") wopen.add_callback('activated', lambda w: self.open_file()) wquit = Widgets.Button("Quit") wquit.add_callback('activated', lambda w: self.quit()) hbox.add_widget(Widgets.Label(''), stretch=1) for w in (wopen, wdrawtype, wdrawcolor, wfill, Widgets.Label('Alpha:'), walpha, wclear, wquit): hbox.add_widget(w, stretch=0) vbox.add_widget(hbox, stretch=0) self.top.set_widget(vbox)
def __init__(self, logger): super(FitsViewer, self).__init__() self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() self.set_medfilt(0) self.set_c2c(0) # create the ginga viewer and configure it fi = CanvasView(self.logger, render='widget') fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_callback('drag-drop', self.drop_file) fi.add_callback('cursor-changed', self.cursor_cb) fi.add_callback('cursor-down', self.click_cb) fi.set_bg(0.2, 0.2, 0.2) fi.ui_set_active(True) self.fitsimage = fi # enable some user interaction bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() # canvas.enable_draw(True) # canvas.enable_edit(True) # canvas.set_drawtype('circle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view #fi.add(canvas) private_canvas = fi.get_canvas() private_canvas.add(canvas) # canvas.register_for_cursor_drawing(fi) # canvas.add_callback('draw-event', self.draw_cb) # canvas.set_draw_mode('draw') canvas.ui_set_active(True) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() w = fi.get_widget() w.resize(1000, 1000) # --------------------------------------------------------------------- # add scrollbar interface around this viewer si = ScrolledView(fi) vbox = QtGui.QVBoxLayout() vbox.setContentsMargins(QtCore.QMargins(2, 2, 2, 2)) vbox.setSpacing(1) vbox.addWidget(si, stretch=1) # --------------------------------------------------------------------- # add live cursor readout self.readout = QtGui.QLabel("") vbox.addWidget(self.readout, stretch=0, alignment=QtCore.Qt.AlignCenter) # --------------------------------------------------------------------- # add row of interface widgets hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) wzoomfit = QtGui.QPushButton("Z0") wzoomfit.clicked.connect(self.zoom_fit) wzoomin = QtGui.QPushButton("Z+") wzoomin.clicked.connect(self.zoom_in) wzoomout = QtGui.QPushButton("Z-") wzoomout.clicked.connect(self.zoom_out) wc2c = QtGui.QCheckBox("Click to Center") wc2c.stateChanged.connect(self.set_c2c) self.wc2c = wc2c wsolve = QtGui.QPushButton("Solve") wsolve.clicked.connect(self.solve_astrometry) woverlay = QtGui.QPushButton("Overlay Catalog") woverlay.clicked.connect(self.overlay_catalog) wclear = QtGui.QPushButton("Clear Overlays") wclear.clicked.connect(self.clear_overlays) wmedfilt = QtGui.QCheckBox("Median Filter") wmedfilt.stateChanged.connect(self.set_medfilt) self.wmedfilt = wmedfilt wopen = QtGui.QPushButton("Open File") wopen.clicked.connect(self.open_file) wquit = QtGui.QPushButton("Quit") wquit.clicked.connect(self.quit) hbox.addStretch(1) hbox.addWidget(wzoomfit, stretch=0) hbox.addWidget(wzoomin, stretch=0) hbox.addWidget(wzoomout, stretch=0) hbox.addWidget(wc2c, stretch=0) # hbox.addWidget(wsolve, stretch=0) hbox.addWidget(woverlay, stretch=0) hbox.addWidget(wclear, stretch=0) hbox.addWidget(wmedfilt, stretch=0) # hbox.addWidget(wopen, stretch=0) hbox.addWidget(wquit, stretch=0) # --------------------------------------------------------------------- hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) vw = QtGui.QWidget() self.setCentralWidget(vw) vw.setLayout(vbox)
def __init__(self, logger): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() root = gtk.Window(gtk.WINDOW_TOPLEVEL) root.set_title("Gtk2 CanvasView Example") root.set_border_width(2) root.connect("delete_event", lambda w, e: quit(w)) self.root = root self.select = GtkHelp.FileSelection(root) vbox = gtk.VBox(spacing=2) fi = CanvasView(logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file_cb) fi.set_callback('cursor-changed', self.cursor_cb) fi.set_bg(0.2, 0.2, 0.2) fi.ui_set_active(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view private_canvas = fi.get_canvas() private_canvas.register_for_cursor_drawing(fi) private_canvas.add(canvas) canvas.ui_set_active(True) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() # add a color bar #fi.show_color_bar(True) fi.show_focus_indicator(True) # add little mode indicator that shows keyboard modal states fi.show_mode_indicator(True, corner='ur') w = fi.get_widget() w.set_size_request(512, 512) vbox.pack_start(w, fill=True, expand=True) self.readout = gtk.Label("") vbox.pack_start(self.readout, fill=True, expand=False) hbox = gtk.HBox(spacing=5) wdrawtype = GtkHelp.combo_box_new_text() index = 0 for name in self.drawtypes: wdrawtype.insert_text(index, name) index += 1 index = self.drawtypes.index('rectangle') wdrawtype.set_active(index) wdrawtype.connect('changed', self.set_drawparams) self.wdrawtype = wdrawtype wdrawcolor = GtkHelp.combo_box_new_text() index = 0 for name in self.drawcolors: wdrawcolor.insert_text(index, name) index += 1 index = self.drawcolors.index('lightblue') wdrawcolor.set_active(index) wdrawcolor.connect('changed', self.set_drawparams) self.wdrawcolor = wdrawcolor wfill = GtkHelp.CheckButton("Fill") wfill.sconnect('toggled', self.set_drawparams) self.wfill = wfill walpha = GtkHelp.SpinButton() adj = walpha.get_adjustment() adj.configure(0.0, 0.0, 1.0, 0.1, 0.1, 0) walpha.set_value(1.0) walpha.set_digits(1) walpha.sconnect('value-changed', self.set_drawparams) self.walpha = walpha wclear = gtk.Button("Clear Canvas") wclear.connect('clicked', self.clear_canvas) wopen = gtk.Button("Open File") wopen.connect('clicked', self.open_file) wquit = gtk.Button("Quit") wquit.connect('clicked', quit) for w in (wquit, wclear, walpha, gtk.Label("Alpha:"), wfill, wdrawcolor, wdrawtype, wopen): hbox.pack_end(w, fill=False, expand=False) vbox.pack_start(hbox, fill=False, expand=False) root.add(vbox)
def __init__(self, logger, window): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() self.top = window self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) fi = Viewers.CanvasView(logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # so trackpad scrolling can be adjusted settings = bd.get_settings() settings.set(scroll_zoom_direct_scale=True, scroll_zoom_acceleration=0.07) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.setSurface(fi) self.canvas = canvas # add canvas to view private_canvas = fi.get_canvas() private_canvas.add(canvas) canvas.ui_setActive(True) canvas.register_for_cursor_drawing(fi) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() # add a color bar fi.show_color_bar(True) # add little mode indicator that shows keyboard modal states fi.show_mode_indicator(True, corner='ur') fi.set_desired_size(512, 512) w = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(w, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.set_border_width(2) wdrawtype = Widgets.ComboBox() for name in self.drawtypes: wdrawtype.append_text(name) index = self.drawtypes.index('rectangle') wdrawtype.set_index(index) wdrawtype.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawtype = wdrawtype wdrawcolor = Widgets.ComboBox() for name in self.drawcolors: wdrawcolor.append_text(name) index = self.drawcolors.index('lightblue') wdrawcolor.set_index(index) wdrawcolor.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawcolor = wdrawcolor wfill = Widgets.CheckBox("Fill") wfill.add_callback('activated', lambda w, tf: self.set_drawparams()) self.wfill = wfill walpha = Widgets.SpinBox(dtype=float) walpha.set_limits(0.0, 1.0, incr_value=0.1) walpha.set_value(1.0) walpha.set_decimals(2) walpha.add_callback('value-changed', lambda w, val: self.set_drawparams()) self.walpha = walpha wclear = Widgets.Button("Clear Canvas") wclear.add_callback('activated', lambda w: self.clear_canvas()) ## wopen = Widgets.Button("Open File") ## wopen.add_callback('activated', lambda w: self.open_file()) ## wquit = Widgets.Button("Quit") ## wquit.add_callback('activated', lambda w: self.quit()) hbox.add_widget(Widgets.Label(''), stretch=1) for w in (wdrawtype, wdrawcolor, wfill, Widgets.Label('Alpha:'), walpha, wclear): hbox.add_widget(w, stretch=0) vbox.add_widget(hbox, stretch=0) mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() btn1 = Widgets.RadioButton("Draw") btn1.set_state(mode == 'draw') btn1.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) btn1.set_tooltip("Choose this to draw on the canvas") hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Edit", group=btn1) btn2.set_state(mode == 'edit') btn2.add_callback('activated', lambda w, val: self.set_mode_cb('edit', val)) btn2.set_tooltip("Choose this to edit things on the canvas") hbox.add_widget(btn2) hbox.add_widget(Widgets.Label('Zoom sensitivity: ')) slider = Widgets.Slider(orientation='horizontal', dtype=float) slider.add_callback('value-changed', lambda w, val: self.adjust_scrolling_accel_cb(val)) slider.set_limits(0.0, 12.0, 0.005) slider.set_value(8.0) hbox.add_widget(slider, stretch=1) # hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) # need to put this in an hbox with an expanding label or the # browser wants to resize the canvas hbox = Widgets.HBox() hbox.add_widget(vbox, stretch=0) hbox.add_widget(Widgets.Label(''), stretch=1) self.top.set_widget(hbox)
def __init__(self, logger): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() from ginga.gw import Widgets, Viewers, GwHelp self.app = Widgets.Application(logger=logger) self.app.add_callback('shutdown', self.quit) self.top = self.app.make_window("Ginga example2") self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) fi = Viewers.CanvasView(logger=logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # add a color bar fi.private_canvas.add(self.dc.ColorBar(side='bottom', offset=10)) # add little mode indicator that shows modal states in # lower left hand corner fi.private_canvas.add(self.dc.ModeIndicator(corner='ur', fontsize=14)) # little hack necessary to get correct operation of the mode indicator # in all circumstances bm = fi.get_bindmap() bm.add_callback('mode-set', lambda *args: fi.redraw(whence=3)) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.setSurface(fi) self.canvas = canvas # add canvas to view fi.get_canvas().add(canvas) canvas.ui_setActive(True) canvas.register_for_cursor_drawing(fi) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() fi.set_desired_size(512, 512) iw = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(iw, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.set_border_width(2) wdrawtype = Widgets.ComboBox() for name in self.drawtypes: wdrawtype.append_text(name) index = self.drawtypes.index('rectangle') wdrawtype.set_index(index) wdrawtype.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawtype = wdrawtype wdrawcolor = Widgets.ComboBox() for name in self.drawcolors: wdrawcolor.append_text(name) index = self.drawcolors.index('lightblue') wdrawcolor.set_index(index) wdrawcolor.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawcolor = wdrawcolor wfill = Widgets.CheckBox("Fill") wfill.add_callback('activated', lambda w, tf: self.set_drawparams()) self.wfill = wfill walpha = Widgets.SpinBox(dtype=float) walpha.set_limits(0.0, 1.0, incr_value=0.1) walpha.set_value(1.0) walpha.set_decimals(2) walpha.add_callback('value-changed', lambda w, val: self.set_drawparams()) self.walpha = walpha wclear = Widgets.Button("Clear Canvas") wclear.add_callback('activated', lambda w: self.clear_canvas()) wopen = Widgets.Button("Open File") wopen.add_callback('activated', lambda w: self.open_file()) wquit = Widgets.Button("Quit") wquit.add_callback('activated', lambda w: self.quit()) hbox.add_widget(Widgets.Label(''), stretch=1) for w in (wopen, wdrawtype, wdrawcolor, wfill, Widgets.Label('Alpha:'), walpha, wclear, wquit): hbox.add_widget(w, stretch=0) vbox.add_widget(hbox, stretch=0) mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() btn1 = Widgets.RadioButton("Draw") btn1.set_state(mode == 'draw') btn1.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) btn1.set_tooltip("Choose this to draw on the canvas") hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Edit", group=btn1) btn2.set_state(mode == 'edit') btn2.add_callback('activated', lambda w, val: self.set_mode_cb('edit', val)) btn2.set_tooltip("Choose this to edit things on the canvas") hbox.add_widget(btn2) btn3 = Widgets.CheckBox("I'm using a trackpad") btn3.add_callback('activated', lambda w, tf: self.use_trackpad_cb(tf)) hbox.add_widget(btn3) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) self.top.set_widget(vbox) self.fs = None if hasattr(GwHelp, 'FileSelection'): self.fs = GwHelp.FileSelection(self.top.get_widget())
def __init__(self, logger): super(FitsViewer, self).__init__() self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() fig = Figure() w = FigureCanvas(fig) fi = ImageViewCanvas(logger=logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.enable_draw(False) fi.set_callback('drag-drop', self.drop_file_cb) fi.set_callback('cursor-changed', self.cursor_cb) fi.set_bg(0.2, 0.2, 0.2) fi.ui_set_active(True) self.fitsimage = fi fi.set_figure(fig) bd = fi.get_bindings() bd.enable_all(True) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) #canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue') canvas.set_surface(fi) self.canvas = canvas # add canvas to view fi.add(canvas) canvas.ui_set_active(True) w.resize(512, 512) vbox = QtGui.QVBoxLayout() vbox.setContentsMargins(QtCore.QMargins(2, 2, 2, 2)) vbox.setSpacing(1) vbox.addWidget(w, stretch=1) self.readout = QtGui.QLabel("") vbox.addWidget(self.readout, stretch=0, alignment=QtCore.Qt.AlignCenter) hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) wdrawtype = QtGui.QComboBox() self.drawtypes = fi.get_drawtypes() for name in self.drawtypes: wdrawtype.addItem(name) index = self.drawtypes.index('rectangle') wdrawtype.setCurrentIndex(index) wdrawtype.activated.connect(self.set_drawparams) self.wdrawtype = wdrawtype wdrawcolor = QtGui.QComboBox() for name in self.drawcolors: wdrawcolor.addItem(name) index = self.drawcolors.index('lightblue') wdrawcolor.setCurrentIndex(index) wdrawcolor.activated.connect(self.set_drawparams) self.wdrawcolor = wdrawcolor wfill = QtGui.QCheckBox("Fill") wfill.stateChanged.connect(self.set_drawparams) self.wfill = wfill walpha = QtGui.QDoubleSpinBox() walpha.setRange(0.0, 1.0) walpha.setSingleStep(0.1) walpha.setValue(1.0) walpha.valueChanged.connect(self.set_drawparams) self.walpha = walpha wclear = QtGui.QPushButton("Clear Canvas") wclear.clicked.connect(self.clear_canvas) wopen = QtGui.QPushButton("Open File") wopen.clicked.connect(self.open_file) wquit = QtGui.QPushButton("Quit") wquit.clicked.connect(self.close) hbox.addStretch(1) for w in (wopen, wdrawtype, wdrawcolor, wfill, QtGui.QLabel('Alpha:'), walpha, wclear, wquit): hbox.addWidget(w, stretch=0) hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) vw = QtGui.QWidget() self.setCentralWidget(vw) vw.setLayout(vbox)