示例#1
0
        /// <summary>
        /// Draw connection (i.e. line with triangle) to specific graphics object.
        /// </summary>
        /// <param name="windowPosition">Position of window described by graphics object in composition area.</param>
        /// <param name="g">Graphics where connection should be drawn.</param>
        public void Draw(Point windowPosition, CompositionManager.EEditorMode mode, Graphics g)
        {
            float startX = _providingModel.GetMidPoint().X;
            float startY = _providingModel.GetMidPoint().Y;
            float endX   = _acceptingModel.GetMidPoint().X;
            float endY   = _acceptingModel.GetMidPoint().Y;

            // calculate triangle point in area points and store them internally
            _trianglePoints = GetTrianglePoints(startX, startY, endX, endY);

            // recalculate trinagle points so they correspond to window and can be draw
            Point[] windowTrianglePoints = new Point[3];
            for (int i = 0; i < 3; i++)
            {
                windowTrianglePoints[i].X = _trianglePoints[i].X - windowPosition.X;
                windowTrianglePoints[i].Y = _trianglePoints[i].Y - windowPosition.Y;
            }

            // modify start and end so they correspond to window
            startX -= windowPosition.X;
            startY -= windowPosition.Y;
            endX   -= windowPosition.X;
            endY   -= windowPosition.Y;

            Pen   pen         = linePen;
            Pen   penTriangle = Pens.Red;
            Brush brush       = Brushes.Blue;

            if (mode == CompositionManager.EEditorMode.RunButNotReloaded)
            {
                pen         = linePenDisabled;
                brush       = Brushes.LightGray;
                penTriangle = Pens.Gray;
            }

            g.DrawLine(pen, startX, startY, endX, endY);

            // we draw the triangle only the link is at least 10 pixels
            if (Math.Abs(startX - endX) + Math.Abs(startY - endY) > 10)
            {
                g.FillPolygon(brush, windowTrianglePoints, System.Drawing.Drawing2D.FillMode.Alternate);
                g.DrawPolygon(penTriangle, windowTrianglePoints);
            }
        }