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(); } }