Exemplo n.º 1
0
 protected override void OnMouseDown(MouseButtonEventArgs e)
 {
     switch (e.ChangedButton)
     {
     case MouseButton.Left:
         Point p = e.GetPosition(this);
         mouseDownPosition = p;
         var hitParticle = ParticleAtPoint(p);
         if (Keyboard.IsKeyDown(Key.LeftCtrl))
         {
             if (hitParticle == null)
             {
                 var newParticle = new Particle(model.Dimension);
                 newParticle.Position  = transform.ToWorld(mouseDownPosition);
                 newParticle.FillColor = getRandomColor();
                 model.AddParticle(newParticle);
                 InvalidateVisual();
             }
             else
             {
                 model.RemoveParticle(hitParticle);
                 InvalidateVisual();
             }
         }
         else if (Keyboard.IsKeyDown(Key.LeftShift))
         {
             if (hitParticle != null)
             {
                 toolKind = ToolKind.None;
                 var drawData = hitParticle.Tag as DrawData;
                 drawData.Selected = !drawData.Selected;
                 InvalidateVisual();
             }
             else
             {
                 toolKind              = ToolKind.SelectRectangle;
                 selectionAdorner      = SelectionAdorner.Create(this);
                 selectionAdorner.From = mouseDownPosition;
                 selectionAdorner.To   = mouseDownPosition;
             }
         }
         else
         {
             if (hitParticle != null)
             {
                 toolKind = ToolKind.MoveSelectedParticles;
                 var drawData = hitParticle.Tag as DrawData;
                 if (drawData.Selected)
                 {
                     foreach (var particle in model.Particles)
                     {
                         DrawData dd = particle.Tag as DrawData;
                         if (dd.Selected)
                         {
                             particle.Fixed = true;
                         }
                     }
                 }
                 else
                 {
                     foreach (var particle in model.Particles)
                     {
                         (particle.Tag as DrawData).Selected = false;
                     }
                     (hitParticle.Tag as DrawData).Selected = true;
                     hitParticle.Fixed = true;
                 }
                 InvalidateVisual();
             }
             else
             {
                 toolKind = ToolKind.ScrollView;
             }
         }
         if (toolKind != ToolKind.None)
         {
             CaptureMouse();
         }
         break;
     }
 }