void edge_MouseDown(object sender, MouseButtonEventArgs e) { if (MeshViewMode != ViewMode.Navigation) { return; } DCELHalfEdge2D edge = sender as DCELHalfEdge2D; UpdateEdge(edge); }
private void TranslateCoords(DCELHalfEdge2D edge) { double theta = Math.Atan2( edge.Origin.Coordinates.Y - edge.Next.Origin.Coordinates.Y, edge.Origin.Coordinates.X - edge.Next.Origin.Coordinates.X); double sint = Math.Sin(theta); double cost = Math.Cos(theta); edge.X1 = edge.Origin.Coordinates.X - (distance * sint); edge.Y1 = edge.Origin.Coordinates.Y + (distance * cost); edge.X2 = edge.Next.Origin.Coordinates.X + (-distance * sint); edge.Y2 = edge.Next.Origin.Coordinates.Y + (distance * cost); }
void face_MouseLeave(object sender, MouseEventArgs e) { var face = sender as DCEL2D.DCELFace2D; switch (MeshViewMode) { case ViewMode.Geometry: break; case ViewMode.Wireframe: break; case ViewMode.DCELStructure: face.Fill = Brushes.Black; face.Edge.Stroke = Brushes.Black; break; case ViewMode.FaceNeighbours: face.Fill = Brushes.Black; foreach (var item in buffer) { DCELFace2D f = item as DCELFace2D; f.Fill = Brushes.Black; } buffer.Clear(); break; case ViewMode.FaceSides: face.Fill = Brushes.Black; foreach (var item in buffer) { DCELHalfEdge2D f = item as DCELHalfEdge2D; f.Stroke = Brushes.Black; } buffer.Clear(); break; case ViewMode.FaceVertices: face.Fill = Brushes.Black; foreach (var item in buffer) { DCELVertex2D v = item as DCELVertex2D; v.Fill = Brushes.Black; } buffer.Clear(); break; default: break; } }
public void UpdateEdge(DCELHalfEdge2D edge) { if (edge == null) { return; } if (edge != currentSelected) { if (currentSelected != null) { currentSelected.Stroke = Brushes.Black; if (currentSelected.Face != null) { currentSelected.Face.Fill = Brushes.Black; } currentSelected.Origin.Fill = Brushes.Black; } edge.Stroke = Brushes.Green; if (edge.Face != null) { edge.Face.Fill = Brushes.LightBlue; } edge.Origin.Fill = Brushes.Blue; currentSelected = edge; } else { if (currentSelected != null) { currentSelected.Stroke = Brushes.Black; if (currentSelected.Face != null) { currentSelected.Face.Fill = Brushes.Black; } currentSelected.Origin.Fill = Brushes.Black; } currentSelected = null; } }
public void InitializeEdge(DCELHalfEdge2D edge) { TranslateCoords(edge); edge.HeadHeight = 0.4; edge.HeadWidth = 1; edge.Stroke = Brushes.Black; edge.StrokeThickness = 0.1; double d = Math.Sqrt(Math.Pow(edge.X2 - edge.X1, 2) + Math.Pow(edge.Y2 - edge.Y1, 2)); double r = (d - .75) / d; edge.RenderTransform = new ScaleTransform(r, r, (edge.X2 + edge.X1) / 2, (edge.Y2 + edge.Y1) / 2); edge.MouseEnter += new MouseEventHandler(edge_MouseEnter); edge.MouseLeave += new MouseEventHandler(edge_MouseLeave); edge.MouseDown += new MouseButtonEventHandler(edge_MouseDown); collection.Add(edge); }
void origin_MouseLeave(object sender, MouseEventArgs e) { var origin = sender as DCEL2D.DCELVertex2D; switch (MeshViewMode) { case ViewMode.Geometry: break; case ViewMode.Wireframe: break; case ViewMode.DCELStructure: origin.Fill = Brushes.Black; origin.Leaving.Stroke = Brushes.Black; break; case ViewMode.LeavingEdges: origin.Fill = Brushes.Black; foreach (var item in buffer) { DCELHalfEdge2D he = item as DCELHalfEdge2D; he.Stroke = Brushes.Black; } buffer.Clear(); break; case ViewMode.AdjacentFaces: origin.Fill = Brushes.Black; foreach (var item in buffer) { DCELFace2D f = item as DCELFace2D; f.Fill = Brushes.Black; } buffer.Clear(); break; case ViewMode.AdjacentVertices: origin.Fill = Brushes.Black; foreach (var item in buffer) { DCELVertex2D v = item as DCELVertex2D; v.Fill = Brushes.Black; } buffer.Clear(); break; case ViewMode.KStar: origin.Fill = Brushes.Black; foreach (var item in buffer) { DCELFace2D f = item as DCELFace2D; f.Fill = Brushes.Black; } buffer.Clear(); break; default: break; } }