Beispiel #1
0
    def __init__(self):
        gtk.Window.__init__(self)
        self.connect('destroy', self.destroy_cb)

        self.config_window = None
        self.live_hide_timeout = 0
        self.light_hop_timeout = 0
        self.busy = False

        self.leds = ledmap.Ledmap(os.path.join(source_dir, 'data', 
                                               'led-maps.txt'))

        logging.debug('loaded %d maps', len(self.leds.get_names()))
        for name in self.leds.get_names():
            bytes = self.leds.get_bytes(name)
            logging.debug('%s: %d lights', name, len(bytes))

        # where project directories get written, see RTI cap above
        self.outdir = options.outdir

        self.lights = lights.Lights()

        # try to reset the lights ... if this fails, disable dome controls
        try:
            self.dome_controls = True
            name = self.leds.get_names()[0]
            self.lights.set_triple(self.leds.get_bytes(name)[0])
        except lights.Error as e:
            logging.debug('no lights found, disabling dome controls')
            self.dome_controls = False

        self.vbox = gtk.VBox(False, 0)
        self.add(self.vbox)
        self.vbox.show()

        fixed = gtk.Fixed()
        self.vbox.pack_start(fixed, False)
        fixed.show()

        self.camera = camera.Camera()
        self.preview = preview.Preview(self.camera)
        fixed.put(self.preview, 0, 0)
        self.preview.show()
        self.preview.connect('motion_notify_event', self.preview_motion_cb)

        if options.verbose:
            try:
                config = camera.Config(self.camera) 
                config.prettyprint(sys.stdout, config.get_root_widget())
            except:
                logging.debug("No Camera detected: unable to print config")
        eb = gtk.EventBox()
        fixed.put(eb, 0, 0)
        eb.show()

        self.progress = progress.Progress()
        self.progress.set_size_request(preview_width, -1)
        eb.add(self.progress)

        eb = gtk.EventBox()
        fixed.put(eb, 0, 0)
        eb.show()

        self.info = info.Info()
        self.info.set_size_request(preview_width, -1)
        eb.add(self.info)

        eb = gtk.EventBox()
        fixed.put(eb, 20, 380)
        eb.show()

        self.play_image = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY, 
                        gtk.ICON_SIZE_SMALL_TOOLBAR)
        self.pause_image = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, 
                        gtk.ICON_SIZE_SMALL_TOOLBAR)
        self.live = gtk.Button()
        self.live.set_image(self.play_image)
        self.live.set_tooltip_text("Start/stop live preview")
        self.live.connect('clicked', self.live_cb, None)
        eb.add(self.live)
        self.live.show()

        self.toolbar = gtk.HBox(False, 5)
        self.toolbar.set_border_width(3)
        self.vbox.pack_end(self.toolbar)
        self.toolbar.show()

        button = gtk.Button()
        quit_image = gtk.image_new_from_stock(gtk.STOCK_QUIT, 
                        gtk.ICON_SIZE_SMALL_TOOLBAR)
        quit_image.show()
        button.set_tooltip_text("Quit RTIAcquire")
        button.connect('clicked', self.destroy_cb, None)
        button.add(quit_image)
        self.toolbar.pack_end(button, False, False)
        button.show()

        if self.dome_controls:
            self.dome_picker = gtk.combo_box_new_text()
            for name in self.leds.get_names():
                self.dome_picker.append_text(name)
            self.dome_picker.set_active(0)
            self.dome_picker.set_tooltip_text("Select lighting system")
            self.dome_picker.connect('changed', self.dome_picker_cb, None)
            self.toolbar.pack_start(self.dome_picker, False, False)
            self.dome_picker.show()

            self.light_picker = gtk.SpinButton(climb_rate = 1)
            self.light_picker.set_numeric(True)
            self.light_picker.set_wrap(True)
            self.light_picker.set_increments(1, 1)
            self.light_picker.set_tooltip_text("Pick light")
            self.light_picker_refresh()
            self.light_picker.connect('value_changed', 
                    self.light_picker_cb, None)
            self.toolbar.pack_start(self.light_picker, False, False)
            self.light_picker.show()

        button = gtk.Button()
        menu_image = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES, 
                        gtk.ICON_SIZE_SMALL_TOOLBAR)
        menu_image.show()
        button.set_tooltip_text("Camera settings")
        button.connect('clicked', self.config_cb, None)
        button.add(menu_image)
        self.toolbar.pack_start(button, False, False)
        button.show()

        button = gtk.Button('Focus')
        button.set_tooltip_text("Focus camera automatically")
        button.connect('clicked', self.focus_cb, None)
        self.toolbar.pack_start(button, False, False)
        button.show()

        photo_image = gtk.image_new_from_file(
                os.path.join(source_dir, 'data', 'camera_24.png'))
        photo = gtk.Button()
        photo.set_image(photo_image)
        photo.set_tooltip_text("Take single photo")
        photo.connect('clicked', self.photo_cb, None)
        self.toolbar.pack_start(photo, False, False)
        photo.show()

        if self.dome_controls:
            photo = gtk.Button('RTI Preview')
            photo.set_tooltip_text("Take preview RTI image")
            photo.connect('clicked', self.rti_preview_cb, None)
            self.toolbar.pack_start(photo, False, False)
            photo.show()

            photo = gtk.Button('RTI Capture ...')
            photo.set_tooltip_text("Start full RTI acquisition")
            photo.connect('clicked', self.rti_capture_cb, None)
            self.toolbar.pack_start(photo, False, False)
            photo.show()

        self.info.msg('Welcome to RTI Acquire', 'v1.3, March 2014')

        self.show()
Beispiel #2
0
    def rti_capture_cb(self, widget, data = None):
        chooser = gtk.FileChooserDialog('Select output folder', self, 
                gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER, 
                (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, 'Capture', 99))
        chooser.set_default_response(99)
        chooser.set_current_folder(self.outdir)
        response = chooser.run()
        filename = chooser.get_filename()
        chooser.hide()

        if response != 99:
            return

        if filename == None:
            self.info.err('Select a destination folder', '')
            return

        # filename is "base/project-name"
        # we remember the base for next time, we make the standard directory
        # structure below project-name
        self.outdir = os.path.dirname(filename)
        project = os.path.basename(filename)

        # remove a trailing '/', if any, it'll confuse os.path.dirname()
        if filename[-1] == '/':
            filename = filename[:-1]

        if os.access(filename, os.W_OK):
            self.info.err('Destination folder exists', 
                          'Pick another name or delete %s.' % filename)
            return

        for i in ['assembly-files', 'finished-files', 
                'original-captures', 'jpeg-exports']:
            target = os.path.join(filename, i)
            if not os.access(target, os.W_OK):
                try:
                    os.makedirs(target)
                except Exception as e:
                    self.info.err('Unable to create folder', 
                                    'Create %s failed with %s' % 
                                       (target, repr(e)))
                    return

        # record camera settings
        try:
            f = open(os.path.join(filename, 'camsettings.txt'), 'w')
            f.write('Original capture by RTI Acquire 1.0\n')
            f.write(time.ctime() + '\n')
            index = self.dome_picker.get_active()
            name = self.leds.get_names()[index]
            f.write('Lights "%s"\n' % name)
            rect = self.preview.get_selection()
            if rect:
                f.write('Selection "%d %d %d %d"\n' % \
                    (rect.left, rect.top, rect.width, rect.height))
            config = camera.Config(self.camera) 
            config.prettyprint(f, config.get_root_widget())
            f.close()
        except Exception as e:
            self.info.err('Unable to create camsettings.txt', 
                            'Create %s failed with %s' % 
                           (target, repr(e)))
            return

        self.target = os.path.join(filename, 'original-captures')

        self.action('Full capture to %s ...' % self.target, 
                    self.rti_capture)
Beispiel #3
0
 def focus_cb(self, widget, data = None):
     config = camera.Config(self.camera) 
     root = config.get_root_widget()
     focus = root.get_child_by_name('autofocusdrive')
     focus.set_value(1)
     config.set_config()
Beispiel #4
0
    def __init__(self):
        gtk.Window.__init__(self)
        self.connect('destroy', self.destroy_cb)

        self.config_window = None
        self.live_hide_timeout = 0
        self.light_hop_timeout = 0
        self.busy = False

        self.leds = ledmap.Ledmap(os.path.join(source_dir, 'data', 
                                               'led-maps.txt'))

        logging.debug('loaded %d maps', len(self.leds.get_names()))
        for name in self.leds.get_names():
            bytes = self.leds.get_bytes(name)
            logging.debug('%s: %d lights', name, len(bytes))

        # where project directories get written, see RTI cap above
        self.outdir = options.outdir

        self.lights = lights.Lights()

        # try to reset the lights ... if this fails, disable dome controls
        try:
            self.dome_controls = True
            name = self.leds.get_names()[0]
            self.lights.set_triple(self.leds.get_bytes(name)[0])
        except lights.Error as e:
            logging.debug('no lights found, disabling dome controls')
            self.dome_controls = False

        self.vbox = gtk.VBox(False, 0)
        self.add(self.vbox)
        self.vbox.show()

        fixed = gtk.Fixed()
        self.vbox.pack_start(fixed, False)
        fixed.show()

        self.camera = camera.Camera()
        self.preview = preview.Preview(self.camera)
        fixed.put(self.preview, 0, 0)
        self.preview.show()
        self.preview.connect('motion_notify_event', self.preview_motion_cb)

        if options.verbose:
            try:
                config = camera.Config(self.camera) 
                config.prettyprint(sys.stdout, config.get_root_widget())
            except:
                logging.debug("No Camera detected: unable to print config")
        eb = gtk.EventBox()
        fixed.put(eb, 0, 0)
        eb.show()

        self.progress = progress.Progress()
        self.progress.set_size_request(preview_width, -1)
        eb.add(self.progress)

        eb = gtk.EventBox()
        fixed.put(eb, 0, 0)
        eb.show()

        self.info = info.Info()
        self.info.set_size_request(preview_width, -1)
        eb.add(self.info)

        eb = gtk.EventBox()
        fixed.put(eb, 20, 380)
        eb.show()

        self.play_image = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY, 
                        gtk.ICON_SIZE_SMALL_TOOLBAR)
        self.pause_image = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, 
                        gtk.ICON_SIZE_SMALL_TOOLBAR)
        self.live = gtk.Button()
        self.live.set_image(self.play_image)
        self.live.set_tooltip_text("Start/stop live preview")
        self.live.connect('clicked', self.live_cb, None)
        eb.add(self.live)
        self.live.show()

        self.toolbar = gtk.HBox(False, 5)
        self.toolbar.set_border_width(3)
        self.vbox.pack_end(self.toolbar)
        self.toolbar.show()

        button = gtk.Button()
        quit_image = gtk.image_new_from_stock(gtk.STOCK_QUIT, 
                        gtk.ICON_SIZE_SMALL_TOOLBAR)
        quit_image.show()
        button.set_tooltip_text("Quit RTIAcquire")
        button.connect('clicked', self.destroy_cb, None)
        button.add(quit_image)
        self.toolbar.pack_end(button, False, False)
        button.show()

        if self.dome_controls:
            self.dome_picker = gtk.combo_box_new_text()
            for name in self.leds.get_names():
                self.dome_picker.append_text(name)
            self.dome_picker.set_active(0)
            self.dome_picker.set_tooltip_text("Select lighting system")
            self.dome_picker.connect('changed', self.dome_picker_cb, None)
            self.toolbar.pack_start(self.dome_picker, False, False)
            self.dome_picker.show()

            self.light_picker = gtk.SpinButton(climb_rate = 1)
            self.light_picker.set_numeric(True)
            self.light_picker.set_wrap(True)
            self.light_picker.set_increments(1, 1)
            self.light_picker.set_tooltip_text("Pick light")
            self.light_picker_refresh()
            self.light_picker.connect('value_changed', 
                    self.light_picker_cb, None)
            self.toolbar.pack_start(self.light_picker, False, False)
            self.light_picker.show()

        button = gtk.Button()
        menu_image = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES, 
                        gtk.ICON_SIZE_SMALL_TOOLBAR)
        menu_image.show()
        button.set_tooltip_text("Camera settings")
        button.connect('clicked', self.config_cb, None)
        button.add(menu_image)
        self.toolbar.pack_start(button, False, False)
        button.show()

        button = gtk.Button('Focus')
        button.set_tooltip_text("Focus camera automatically")
        button.connect('clicked', self.focus_cb, None)
        self.toolbar.pack_start(button, False, False)
        button.show()

        photo_image = gtk.image_new_from_file(
                os.path.join(source_dir, 'data', 'camera_24.png'))
        photo = gtk.Button()
        photo.set_image(photo_image)
        photo.set_tooltip_text("Take single photo")
        photo.connect('clicked', self.photo_cb, None)
        self.toolbar.pack_start(photo, False, False)
        photo.show()

        if self.dome_controls:
            photo = gtk.Button('RTI Preview')
            photo.set_tooltip_text("Take preview RTI image")
            photo.connect('clicked', self.rti_preview_cb, None)
            self.toolbar.pack_start(photo, False, False)
            photo.show()

            photo = gtk.Button('RTI Capture ...')
            photo.set_tooltip_text("Start full RTI acquisition")
            photo.connect('clicked', self.rti_capture_cb, None)
            self.toolbar.pack_start(photo, False, False)
            photo.show()

        self.info.msg('Welcome to RTI Acquire', 'v1.3, March 2014')

        self.show()
Beispiel #5
0
    def rti_capture_cb(self, widget, data = None):
        chooser = gtk.FileChooserDialog('Select output folder', self, 
                gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER, 
                (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, 'Capture', 99))
        chooser.set_default_response(99)
        chooser.set_current_folder(self.outdir)
        response = chooser.run()
        filename = chooser.get_filename()
        chooser.hide()

        if response != 99:
            return

        if filename == None:
            self.info.err('Select a destination folder', '')
            return

        # filename is "base/project-name"
        # we remember the base for next time, we make the standard directory
        # structure below project-name
        self.outdir = os.path.dirname(filename)
        project = os.path.basename(filename)

        # remove a trailing '/', if any, it'll confuse os.path.dirname()
        if filename[-1] == '/':
            filename = filename[:-1]

        if os.access(filename, os.W_OK):
            self.info.err('Destination folder exists', 
                          'Pick another name or delete %s.' % filename)
            return

        for i in ['assembly-files', 'finished-files', 
                'original-captures', 'jpeg-exports']:
            target = os.path.join(filename, i)
            if not os.access(target, os.W_OK):
                try:
                    os.makedirs(target)
                except Exception as e:
                    self.info.err('Unable to create folder', 
                                    'Create %s failed with %s' % 
                                       (target, repr(e)))
                    return

        # record camera settings
        try:
            f = open(os.path.join(filename, 'camsettings.txt'), 'w')
            f.write('Original capture by RTI Acquire 1.0\n')
            f.write(time.ctime() + '\n')
            index = self.dome_picker.get_active()
            name = self.leds.get_names()[index]
            f.write('Lights "%s"\n' % name)
            rect = self.preview.get_selection()
            if rect:
                f.write('Selection "%d %d %d %d"\n' % \
                    (rect.left, rect.top, rect.width, rect.height))
            config = camera.Config(self.camera) 
            config.prettyprint(f, config.get_root_widget())
            f.close()
        except Exception as e:
            self.info.err('Unable to create camsettings.txt', 
                            'Create %s failed with %s' % 
                           (target, repr(e)))
            return

        self.target = os.path.join(filename, 'original-captures')

        self.action('Full capture to %s ...' % self.target, 
                    self.rti_capture)
Beispiel #6
0
 def focus_cb(self, widget, data = None):
     config = camera.Config(self.camera) 
     root = config.get_root_widget()
     focus = root.get_child_by_name('autofocusdrive')
     focus.set_value(1)
     config.set_config()