Exemplo n.º 1
0
        internal void MouseDown(MouseEventArgs e)
        {
            // LEVÉ TLAČÍTKO
            if (e.Button == MouseButtons.Left)
            {
                // pokud uživatel fixuje body, neděláme nic jiného
                if (FixingVertices && Hover.Any())
                {
                    foreach (Vertex v in Hover)
                    {
                        v.Fixed = !v.Fixed;
                    }
                    return;
                }

                // podobně pokud přidáváme body do prostoru, neděláme nic jiného
                if (AddingVertices)
                {
                    simulation.AddVertex(StickyMousePosition.X, StickyMousePosition.Y);
                    return;
                }

                // levé tlačítko myši přesouvá body
                if (!Connector.Selected)
                {
                    Dragging = Hover.ToList(); // copy selected
                }
                // také vytváří nové spoje (pokud neběží simulace)
                if (simulation.Pause)
                {
                    // pokud máme označený bod a nad žádným dalším bodem nedržíme myš
                    if (!Hover.Any() && Connector.Selected)
                    {
                        // získáme vhodnou pozici pro nový bod (nejblíže k myši od označeného bodu)
                        PointF candidatePosition = Connector.GetCandidate(MousePosition);
                        // PointF candidatePosition = StickyMousePosition;
                        // pokud existuje nějaký bod poblíž vhodné pozice
                        IEnumerable <Vertex> nearCandidate = simulation.Vertices.Where(v => candidatePosition.Sub(v.Position).Mag() < v.Radius);
                        if (nearCandidate.Any())
                        {
                            // tak spojíme tento blízký bod a označený bod
                            Connector.ConnectFirstWith(nearCandidate.First());
                        }
                        else
                        {
                            // jinak vytvoříme bod nový
                            Vertex vertex = simulation.AddVertex(candidatePosition.X, candidatePosition.Y);
                            Connector.ConnectFirstWith(vertex);
                        }
                    }
                    // pokud držíme nad nějakým bodem myš
                    if (Hover.Any())
                    {
                        Connector.Click(Hover);
                    }
                }
            }
            // PRAVÉ TLAČÍTKO
            if (e.Button == MouseButtons.Right)
            {
                // jen pokud není už selektlý bod. Bylo to otravné
                if (!Connector.Selected)
                {
                    // smaže hrany poblíž myši
                    if (HoverEdges.Any())
                    {
                        simulation.RemoveEdges(HoverEdges);
                    }
                    // smaže body poblíž myši
                    if (Hover.Any())
                    {
                        simulation.RemoveVertices(Hover);
                    }
                }

                // zruší výběr
                Connector.Cancel();
            }
        }