Esempio n. 1
0
	def init_demos(self):
		nlds_index = self.system_combo.GetSelection()
		nlds = self.main_window.systems[nlds_index]

		# get system prefix from demo name
		# should be SystemName_DemoName.py
		system_prefix = nlds.__module__.split('.')[-1]
		names = []

		# checks each loaded demo for name match
		for demo in self.main_window.demos:
			demo_module = demo.__module__.split('.')[-1]
			demo_prefix = demo_module.split('_')[0]
			
			if demo_prefix == system_prefix:
				names.append(demo.name)
			
		names.append("Custom Parameter Settings")
		
		self.demo_combo.SetItems(names)
		self.demo_combo.SetSelection(0)
		
		dypy.debug("MainPanel", "Found %d demos for %s." %(len(names), nlds.name))
		
		# update description of current demo
		self.update_demo()
Esempio n. 2
0
def show():
	gui   = wx.PySimpleApp()
	frame = MainWindow()
	
	dypy.debug("MainWindow", "Starting event loop.\n")
	gui.MainLoop()
	dypy.debug("MainWindow", "Exiting event loop.")
Esempio n. 3
0
	def init_systems(self):
		names = [ system.name for system in self.main_window.systems ]
		self.system_combo.SetItems(names)
		self.system_combo.SetSelection(0)
		
		dypy.debug("MainPanel", "System selection initialized.")
		self.update_system()
Esempio n. 4
0
 def __init__(self, **kwds):
     Tool.__init__(self, name='Orbit Visualization', description='An animated orbit diagram.', server=kwds['server'])
     dypy.debug('OrbitTool', 'Initialized.')
     
     self.age_max = 1000  
     self.density = 3
     self.clear_each_frame = True
Esempio n. 5
0
	def init_tools(self):
		names = [ tool.name for tool in self.main_window.tools ]
		self.tool_combo.SetItems(names)
		self.tool_combo.SetSelection(0)
		
		dypy.debug("MainPanel", "Tool selection initialized.")
		self.update_tool()
Esempio n. 6
0
	def __init__(self, main_window, parent):
		wx.Panel.__init__(self, parent, wx.ID_ANY)
		self.main_window = main_window
		
		# gui components
		# combo components contain loaded module/class names
		# about components contain description of current selection
		self.system_label = Widgets.LabelText(self, "Select a dynamical system:")
		self.system_combo = Widgets.ChoiceList(self)
		self.system_about = Widgets.AboutText(self)

		self.demo_label = Widgets.LabelText(self, "Select a demo:")
		self.demo_combo = Widgets.ChoiceList(self)
		self.demo_about = Widgets.AboutText(self)

		self.tool_label = Widgets.LabelText(self, "Select a visualization tool:")
		self.tool_combo = Widgets.ChoiceList(self)
		self.tool_about = Widgets.AboutText(self)

		# begin component layout
		sizer = wx.BoxSizer(wx.VERTICAL)

		# add system components (nlds: nonlinear dynamical system)
		sizer.Add(self.system_label, 0, wx.ALIGN_LEFT | wx.TOP | wx.LEFT, 4)
		sizer.AddSpacer(2)
		sizer.Add(self.system_combo, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 4)
		sizer.AddSpacer(2)
		sizer.Add(self.system_about, 1, wx.EXPAND | wx.LEFT | wx.RIGHT, 4)
		sizer.AddSpacer(10)
		
		# add demo components
		sizer.Add(self.demo_label, 0, wx.ALIGN_LEFT | wx.TOP | wx.LEFT, 4)
		sizer.AddSpacer(2)
		sizer.Add(self.demo_combo, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 4)
		sizer.AddSpacer(2)
		sizer.Add(self.demo_about, 1, wx.EXPAND | wx.LEFT | wx.RIGHT, 4)
		sizer.AddSpacer(10)

		# add tool components
		sizer.Add(self.tool_label, 0, wx.ALIGN_LEFT | wx.TOP | wx.LEFT, 4)
		sizer.AddSpacer(2)
		sizer.Add(self.tool_combo, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 4)
		sizer.AddSpacer(2)
		sizer.Add(self.tool_about, 1, wx.EXPAND | wx.LEFT | wx.RIGHT, 4)
		sizer.AddSpacer(10)
		
		self.SetSizer(sizer)

		# set event handlers for choices
		wx.EVT_CHOICE(self, self.system_combo.GetId(), self.update_system)
		wx.EVT_CHOICE(self, self.demo_combo.GetId(), self.update_demo)
		wx.EVT_CHOICE(self, self.tool_combo.GetId(), self.update_tool)

		# populate the system, demo, and tool choices
		# init_systems will populate the demo choices
		self.init_systems()
		self.init_tools()
		
		dypy.debug("MainPanel", "Panel initialized.")
Esempio n. 7
0
	def on_exit_dypy(self, event):
		dypy.debug("MainWindow", "Exiting dypy.")
	
		try:
			# signal server to close visualization window
			self.server.on_close()
		finally:
			#close gui window
			self.Destroy()
Esempio n. 8
0
File: Tool.py Progetto: cmorgan/dypy
 def set_state_index(self, axis_index, state_index):
     self.points_lock.acquire()
     
     try:
         self.state_indices[axis_index] = state_index
         self.server.update_tool(self)
         dypy.debug("DynamicsTool", "State index updated.")
     finally:
         self.points_lock.release()
Esempio n. 9
0
File: Tool.py Progetto: cmorgan/dypy
 def set_parameter_index(self, axis_index, parameter_index):
     self.points_lock.acquire()
     
     try:
         self.parameter_indices[axis_index] = parameter_index 
         self.server.update_tool(self)
         dypy.debug("DynamicsTool", "Parameter index updated.")
     finally:
         self.points_lock.release()
Esempio n. 10
0
    def __init__(self, **kwds):
        Tool.__init__(
            self,
            name="Phase Portrait Visualization",
            description="An animated phase space portrait.",
            server=kwds["server"],
        )
        dypy.debug("PortraitTool", "initialized")

        self.density = 150
        self.use_lines = False  # if false, draw unconnected points
Esempio n. 11
0
 def run(self):
     self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     self.s.bind(('', self.port))           
     dypy.debug(self.device_name, 'Started server on port ' + str(self.port))
     
     while not self.stopped:
         data, address = self.s.recvfrom(1024)
        
         self.parse_function(data)           
     
     dypy.debug(self.device_name, 'Stopped server')
Esempio n. 12
0
	def update_tool_panel(self, system, tool):
		# set active tool
		self.active_tool = tool
		
		# set system for active tool
		self.active_tool.update_system(system)
		
		# insert tool gui into notebook display
		self.notebook.RemovePage(2)
		self.notebook.InsertPage(2, self.active_tool, self.active_tool.name)
		
		dypy.debug("MainWindow", "Tool panel changed to %s." % tool.name)
Esempio n. 13
0
	def update_system(self, event = wx.CommandEvent()):
		nlds_index = self.system_combo.GetSelection()
		nlds = self.main_window.systems[nlds_index]
		self.system_about.SetValue(nlds.description)

		dypy.debug("MainPanel", "System is now %s." % nlds.name)
		
		# populate demos for selected system
		self.init_demos()
		
		# let main window update the system panel
		self.main_window.update_system_panel(nlds)
Esempio n. 14
0
	def update_system_panel(self, system):
		# create system panel and trigger layout
		self.system_panel = SystemPanel(self, self.notebook, system)
		self.system_panel.Layout()
		
		# reinsert system panel into notebook display
		self.notebook.RemovePage(1)
		self.notebook.InsertPage(1, self.system_panel, system.name)
		
		dypy.debug("MainWindow", "System panel changed to %s." % system.name)
		
		# update active tool's system
		self.active_tool.update_system(system)
Esempio n. 15
0
	def on_browse(self, event):
		filter = "dypy Demo files (*.db)|*.db"
		dialog = wx.FileDialog(self, message = "Select Save Location", \
		wildcard = filter, style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT, \
		defaultDir = self.default_dir, defaultFile = self.default_file)
		
		if dialog.ShowModal() == wx.ID_OK:
			self.location_text.Clear()
			self.location_text.SetValue(dialog.GetPath())
			
			dypy.debug("SaveDialog", "Save location set to %s." % dialog.GetPath())
		else:
			dypy.debug("SaveDialog", "Location selection canceled.")		
Esempio n. 16
0
File: Tool.py Progetto: cmorgan/dypy
 def set_system(self, system):
     dypy.debug("DynamicsTool", "Attempting to update system.")
     self.points_lock.acquire()
     
     try:
         self.server.window.set_caption(system.name)
         self.system = system
         self.parameter_indices = [0, 1, 2]
         self.state_indices = [0, 1, 2]
         self.server.update_tool(self)
         dypy.debug("DynamicsTool", "System set to %s." % system.name)
     finally:
         self.points_lock.release()
Esempio n. 17
0
File: Tool.py Progetto: cmorgan/dypy
 def set_state_ranges(self, state_ranges):
     self.points_lock.acquire()
     
     try:
         self.state_ranges = state_ranges
         self.server.update_tool(self)
         
         x_bounds, y_bounds, z_bounds = self.get_bounds()
         self.server.set_bounds(x_bounds, y_bounds, z_bounds)
         self.server.set_axes_center(sum(x_bounds)/2.0, sum(y_bounds)/2.0, sum(z_bounds)/2.0)            
         
         dypy.debug("DynamicsTool", "State ranges updated.")
     finally:
         self.points_lock.release()
Esempio n. 18
0
	def on_stop(self, event = wx.CommandEvent()):
		# enable selecting system and tool
		self.main_panel.unlock()
		
		# change stop button text and event handling
		self.start_button.SetLabel("Start Visualization")
		self.start_button.SetFont(Widgets.BoldFont())
		wx.EVT_BUTTON(self, self.start_button.GetId(), self.on_start)
		
		# make system panel active
		self.notebook.SetSelection(0)
		
		self.server.pause()
		dypy.debug("MainWindow", "Visualization stopped.\n")
Esempio n. 19
0
	def on_start(self, event):
		# disable changing system and tool
		self.main_panel.lock()
		
		# change start button text and event handling
		self.start_button.SetLabel("Stop Visualization")
		self.start_button.SetFont(Widgets.ItalicFont())
		wx.EVT_BUTTON(self, self.start_button.GetId(), self.on_stop)
		
		# make tool panel active
		self.notebook.SetSelection(2)
		
		self.server.unpause()
		dypy.debug("MainWindow", "Visualization started.\n")
Esempio n. 20
0
	def update_parameters(self, event = wx.CommandEvent()):
		ranges = []

		# get range strings and convert to floating point numbers
		for i in range(len(self.param_names)):
			min = float(self.param_min_controls[i].GetValue())
			max = float(self.param_max_controls[i].GetValue())
			
			ranges.append((min, max))

		dypy.debug("SystemPanel", "Parameter ranges updated.")
		
		# update ranges for the active tool
		self.main_window.active_tool.set_parameter_ranges(ranges)
Esempio n. 21
0
	def update_tool(self, event = wx.CommandEvent()):
		tool_index = self.tool_combo.GetSelection()
		tool = self.main_window.tools[tool_index]
		
		system_index = self.system_combo.GetSelection()
		system = self.main_window.systems[system_index]
		
		self.tool_about.SetValue(tool.description)
		
		dypy.debug("MainPanel", "Tool is now %s" % tool.name)
		
		# let main window update the tool panel
		self.main_window.update_tool_panel(system, tool)
		
		self.main_window.system_panel.update_state()
		self.main_window.system_panel.update_parameters()
Esempio n. 22
0
	def update_demo(self, event = wx.CommandEvent()):
		demo_name = self.demo_combo.GetStringSelection()
		
		dypy.debug("MainPanel", "Demo is now %s." % demo_name)

		# set custom parameter settings about message
		if demo_name == "Custom Parameter Settings":
			self.demo_about.SetValue("Manually enter custom parameter settings on the %s tab." % self.system_combo.GetStringSelection())
			return
		
		# find demo class reference by name
		for demo in self.main_window.demos:
			if demo.name == demo_name:
				self.demo_about.SetValue(demo.description)
				self.main_window.update_parameters(demo)
				return
Esempio n. 23
0
	def update_system(self, system):
		# update state axis choices
		self.state_choice.SetItems(system.get_state_names())
		self.state_choice.SetSelection(0)
		
		# update parameter choices
		self.param_choice.SetItems(system.get_parameter_names())
		self.param_choice.SetSelection(0)
		
		dypy.debug("OrbitToolGUI", "Updated for system %s." % system.name)
		
		# set system in tool
		self.tool.set_system(system)
		
		# trigger state/param choice event handling
		self.on_state_selected()
		self.on_param_selected()
Esempio n. 24
0
 def __init__(self, parent, name):
     wx.Panel.__init__(self, parent)
     
     # get tool from tool server
     ns = Pyro.naming.NameServerLocator().getNS(host='localhost')
     uri = ns.resolve(name)
     self.tool = uri.getAttrProxy()
     dypy.debug(name + 'GUI', 'Connected to server.')
     
     self.name = self.tool.name
     self.description = self.tool.description
     
     self.set_parameter_ranges = self.tool.set_parameter_ranges
     self.set_state_ranges = self.tool.set_state_ranges
     
     # stay hidden when created
     self.Hide()
Esempio n. 25
0
 def __init__(self, parent):
     ToolGUI.__init__(self, parent, 'PortraitTool')
     
     # gui components: labels
     state_x_label   = Widgets.LabelText(self, "Select State for x-Axis:")
     state_y_label   = Widgets.LabelText(self, "Select State for y-Axis:")
     state_z_label   = Widgets.LabelText(self, "Select State for z-Axis:")        
     mode_label      = Widgets.LabelText(self, "Select Visualization Mode:")        
    
     # gui components: selection
     self.state_x_choice = Widgets.ChoiceList(self)
     self.state_y_choice = Widgets.ChoiceList(self)
     self.state_z_choice = Widgets.ChoiceList(self)
     self.mode_check = Widgets.Checkbox(self, "Draw Lines")
     
     sizer = wx.BoxSizer(wx.VERTICAL)        
     
     sizer.Add(state_x_label, 0, wx.ALIGN_LEFT | wx.ALL, 4)
     sizer.Add(self.state_x_choice, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 4)
     sizer.AddSpacer(2)
     
     sizer.Add(state_y_label, 0, wx.ALIGN_LEFT | wx.ALL, 4)
     sizer.Add(self.state_y_choice, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 4)
     sizer.AddSpacer(2)
     
     sizer.Add(state_z_label, 0, wx.ALIGN_LEFT | wx.ALL, 4)
     sizer.Add(self.state_z_choice, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 4)
     sizer.AddSpacer(2)   
     
     sizer.Add(mode_label, 0, wx.ALIGN_LEFT | wx.ALL, 4)
     sizer.Add(self.mode_check, 0, wx.LEFT, 30)
     
     sizer.AddStretchSpacer(1)
     
     # register event handling
     wx.EVT_CHOICE(self, self.state_x_choice.GetId(), self.on_state_x_selected)
     wx.EVT_CHOICE(self, self.state_y_choice.GetId(), self.on_state_y_selected)
     wx.EVT_CHOICE(self, self.state_z_choice.GetId(), self.on_state_z_selected)      
     wx.EVT_CHECKBOX(self, self.mode_check.GetId(), self.on_mode_selected)
     
     self.SetSizerAndFit(sizer)
     
     dypy.debug("PortraitToolGUI", "Initialized.")        
Esempio n. 26
0
    def update_system(self, system):
        # update state axis choices
        state_names = system.get_state_names()
        self.state_x_choice.SetItems(state_names)
        self.state_x_choice.SetSelection(0)
        
        self.state_y_choice.SetItems(state_names)
        self.state_y_choice.SetSelection(1 if len(state_names) > 0 else 0)
        
        self.state_z_choice.SetItems(state_names)
        self.state_z_choice.SetSelection(2 if len(state_names) > 1 else 0)
        
        dypy.debug("PortraitToolGUI", "Updated for system %s." % system.name)

        # set system in tool        
        self.tool.set_system(system)
        
        # trigger state/param choice event handling
        self.on_state_x_selected()
        self.on_state_y_selected()
        self.on_state_z_selected() 
Esempio n. 27
0
	def on_save_demo(self, event):
		dypy.debug("MainWindow", "Saving demo to file.")	
		dialog = Widgets.SaveDialog(self)
		
		if dialog.ShowModal() == wx.ID_OK:
			dypy.debug("MainWindow", "Saving demo as file %s." % dialog.location_text.GetValue())
			shelf = shelve.open(dialog.location_text.GetValue())
			
			shelf["demo system"] = self.main_panel.get_system_name()
			shelf["demo name"] = dialog.name_text.GetValue()
			shelf["demo description"] = dialog.description_text.GetValue()
			shelf["demo tool"] = self.main_panel.get_tool_name()
			
			self.save_control(shelf, "state minimum controls", self.system_panel.state_min_controls)
			self.save_control(shelf, "state maximum controls", self.system_panel.state_max_controls)
			self.save_control(shelf, "parameter minimum controls", self.system_panel.param_min_controls)
			self.save_control(shelf, "parameter maximum controls", self.system_panel.param_max_controls)
			
			shelf["pp x axis"] = self.tools[2].state_x_choice.GetSelection()
			shelf["pp y axis"] = self.tools[2].state_y_choice.GetSelection()
			shelf["pp z axis"] = self.tools[2].state_z_choice.GetSelection()
			
			shelf["orbit state axis"] = self.tools[0].state_choice.GetSelection()
			shelf["orbit parameter axis"] = self.tools[0].param_choice.GetSelection()
			
			shelf.close()
		else:
			dypy.debug("MainWindow", "Saving demo canceled by user.")
		
		dialog.Destroy()
Esempio n. 28
0
 def __init__(self, **kwds):
     Tool.__init__(self, name="Cobweb Visualization", description="", server=kwds["server"])
     dypy.debug("CobwebTool", "initialized")
Esempio n. 29
0
	def on_param_selected(self, event = wx.CommandEvent()):
		index = self.param_choice.GetSelection()
		self.tool.set_parameter_index(0, index)
		
		dypy.debug("OrbitToolGUI", "Parameter is now %s." \
		% self.param_choice.GetStringSelection())
Esempio n. 30
0
	def on_state_selected(self, event = wx.CommandEvent()):
		index = self.state_choice.GetSelection()
		self.tool.set_state_index(0, index)

		dypy.debug("OrbitToolGUI", "State axis is now %s." \
		% self.state_choice.GetStringSelection())