def merge(self, layer): start_gc = set(layer.start_coordinates()) finish_gc = set(layer.finish_coordinates()) dirty_gc = start_gc | finish_gc # Transfer information at these locations from the merged layer self.remove_particles_at(start_gc) # Add particles in the final operation state self.points |= finish_gc for gc in finish_gc: model_p = layer.model.get_particle(gc) p = DrawnParticle(gridcoord = gc, oval_id = None, model_particle = model_p) self.set_particle_at(gc, p) #print gc, model_p # Transfer the selection to the parent layer if isinstance(layer, SelectLayer): selected_gc = set([p.gridcoord for p in layer.selected]) dirty_gc |= selected_gc self.add_particles_at(selected_gc) self.selected = set([self.get_particle_at(gc) for gc in selected_gc]) key = utils.event_data_register(dict(model = self.model, dirty_gridcoords = dirty_gc)) self.canvas.event_generate('<<Model>>', state = key, when = 'tail') print 'particles changed in merge:',len(dirty_gc)
def handle_copy(self, event): print 'copy' if len(self.selected) == 0: return model, coordinates = self.get_operation_particles() key = utils.event_data_register(dict(model = model, coordinates = coordinates)) self.canvas.event_generate('<<Clipboard>>', state = key)
def __init__(self, master = None): tk.Frame.__init__(self, master) self.initWidgets() self.layoutWidgets() self.event_generate('<<Brush>>', state=utils.event_data_register(self.get_brush())) # Set focusing properties so the DesignCanvas is usually in focus self.bind_all('<ButtonPress-1>', self.handle_focus, add='+')
def apply_brush(self, brush, particles): """ Set the given particles to have the particle and/or body type specified by the brush. Does NOT redraw particles to reflect the changes! Use update() to do this. """ erase = brush == None modify = not erase and (brush.particle_specs == None or brush.body_specs == None) create = not erase and not modify print erase, modify, create for p in particles: if erase: self.model.remove_particle(p.gridcoord) elif (create or modify) and p.in_model: model_particle = self.model.get_particle(p.gridcoord) if brush.particle_specs != None: model_particle.particle_specs = brush.particle_specs if brush.body_specs != None: model_particle.body_specs = brush.body_specs elif create and not p.in_model: self.model.add_particle(p.gridcoord, brush.particle_specs, brush.body_specs) self.mark_dirty(particles) ### Emit model-changed event gridcoords = [p.gridcoord for p in particles] key = utils.event_data_register(dict(dirty_gridcoords = gridcoords, model = self.model)) self.canvas.event_generate('<<Model>>', state=key, when='tail')
def body_specs_change_callback(self, data = None): self.event_generate('<<BodySpecs>>', state = utils.event_data_register(data)) print 'Generated <<BodySpecs>> event:', data
def brush_select_callback(self, data = None): key = utils.event_data_register(data) self.event_generate('<<Brush>>', state = key) print 'Generated <<Brush>> event:', data
def model_select_callback(self, data = None): self.event_generate('<<ModelSelect>>', state = utils.event_data_register(data)) print 'Generated <<ModelSelect>> event:', data