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)
示例#3
0
  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')
示例#5
0
 def body_specs_change_callback(self, data = None):
   self.event_generate('<<BodySpecs>>', state = utils.event_data_register(data))
   print 'Generated <<BodySpecs>> event:', data
   
示例#6
0
 def brush_select_callback(self, data = None):
   key = utils.event_data_register(data)
   self.event_generate('<<Brush>>', state = key)
   print 'Generated <<Brush>> event:', data
示例#7
0
 def model_select_callback(self, data = None):
   self.event_generate('<<ModelSelect>>', state = utils.event_data_register(data))
   print 'Generated <<ModelSelect>> event:', data