Пример #1
0
        public static Shape GetShaper(TopicShape shape, int round)
        {
            switch (shape)
            {
            case TopicShape.Ellipse:
                return(new EllipseShape());

            case TopicShape.BaseLine:
                return(new BaseLineShape());

            case TopicShape.None:
                return(new NoneShape());

            case TopicShape.Rectangle:
            default:
                if (round > 0)
                {
                    return(new RoundRectangleShape(round));
                }
                else
                {
                    return(new RectangleShape());
                }
            }
        }
Пример #2
0
        Point[] GetPointsForRoot(TopicShape shapeFrom, TopicShape shapeTo,
                                 Rectangle rectFrom, Rectangle rectTo,
                                 Vector4 vector, Vector4 vectorTo)
        {
            var fcp = PaintHelper.CenterPoint(rectFrom);
            int bezierTurn;

            Point[] pts = new Point[4];
            switch (vector)
            {
            case Vector4.Left:
                bezierTurn = Math.Min(MaxBezierTurn, Math.Abs(rectTo.Right - rectFrom.Left));
                pts[3]     = new Point(rectTo.Right, rectTo.Y + rectTo.Height / 2);
                pts[2]     = new Point(rectTo.Right + bezierTurn, pts[3].Y);
                break;

            case Vector4.Right:
                bezierTurn = Math.Min(MaxBezierTurn, Math.Abs(rectTo.Left - rectFrom.Right));
                pts[3]     = new Point(rectTo.X, rectTo.Y + rectTo.Height / 2);
                pts[2]     = new Point(rectTo.X - bezierTurn, pts[3].Y);
                break;

            case Vector4.Top:
                bezierTurn = Math.Min(MaxBezierTurn, Math.Abs(rectFrom.Top - rectTo.Bottom));
                pts[3]     = new Point(rectTo.X + rectTo.Width / 2, rectTo.Bottom);
                pts[2]     = new Point(rectTo.X + rectTo.Width / 2, rectTo.Bottom + bezierTurn);
                break;

            case Vector4.Bottom:
                bezierTurn = Math.Min(MaxBezierTurn, Math.Abs(rectTo.Top - rectFrom.Bottom));
                pts[3]     = new Point(rectTo.X + rectTo.Width / 2, rectTo.Top);
                pts[2]     = new Point(rectTo.X + rectTo.Width / 2, rectTo.Top - bezierTurn);
                break;
            }

            Point?startPoint;

            if (shapeFrom == TopicShape.Ellipse)
            {
                startPoint = PaintHelper.GetPointForPointIntersectEllipse(rectFrom, pts[3]);
            }
            else
            {
                startPoint = PaintHelper.GetPointForLineIntersectRectangle(rectFrom, pts[3]);
            }
            if (!startPoint.HasValue)
            {
                return(null);
            }
            pts[0] = startPoint.Value;
            pts[1] = startPoint.Value;

            return(pts);
        }
Пример #3
0
        public void DrawLine(IGraphics graphics, IPen pen,
                             TopicShape shapeFrom, TopicShape shapeTo,
                             Rectangle rectFrom, Rectangle rectTo,
                             Vector4 vectorFrom, Vector4 vectorTo,
                             LineAnchor startAnchor, LineAnchor endAnchor)
        {
            Point[] pts = GetPoints(rectFrom, rectTo, vectorFrom, vectorTo);
            if (pts == null)
            {
                return;
            }

            graphics.DrawLine(pen, pts[0], pts[1], startAnchor, endAnchor);
        }
Пример #4
0
        public static TopicShape GetTopicShape(string str, TopicShape defaultValue)
        {
            int i;

            if (!int.TryParse(str, out i))
            {
                return(defaultValue);
            }

            try
            {
                return((TopicShape)i);
            }
            catch (System.Exception ex)
            {
                Helper.WriteLog(ex);
                return(defaultValue);
            }
        }
Пример #5
0
        public void DrawLine(IGraphics graphics, IPen pen,
                             TopicShape shapeFrom, TopicShape shapeTo,
                             Rectangle rectFrom, Rectangle rectTo,
                             Vector4 vectorFrom, Vector4 vectorTo,
                             LineAnchor startAnchor, LineAnchor endAnchor)
        {
            Point[] pts;
            if (IsRoot)
            {
                pts = GetPointsForRoot(shapeFrom, shapeTo, rectFrom, rectTo, vectorFrom, vectorTo);
            }
            else
            {
                pts = GetPoints(rectFrom, rectTo, vectorFrom, vectorTo);
            }
            if (pts.IsNullOrEmpty())
            {
                return;
            }

            graphics.DrawBezier(pen, pts[0], pts[1], pts[2], pts[3], startAnchor, endAnchor);
        }
Пример #6
0
        public void DrawLine(IGraphics graphics, IPen pen,
                             TopicShape shapeFrom, TopicShape shapeTo,
                             Rectangle rectFrom, Rectangle rectTo,
                             Vector4 vectorFrom, Vector4 vectorTo,
                             LineAnchor startAnchor, LineAnchor endAnchor)
        {
            Point[] pts = GetPoints(rectFrom, rectTo, vectorFrom, vectorTo);
            if (pts == null)
            {
                return;
            }

            var path = graphics.GraphicsPath();

            path.StartFigure();
            path.AddBezier(pts[0], pts[1], pts[2], pts[3]);
            path.AddLine(pts[3], pts[4]);
            path.AddBezier(pts[4], pts[5], pts[6], pts[7]);
            path.CloseFigure();

            graphics.FillPath(graphics.SolidBrush(pen.Color), path);
        }
Пример #7
0
        internal static string _ConvertToString(TopicShape shape)
        {
            switch (shape)
            {
            case TopicShape.Default:
                return(Lang._("Default"));

            case TopicShape.BaseLine:
                return(Lang._("Base Line"));

            case TopicShape.Ellipse:
                return(Lang._("Ellipse"));

            case TopicShape.Rectangle:
                return(Lang._("Rectangle"));

            case TopicShape.None:
                return(Lang._("None"));

            default:
                return(shape.ToString());
            }
        }