Example #1
0
        void edge_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (MeshViewMode != ViewMode.Navigation)
            {
                return;
            }

            DCELHalfEdge2D edge = sender as DCELHalfEdge2D;

            UpdateEdge(edge);
        }
Example #2
0
        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);
        }
Example #3
0
        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;
            }
        }
Example #4
0
        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;
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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;
            }
        }