Esempio n. 1
0
        public Image GetImage(int pixelWidth, int pixelHeight, int contextId)
        {
            _viewMode = (ViewMode)contextId;
            Image image;

            if (_useTimeline && _viewMode.HasFlag(ViewMode.TimelineFlag))
            {
                // Draw the timeline itself
                Viewport viewport = new Viewport(pixelWidth, pixelHeight, 0f, 1f, -2f, 2f);
                image = _timeline.Draw(viewport);
            }
            else
            {
                // Draw painting
                image = this.Draw(pixelWidth, pixelHeight);
            }
            _viewMode = default(ViewMode);
            return(image);
        }
Esempio n. 2
0
        public Image Draw(int pixelWidth, int pixelHeight)
        {
            //!!! always recreate viewport ?
            float    x0       = 0f;
            float    x1       = _viewMode.HasFlag(ViewMode.Logarithmic) ? _itemCountPow : 1f;
            Viewport viewport = new Viewport(
                pixelWidth,
                pixelHeight,
                x0, x1, -1f, 2f,
                yUp: true
                );

            float boundX = viewport.GetUserBounds()[1].X;

            Image image = new Image(viewport); // recreate image

            // fill blank
            image.Rectangle(viewport.GetUserBounds())
            .Add()
            .FillStroke(Color.White, Color.Empty);

            if (_items == null)
            {
                return(image);
            }

            var groupLines   = image.Group().Add();
            var groupCircles = image.Group().Add();
            var groupNumbers = image.Group().Add();

            foreach (Item item in _items)
            {
                if (item.parent != null && item.parent.parent != null)
                {
                    if (item.parent.pos.x == 0f || item.parent.pos.x > boundX)
                    {
                        //continue;
                    }
                }

                item.pos = GetPos(item);

                var   viewPos = GetViewPos(item.pos);
                float radius  = GetViewRadius(item);

                if (item.parent != null)
                {
                    // draw segment-line from the parent
                    int segmentCount = item.parent.parent == null ? 100 : 10;
                    //int segmentCount = 1;
                    var points = Enumerable.Range(0, segmentCount + 1)
                                 .Select(j => GetPos(item, (double)j / segmentCount))
                                 .Select(p => GetViewPos(p))
                                 .ToArray();
                    image.Line(points)
                    .Add(groupLines)
                    .FillStroke(Color.Empty, Color.Gray, strokeWidth: radius * 0.1f);
                }

                image.Circle(viewPos, radius)
                .Add(groupCircles)
                .FillStroke(Color.Gray, Color.Empty);

                string text = item.integer.ToString();
                //if (item.parent != null) text = item.parent.integer.ToString() + "->" + text;
                image.Text(viewPos, text, radius, align: Image.Align.Center, centerHeight: true)
                .Add(groupNumbers)
                .FillStroke(Color.Black, Color.Empty);
            }

            return(image);
        }