//Cette fonction permet de savoir si une sommet donné possède une ou plusieurs intersections avec un autre, et de le renvoyer. private Vertex CheckWhoIntersects(Vertex vertex) { foreach (Vertex v in vertexes) { if (v.Intersects(vertex) && v != vertex) { return v; } } return null; }
public bool Intersects(Vertex other) { return new Rectangle(Location.X - Size.Width / 2, Location.Y - Size.Height / 2, Size.Width, Size.Height).IntersectsWith(new Rectangle(other.Location.X - Size.Width / 2, other.Location.Y - Size.Height / 2, other.Size.Width, other.Size.Height)); }
/*FONCTIONS_DES_SOMMETS****************************************/ //Cette fonction permet d'ajouter le sommet donné au graphe. private void AddVertex(Vertex vertex) { vertexes.Add(vertex); mainPanel.Refresh(); }
//Cette fonction permet de libérer le sommet sélectionné (s'il existe). private void ReleaseHoveredVertex() { if (hoveredVertex != null) { hoveredVertex.Color = hoveredVertex.TrueColor; hoveredVertex = null; mainPanel.Refresh(); } }
//Cette fonction permet de sélectionner le sommet donné, et déselectionner l'ancien (s'il existe). private void SelectVertex(Vertex other, MouseButtons button) { if (selectedVertex != null) { selectedVertex.Color = selectedVertex.TrueColor; } selectedVertex = other; selectedVertex.Color = Vertex.selectedColor; OpenSelectedVertexProperties(); if (button == MouseButtons.Left) { grabbedVertex = selectedVertex; } textBoxName.Enabled = true; numericUpDownLocationX.Enabled = true; numericUpDownLocationY.Enabled = true; numericUpDownSizeWidth.Enabled = true; numericUpDownSizeHeight.Enabled = true; numericUpDownWidth.Enabled = true; labelBoxColor.Enabled = true; mainPanel.Refresh(); }
//Cette fonction permet de lâcher le sommet qui a été attrapé. private void ReleaseGrabbedVertex() { grabbedVertex = null; mainPanel.Refresh(); }
//Cette fonction permet de changer la couleur du sommet donné (celui qui est survolé par la souris, s'il existe). private void HoverVertex(Vertex nextHoveredVertex) { if (hoveredVertex != null) { if (hoveredVertex != selectedVertex) { hoveredVertex.Color = hoveredVertex.TrueColor; } } hoveredVertex = nextHoveredVertex; if (hoveredVertex != selectedVertex) { hoveredVertex.Color = Vertex.hoveredColor; } mainPanel.Refresh(); }
//Cette fonction permet de sélectionner le sommet donné, et déselectionner l'ancien (s'il existe). private void SelectVertex(Vertex other, MouseButtons button) { if (selectedVertex != null) { selectedVertex.Color = selectedVertex.TrueColor; } selectedVertex = other; selectedVertex.Color = Vertex.selectedColor; OpenSelectedVertexProperties(); if (button == MouseButtons.Left) { grabbedVertex = selectedVertex; } mainPanel.Refresh(); }
private void mainPanel_MouseDown(object sender, MouseEventArgs e) { Vertex vertex = new Vertex(e.Location); Vertex other = CheckWhoIntersects(vertex); if (other == null) { AddVertex(vertex); } else { SelectVertex(other, e.Button); if(e.Button == MouseButtons.Right) { if (temporaryEdge == null) { WaitForEdgePlacement(e.Location); } else { AddEdge(e.Location); } } } }
public Edge(Vertex s, Vertex d) : base(defaultWidth, defaultColor, defaultColor) { Source = s; Destination = d; }