Ejemplo n.º 1
0
        private void DeleteEdge(CanvasEdge canvasEdge)
        {
            List<Node> nodesList = CanvasItems.GetAllNodes();

            foreach (Node node in nodesList)
            {
                node.Edges.Remove(canvasEdge.Edge);
            }

            CanvasItems.Remove(canvasEdge);
        }
Ejemplo n.º 2
0
        private void CorrectEdgePosition(CanvasRectangle rectStart, CanvasRectangle rectEnd, CanvasEdge canvasEdge, bool isTwoSide = false)
        {
            double x1 = rectStart.CanvasLeft + RectangleSize / 2;
            double y1 = rectStart.CanvasTop + RectangleSize / 2;
            double x2 = rectEnd.CanvasLeft + RectangleSize / 2;
            double y2 = rectEnd.CanvasTop + RectangleSize / 2;

            double angleStart;
            double angleEnd;
            double twoSideAdjustment = 0;                           // When there are edges in both directions, their position on the circle must be additionally adjusted...

            if (isTwoSide)
                twoSideAdjustment = 25;                             // ... by a value of 25/50 degrees (depends on edge direction)

            if (x1 <= x2)
            {
                angleStart = MathHelper.GetLineAngle(x1, y1, x2, y2) - MathHelper.AlfaToRadian(twoSideAdjustment);
                angleEnd = angleStart + MathHelper.AlfaToRadian(180) + MathHelper.AlfaToRadian(twoSideAdjustment * 2);
            }
            else
            {
                angleEnd = MathHelper.GetLineAngle(x1, y1, x2, y2) + MathHelper.AlfaToRadian(twoSideAdjustment);
                angleStart = angleEnd + MathHelper.AlfaToRadian(180) - MathHelper.AlfaToRadian(twoSideAdjustment * 2);
            }

            Point newStartPoint = MathHelper.GetPointOnCircle(x1, y1, angleStart, 15);                   // can't be helped ;(
            Point newEndPoint = MathHelper.GetPointOnCircle(x2, y2, angleEnd, 15);

            canvasEdge.X1 = newStartPoint.X;
            canvasEdge.Y1 = newStartPoint.Y;
            canvasEdge.X2 = newEndPoint.X;
            canvasEdge.Y2 = newEndPoint.Y;
        }