def __init__( self, reference_detection_controller, reference_location_storage, reference_edit_controller, ): self._reference_detection_controller = reference_detection_controller self._reference_location_storage = reference_location_storage self._reference_edit_controller = reference_edit_controller self.menu = ui.Growing_Menu("Reference Locations") self.menu.collapsed = True reference_detection_controller.add_observer( "on_detection_started", self._on_started_reference_detection)
def init_gui(self): def open_close_window(new_state): if new_state: self.visualizer.open_window() else: self.visualizer.close_window() self.menu = ui.Growing_Menu('Binocular 3D gaze mapper') self.g_pool.sidebar.insert(3, self.menu) # self.menu.append(ui.Text_Input('last_gaze_distance',self)) self.menu.append( ui.Switch('debug window', setter=open_close_window, getter=lambda: bool(self.visualizer.window)))
def init_gui(self): # initialize the menu self.menu = ui.Scrolling_Menu('Gaze Polyline') self.g_pool.gui.append(self.menu) self.menu.append(ui.Button('Close',self.unset_alive)) self.menu.append(ui.Slider('thickness',self,min=1,step=1,max=15,label='Line thickness')) color_menu = ui.Growing_Menu('Color') color_menu.collapsed = True color_menu.append(ui.Info_Text('Set RGB color component values.')) color_menu.append(ui.Slider('r',self,min=0.0,step=0.05,max=1.0,label='Red')) color_menu.append(ui.Slider('g',self,min=0.0,step=0.05,max=1.0,label='Green')) color_menu.append(ui.Slider('b',self,min=0.0,step=0.05,max=1.0,label='Blue')) self.menu.append(color_menu)
def update_gui_markers(self): pass self.menu.elements[:] = [] self.menu.append( ui.Info_Text( 'The offline marker tracker will look for markers in the entire video. By default it uses surfaces defined in capture. You can change and add more surfaces here.' )) self.menu.append( ui.Info_Text( 'Please note: Unlike the real-time marker detector the offline marker detector works with a fixed min_marker_perimeter of 20.' )) self.menu.append(ui.Button('Close', self.close)) self.menu.append( ui.Selector('mode', self, label='Mode', selection=[ "Show Markers and Frames", "Show marker IDs", "Surface edit mode", "Show Heatmaps", "Show Metrics" ])) self.menu.append( ui.Info_Text( 'To see heatmap or surface metrics visualizations, click (re)-calculate gaze distributions. Set "X size" and "Y size" for each surface to see heatmap visualizations.' )) self.menu.append( ui.Button("(Re)-calculate gaze distributions", self.recalculate)) self.menu.append( ui.Button("Export gaze and surface data", self.save_surface_statsics_to_file)) self.menu.append( ui.Button("Add surface", lambda: self.add_surface('_'))) for s in self.surfaces: idx = self.surfaces.index(s) s_menu = ui.Growing_Menu("Surface %s" % idx) s_menu.collapsed = True s_menu.append(ui.Text_Input('name', s)) s_menu.append(ui.Text_Input('x', s.real_world_size, label='X size')) s_menu.append(ui.Text_Input('y', s.real_world_size, label='Y size')) s_menu.append(ui.Button('Open Debug Window', s.open_close_window)) #closure to encapsulate idx def make_remove_s(i): return lambda: self.remove_surface(i) remove_s = make_remove_s(idx) s_menu.append(ui.Button('remove', remove_s)) self.menu.append(s_menu)
def init_gui(self): def close(): self.alive = False help_str = "Synchonize time of Pupil Captures across the local network." self.menu = ui.Growing_Menu('Network Time Sync') self.menu.append(ui.Button('Close', close)) self.menu.append(ui.Info_Text(help_str)) help_str = "All pupil nodes of one group share a Master clock." self.menu.append(ui.Info_Text(help_str)) self.menu.append( ui.Text_Input('node_name', self, label='Node Name', setter=self.restart_discovery)) self.menu.append( ui.Text_Input('sync_group', self, label='Sync Group', setter=self.change_sync_group)) def sync_status(): if self.follower_service: return str(self.follower_service) else: return 'Clock Master' self.menu.append( ui.Text_Input('sync status', getter=sync_status, setter=lambda _: _, label='Status')) def set_bias(bias): if bias < 0: bias = 0. self.base_bias = bias self.announce_clock_master_info() self.evaluate_leaderboard() help_str = "The clock service with the highest bias becomes clock master." self.menu.append(ui.Info_Text(help_str)) self.menu.append( ui.Text_Input('base_bias', self, label='Master Bias', setter=set_bias)) self.menu.append( ui.Text_Input('leaderboard', self, label='Master Nodes in Group')) self.g_pool.sidebar.append(self.menu)
def init_gui(self): def close(): self.alive = False help_str = 'Pupil Remote using ZeroMQ REQ REP scheme.' self.menu = ui.Growing_Menu('Pupil Remote') self.menu.append(ui.Button('Close', close)) self.menu.append(ui.Info_Text(help_str)) self.menu.append( ui.Text_Input('address', self, setter=self.start_server, label='Address')) self.g_pool.sidebar.append(self.menu)
def init_gui(self): self.menu = ui.Growing_Menu('Surface Tracker') self.g_pool.sidebar.append(self.menu) self.button = ui.Thumb('running', self, label='Track', hotkey='t') self.button.on_color[:] = (.1, .2, 1., .8) self.g_pool.quickbar.append(self.button) self.add_button = ui.Thumb('add_surface', setter=self.add_surface, getter=lambda: False, label='Add surface', hotkey='a') self.g_pool.quickbar.append(self.add_button) self.update_gui_markers()
def init_gui(self): menu_width = 400 menu_height = 500 x = random.random() y = random.random() x = int(x * (width - menu_width)) y = int(y * (height - menu_height)) self.menu = ui.Scrolling_Menu(unicode(self.sensor), size=(menu_width, menu_height), pos=(x, y)) self.uvc_menu = ui.Growing_Menu("UVC Controls") self.gui.append(self.menu) self.update_control_menu()
def __init__(self, detection_controller, general_settings, index_range_as_str): self._detection_controller = detection_controller self._general_settings = general_settings self._index_range_as_str = index_range_as_str self.menu = ui.Growing_Menu(self.menu_label) self.menu.collapsed = False detection_controller.add_observer( "on_detection_started", self._on_detection_started ) detection_controller.add_observer( "on_detection_ended", self._on_detection_ended )
def update_gui_markers(self): self.menu.elements[:] = [] self.menu.append( ui.Info_Text( 'This plugin detects and tracks fiducial markers visible in the scene. You can define surfaces using 1 or more marker visible within the world view by clicking *add surface*. You can edit defined surfaces by selecting *Surface edit mode*.' )) self.menu.append( ui.Switch('robust_detection', self, label='Robust detection')) self.menu.append( ui.Switch('invert_image', self, label='Use inverted markers')) self.menu.append( ui.Slider('min_marker_perimeter', self, step=1, min=10, max=100)) self.menu.append(ui.Switch('locate_3d', self, label='3D localization')) self.menu.append( ui.Selector('mode', self, label="Mode", selection=[ 'Show Markers and Surfaces', 'Show marker IDs', 'Show Heatmaps' ])) self.menu.append( ui.Button( "Add surface", lambda: self.add_surface('_'), )) for s in self.surfaces: idx = self.surfaces.index(s) s_menu = ui.Growing_Menu("Surface {}".format(idx)) s_menu.collapsed = True s_menu.append(ui.Text_Input('name', s)) s_menu.append(ui.Text_Input('x', s.real_world_size, label='X size')) s_menu.append(ui.Text_Input('y', s.real_world_size, label='Y size')) s_menu.append( ui.Text_Input('gaze_history_length', s, label='Gaze History Length [seconds]')) s_menu.append(ui.Button('Open Debug Window', s.open_close_window)) #closure to encapsulate idx def make_remove_s(i): return lambda: self.remove_surface(i) remove_s = make_remove_s(idx) s_menu.append(ui.Button('remove', remove_s)) self.menu.append(s_menu)
def init_gui(self): self.menu = ui.Growing_Menu('Recorder') self.g_pool.sidebar.insert(3, self.menu) self.menu.append( ui.Info_Text( 'Pupil recordings are saved like this: "path_to_recordings/recording_session_name/nnn" where "nnn" is an increasing number to avoid overwrites. You can use "/" in your session name to create subdirectories.' )) self.menu.append( ui.Info_Text( 'Recordings are saved to "~/pupil_recordings". You can change the path here but note that invalid input will be ignored.' )) self.menu.append( ui.Text_Input('rec_dir', self, setter=self.set_rec_dir, label='Path to recordings')) self.menu.append( ui.Text_Input('session_name', self, setter=self.set_session_name, label='Recording session name')) self.menu.append( ui.Switch('show_info_menu', self, on_val=True, off_val=False, label='Request additional user info')) self.menu.append( ui.Info_Text( 'Recording the raw eye video is optional. We use it for debugging.' )) self.menu.append( ui.Switch('record_eye', self, on_val=True, off_val=False, label='Record eye')) self.menu.append( ui.Selector('audio_src', self, selection=self.audio_devices_dict.keys())) self.button = ui.Thumb('running', self, setter=self.toggle, label='Record', hotkey='r') self.button.on_color[:] = (1, .0, .0, .8) self.g_pool.quickbar.insert(1, self.button)
def update_gui_markers(self): self.menu.elements[:] = [] self.menu.append( ui.Info_Text( "This plugin detects and tracks fiducial markers visible in the scene. You can define surfaces using 1 or more marker visible within the world view by clicking *add surface*. You can edit defined surfaces by selecting *Surface edit mode*." )) self.menu.append( ui.Switch("robust_detection", self, label="Robust detection")) self.menu.append( ui.Switch("invert_image", self, label="Use inverted markers")) self.menu.append( ui.Slider("min_marker_perimeter", self, step=1, min=30, max=100)) self.menu.append(ui.Switch("locate_3d", self, label="3D localization")) self.menu.append( ui.Selector( "mode", self, label="Mode", selection=[ "Show Markers and Surfaces", "Show marker IDs", "Show Heatmaps", ], )) self.menu.append( ui.Button("Add surface", lambda: self.add_surface("_"))) for s in self.surfaces: idx = self.surfaces.index(s) s_menu = ui.Growing_Menu("Surface {}".format(idx)) s_menu.collapsed = True s_menu.append(ui.Text_Input("name", s)) s_menu.append(ui.Text_Input("x", s.real_world_size, label="X size")) s_menu.append(ui.Text_Input("y", s.real_world_size, label="Y size")) s_menu.append( ui.Text_Input("gaze_history_length", s, label="Gaze History Length [seconds]")) s_menu.append(ui.Button("Open Debug Window", s.open_close_window)) # closure to encapsulate idx def make_remove_s(i): return lambda: self.remove_surface(i) remove_s = make_remove_s(idx) s_menu.append(ui.Button("remove", remove_s)) self.menu.append(s_menu)
def _update_ui(self): self.menu.elements[:] = [] self.menu.append(ui.Text_Input('source_dir', self, label='Recording Source Directory', setter=self.set_src_dir)) self.menu.append(ui.Text_Input('destination_dir', self, label='Recording Destination Directory', setter=self.set_dest_dir)) self.menu.append(ui.Button('start export', self.start)) for idx, job in enumerate(self.exports[::-1]): submenu = ui.Growing_Menu("Export Job {}: '{}'".format(idx, job.out_file_path)) progress_bar = ui.Slider('progress', getter=job.status, min=0, max=job.frames_to_export.value) progress_bar.read_only = True submenu.append(progress_bar) submenu.append(ui.Button('cancel', job.cancel)) self.menu.append(submenu) if not self.exports: self.menu.append(ui.Info_Text('Please select a Recording Source directory from with to pull all recordings for export.'))
def init_ui(self): self.add_menu() self.menu.label = 'Fixation Circle' self.menu.append(ui.Slider('radius',self,min=1,step=1,max=100,label='Radius')) self.menu.append(ui.Slider('thickness',self,min=1,step=1,max=15,label='Stroke width')) self.menu.append(ui.Switch('fill',self,label='Fill')) color_menu = ui.Growing_Menu('Color') color_menu.collapsed = True color_menu.append(ui.Info_Text('Set RGB color components and alpha (opacity) values.')) color_menu.append(ui.Slider('r',self,min=0.0,step=0.05,max=1.0,label='Red')) color_menu.append(ui.Slider('g',self,min=0.0,step=0.05,max=1.0,label='Green')) color_menu.append(ui.Slider('b',self,min=0.0,step=0.05,max=1.0,label='Blue')) color_menu.append(ui.Slider('a',self,min=0.0,step=0.05,max=1.0,label='Alpha')) self.menu.append(color_menu)
def _update_ui(self): del self.menu.elements[:] self.menu.append(ui.Info_Text('Supply export video recording name. The export will be in the recording dir. If you give a path the export will end up there instead.')) self.menu.append(ui.Text_Input('rec_name',self,label='export name')) self.menu.append(ui.Info_Text('Select your export frame range using the trim marks in the seek bar. This will affect all exporting plugins.')) self.menu.append(ui.Text_Input('in_mark',getter=self.g_pool.seek_control.get_trim_range_string,setter=self.g_pool.seek_control.set_trim_range_string,label='frame range to export')) self.menu.append(ui.Info_Text("Press the export button or type 'e' to start the export.")) for job in self.exports[::-1]: submenu = ui.Growing_Menu(job.out_file_path) progress_bar = ui.Slider('progress', getter=job.status, min=0, max=job.frames_to_export.value) progress_bar.read_only = True submenu.append(progress_bar) submenu.append(ui.Button('cancel',job.cancel)) self.menu.append(submenu)
def init_gui(self): super().init_gui() self.monitor_idx = 0 self.monitor_names = [glfwGetMonitorName(m) for m in glfwGetMonitors()] #primary_monitor = glfwGetPrimaryMonitor() self.info = ui.Info_Text("Calibrate gaze parameters using a screen based animation.") self.g_pool.calibration_menu.append(self.info) self.menu = ui.Growing_Menu('Controls') self.g_pool.calibration_menu.append(self.menu) self.menu.append(ui.Selector('monitor_idx',self,selection = range(len(self.monitor_names)),labels=self.monitor_names,label='Monitor')) self.menu.append(ui.Switch('fullscreen',self,label='Use fullscreen')) self.menu.append(ui.Slider('marker_scale',self,step=0.1,min=0.5,max=2.0,label='Marker size')) self.menu.append(ui.Slider('sample_duration',self,step=1,min=10,max=100,label='Sample duration'))
def update_gui_markers(self): self.menu.elements[:] = [] self.menu.append(ui.Button('Close', self.close)) self.menu.append( ui.Info_Text( 'This plugin detects and tracks fiducial markers visible in the scene. You can define surfaces using 1 or more marker visible within the world view by clicking *add surface*. You can edit defined surfaces by selecting *Surface edit mode*.' )) self.menu.append( ui.Switch('robust_detection', self, label='Robust detection')) self.menu.append( ui.Slider('min_marker_perimeter', self, step=1, min=10, max=80)) self.menu.append(ui.Switch('locate_3d', self, label='3D localization')) self.menu.append( ui.Selector('mode', self, label="Mode", selection=[ 'Show markers and frames', 'Show marker IDs', 'Surface edit mode' ])) self.menu.append( ui.Button( "Add surface", lambda: self.add_surface('_'), )) # disable locate_3d if camera intrinsics don't exist if self.camera_intrinsics is None: self.menu.elements[4].read_only = True for s in self.surfaces: idx = self.surfaces.index(s) s_menu = ui.Growing_Menu("Surface %s" % idx) s_menu.collapsed = True s_menu.append(ui.Text_Input('name', s, label='Name')) # self._bar.add_var("%s_markers"%i,create_string_buffer(512), getter=s.atb_marker_status,group=str(i),label='found/registered markers' ) s_menu.append(ui.Text_Input('x', s.real_world_size, 'x_scale')) s_menu.append(ui.Text_Input('y', s.real_world_size, 'y_scale')) s_menu.append(ui.Button('Open debug window', s.open_close_window)) #closure to encapsulate idx def make_remove_s(i): return lambda: self.remove_surface(i) remove_s = make_remove_s(idx) s_menu.append(ui.Button('Remove', remove_s)) self.menu.append(s_menu)
def init_gui(self): if self.g_pool.app == 'capture': self.menu = ui.Growing_Menu("My Broadcast Server") self.g_pool.sidebar.append(self.menu) elif self.g_pool.app == 'player': self.menu = ui.Scrolling_Menu("My Broadcast Server") self.g_pool.gui.append(self.menu) self.menu.append(ui.Button('Close', self.close)) help_str = "Pupil Message server: Using ZMQ and the *Publish-Subscribe* scheme" self.menu.append(ui.Info_Text(help_str)) self.menu.append( ui.Text_Input('address', self, setter=self.set_server, label='Address'))
def init_gui(self): monitor_names = [glfwGetMonitorName(m) for m in glfwGetMonitors()] #primary_monitor = glfwGetPrimaryMonitor() self.info = ui.Info_Text("Estimate Camera intrinsics of the world camera. Using an 11x9 asymmetrical circle grid. Click 'C' to capture a pattern.") self.g_pool.calibration_menu.append(self.info) self.menu = ui.Growing_Menu('Controls') self.menu.append(ui.Button('show Pattern',self.open_window)) self.menu.append(ui.Selector('monitor_idx',self,selection = range(len(monitor_names)),labels=monitor_names,label='Monitor')) self.menu.append(ui.Switch('fullscreen',self,label='Use Fullscreen')) self.g_pool.calibration_menu.append(self.menu) self.button = ui.Thumb('collect_new',self,setter=self.advance,label='Capture',hotkey='c') self.button.on_color[:] = (.3,.2,1.,.9) self.g_pool.quickbar.insert(0,self.button)
def init_gui(self,sidebar): self.menu = ui.Growing_Menu('Pupil Detector') self.info = ui.Info_Text("Switch to the algorithm display mode to see a visualization of pupil detection parameters overlaid on the eye video. "\ +"Adjust the pupil intensity range so that the pupil is fully overlaid with blue. "\ +"Adjust the pupil min and pupil max ranges (red circles) so that the detected pupil size (green circle) is within the bounds.") self.menu.append(self.info) self.menu.append(ui.Switch('coarse_detection',self,label='Use coarse detection')) self.menu.append(ui.Slider('intensity_range',self,label='Pupil intensity range',min=0,max=60,step=1)) self.menu.append(ui.Slider('pupil_min',self,label='Pupil min',min=1,max=250,step=1)) self.menu.append(ui.Slider('pupil_max',self,label='Pupil max',min=50,max=400,step=1)) self.menu.append(ui.Button('Open debug window',self.toggle_window)) # self.advanced_controls_menu = ui.Growing_Menu('Advanced Controls') # self.advanced_controls_menu.append(ui.Slider('min_contour_size',self,label='Contour min length',min=1,max=200,step=1)) # self.menu.append(self.advanced_controls_menu) sidebar.append(self.menu)
def init_gui(self): # initialize the menu self.menu = ui.Scrolling_Menu('Gaze Cross') self.g_pool.gui.append(self.menu) self.menu.append(ui.Button('Close',self.unset_alive)) self.menu.append(ui.Slider('inner',self,min=0,step=10,max=200,label='Inner Offset Length')) self.menu.append(ui.Slider('outer',self,min=0,step=10,max=2000,label='Outer Length')) self.menu.append(ui.Slider('thickness',self,min=1,step=1,max=15,label='Stroke width')) color_menu = ui.Growing_Menu('Color') color_menu.collapsed = True color_menu.append(ui.Info_Text('Set RGB color component values.')) color_menu.append(ui.Slider('r',self,min=0.0,step=0.05,max=1.0,label='Red')) color_menu.append(ui.Slider('g',self,min=0.0,step=0.05,max=1.0,label='Green')) color_menu.append(ui.Slider('b',self,min=0.0,step=0.05,max=1.0,label='Blue')) self.menu.append(color_menu)
def init_gui(self): self.info = ui.Info_Text( "Calibrate gaze parameters using a handheld marker.") self.g_pool.calibration_menu.append(self.info) self.menu = ui.Growing_Menu('Controls') self.g_pool.calibration_menu.append(self.menu) self.button = ui.Thumb('active', self, setter=self.toggle, label='Calibrate', hotkey='c') self.button.on_color[:] = (.3, .2, 1., .9) self.g_pool.quickbar.insert(0, self.button)
def _update_gui(self): self.menu.elements[:] = [] self.menu.append(ui.Button('Close',self.unset_alive)) self.menu.append(ui.Info_Text('Supply export video recording name. The export will be in the recording dir. If you give a path the export will end up there instead.')) self.menu.append(ui.Text_Input('rec_name',self,label='export name')) self.menu.append(ui.Info_Text('Select your export frame range using the trim marks in the seek bar.')) self.menu.append(ui.Text_Input('in_mark',getter=self.g_pool.trim_marks.get_string,setter=self.g_pool.trim_marks.set_string,label='frame range to export')) self.menu.append(ui.Button('new export',self.add_export)) for job in self.exports[::-1]: submenu = ui.Growing_Menu(job.out_file_path) progress_bar = ui.Slider('progress', getter=job.status, min=0, max=job.frames_to_export.value) progress_bar.read_only = True submenu.append(progress_bar) submenu.append(ui.Button('cancel',job.cancel)) self.menu.append(submenu)
def init_gui(self): #lets make a menu entry in the sidebar self.menu = ui.Growing_Menu('My Plugin') self.g_pool.sidebar.append(self.menu) #add a button to close the plugin self.menu.append(ui.Button('close Example_Plugin', self.close)) #add a button to invoke event capture self.button = ui.Thumb('event', self, setter=self.add_event, getter=lambda: True, label='Event Capture', hotkey='e') self.button.on_color[:] = (1, .0, .0, .8) self.g_pool.quickbar.insert(1, self.button)
def update_gui_markers(self): def close(): self.alive = False self.menu.elements[:] = [] self.menu.append(ui.Button('Close', close)) self.menu.append( ui.Info_Text( 'The offline screen tracker will look for a screen for each frame of the video. By default it uses surfaces defined in capture. You can change and add more surfaces here.' )) self.menu.append( ui.Info_Text( 'Before starting, you must update the screen detector cache:')) self.menu.append(ui.Button("Update Cache", self.update_cache_hack)) self.menu.append( ui.Info_Text( 'Then you can add a screen. Move to a frame where the screen was detected (in blue) then press the add screen surface button.' )) self.menu.append( ui.Button("Add screen surface", lambda: self.add_surface())) self.menu.append( ui.Info_Text( "Press the export button to export data from the current section." )) for s in self.surfaces: idx = self.surfaces.index(s) s_menu = ui.Growing_Menu("Surface %s" % idx) s_menu.collapsed = True s_menu.append(ui.Text_Input('name', s)) s_menu.append(ui.Text_Input('x', s.real_world_size, label='X size')) s_menu.append(ui.Text_Input('y', s.real_world_size, label='Y size')) s_menu.append(ui.Button('Open Debug Window', s.open_close_window)) #closure to encapsulate idx def make_remove_s(i): return lambda: self.remove_surface(i) remove_s = make_remove_s(idx) s_menu.append(ui.Button('remove', remove_s)) self.menu.append(s_menu)
def __init__( self, optimization_controller, general_settings, optimization_storage, index_range_as_str, ): self._optimization_controller = optimization_controller self._general_settings = general_settings self._optimization_storage = optimization_storage self._index_range_as_str = index_range_as_str self.menu = ui.Growing_Menu(self.menu_label) self.menu.collapsed = False optimization_controller.add_observer("on_optimization_completed", self._on_optimization_completed)
def open_info_menu(self): self.info_menu = ui.Growing_Menu('additional Recording Info',size=(300,300),pos=(300,300)) self.info_menu.configuration = self.info_menu_conf def populate_info_menu(): self.info_menu.elements[:-2] = [] for name in self.user_info.iterkeys(): self.info_menu.insert(0,ui.Text_Input(name,self.user_info)) def set_user_info(new_string): self.user_info = new_string populate_info_menu() populate_info_menu() self.info_menu.append(ui.Info_Text('Use the *user info* field to add/remove additional fields and their values. The format must be a valid Python dictionary. For example -- {"key":"value"}. You can add as many fields as you require. Your custom fields will be saved for your next session.')) self.info_menu.append(ui.Text_Input('user_info',self,setter=set_user_info,label="User info")) self.g_pool.gui.append(self.info_menu)
def append_section_menu(self, sec): section_menu = ui.Growing_Menu('Gaze Section') section_menu.color = RGBA(*sec['color']) def make_validate_fn(sec, key): def validate(input_obj): try: assert type(input_obj) in (tuple,list) assert type(input_obj[0]) is int assert type(input_obj[1]) is int assert 0 <= input_obj[0] <= input_obj[1] <=len(self.g_pool.timestamps) except: pass else: sec[key] = input_obj return validate def make_calibrate_fn(sec): def calibrate(): self.calibrate_section(sec) return calibrate def make_remove_fn(sec): def remove(): del self.menu[self.sections.index(sec)-len(self.sections)] del self.sections[self.sections.index(sec)] self.correlate_and_publish() return remove section_menu.append(ui.Selector('calibration_method', sec, label="Calibration Method", labels=['Circle Marker', 'Natural Features'], selection=['circle_marker', 'natural_features'])) section_menu.append(ui.Selector('mapping_method', sec, label='Calibration Mode',selection=['2d','3d'])) section_menu.append(ui.Text_Input('status', sec, label='Calbiration Status', setter=lambda _: _)) section_menu[-1].read_only = True section_menu.append(ui.Text_Input('calibration_range', sec, label='Calibration range', setter=make_validate_fn(sec, 'calibration_range'))) section_menu.append(ui.Text_Input('mapping_range', sec, label='Mapping range', setter=make_validate_fn(sec, 'mapping_range'))) section_menu.append(ui.Button('Recalibrate', make_calibrate_fn(sec))) section_menu.append(ui.Button('Remove section', make_remove_fn(sec))) self.menu.append(section_menu)
def update_gui_markers(self): def close(): self.alive = False self.menu.elements[:] = [] self.menu.append(ui.Button('Close', close)) self.menu.append( ui.Info_Text( 'This plugin detects the outmost screen visible in the scene. Ideal screen is white rect in a black backgroud. You can define a surface using 1 visible screen within the world view by clicking *add surface*.' )) self.menu.append( ui.Switch('robust_detection', self, label='Robust detection')) self.menu.append( ui.Slider('min_marker_perimeter', self, step=1, min=10, max=500)) self.menu.append(ui.Switch('locate_3d', self, label='3D localization')) self.menu.append( ui.Selector( 'mode', self, label="Mode", selection=['Show Markers and Surfaces', 'Show marker IDs'])) self.menu.append( ui.Button( "Add surface", lambda: self.add_surface('_'), )) for s in self.surfaces: idx = self.surfaces.index(s) s_menu = ui.Growing_Menu("Surface %s" % idx) s_menu.collapsed = True s_menu.append(ui.Text_Input('name', s)) s_menu.append(ui.Text_Input('x', s.real_world_size, label='X size')) s_menu.append(ui.Text_Input('y', s.real_world_size, label='Y size')) s_menu.append(ui.Button('Open Debug Window', s.open_close_window)) #closure to encapsulate idx def make_remove_s(i): return lambda: self.remove_surface(i) remove_s = make_remove_s(idx) s_menu.append(ui.Button('remove', remove_s)) self.menu.append(s_menu)
def re_build_ndsi_menu(self): del self.menu[1:] from pyglui import ui ui_elements = [] ui_elements.append(ui.Info_Text("Remote Pupil Mobile sources")) ui_elements.append( ui.Info_Text("Pupil Mobile Commspec v{}".format(__protocol_version__)) ) host_sel, host_sel_labels = self.host_selection_list() ui_elements.append( ui.Selector( "selected_host", self, selection=host_sel, labels=host_sel_labels, setter=self.view_host, label="Remote host", ) ) self.menu.extend(ui_elements) self.add_auto_select_button() if not self.selected_host: return ui_elements = [] host_menu = ui.Growing_Menu("Remote Host Information") ui_elements.append(host_menu) src_sel, src_sel_labels = self.source_selection_list() host_menu.append( ui.Selector( "selected_source", selection=src_sel, labels=src_sel_labels, getter=lambda: None, setter=self.activate, label="Source", ) ) self.menu.extend(ui_elements)