Exemplo n.º 1
0
        public override void OnDraw(Graphics2D graphics2D)
        {
            var inverseScale = 1 / scalingFactor;

            var offset = Vector2.Zero;

            //graphics2D.PushTransform();

            // Reset to zero
            var existing = graphics2D.GetTransform();

            existing.translation(out double x, out double y);
            offset.X += x;
            offset.Y += y;

            // Center
            if (this.Width > this.Height)
            {
                offset.X += (this.Width / 2) - (bedBounds.Width * scalingFactor / 2);
            }
            else
            {
                offset.Y += (this.Height / 2) - (bedBounds.Height * scalingFactor / 2);
            }

            // Offset considering bed bounds
            offset.X -= bedBounds.Left * scalingFactor;
            offset.Y -= bedBounds.Bottom * scalingFactor;

            // Apply transform
            graphics2D.SetTransform(Affine.NewScaling(scalingFactor) * Affine.NewTranslation(offset));

            // Draw the bed
            this.RenderBed(graphics2D);

            // Build hotend path
            if (this.RenderProbePath)
            {
                this.RenderProbingPath(graphics2D);
            }

            if (this.RenderLevelingData)
            {
                if (currentLevelingFunctions == null)
                {
                    PrintLevelingData levelingData = printer.Settings.Helpers.GetPrintLevelingData();
                    currentLevelingFunctions = new LevelingFunctions(printer, levelingData);
                }

                var levelingTriangles = new VertexStorage();

                foreach (var region in currentLevelingFunctions.Regions)
                {
                    levelingTriangles.MoveTo(region.V0.X, region.V0.Y);

                    levelingTriangles.LineTo(region.V1.X, region.V1.Y);
                    levelingTriangles.LineTo(region.V2.X, region.V2.Y);
                    levelingTriangles.LineTo(region.V0.X, region.V0.Y);
                }

                graphics2D.Render(
                    new Stroke(levelingTriangles),
                    opaqueMinimumAccent);
            }

            // Render probe points
            int i = 0;

            foreach (var position in probePoints)
            {
                var center = new Vector2(position.X, position.Y);

                var circleColor = lightColor;

                if (this.SimplePoints)
                {
                    graphics2D.Render(
                        new Ellipse(center, 4 * inverseScale),
                        opaqueMinimumAccent);
                }
                else
                {
                    if (i < this.ActiveProbeIndex)
                    {
                        circleColor = opaqueMinimumAccent;
                    }
                    else if (i == this.ActiveProbeIndex)
                    {
                        circleColor = opaqueAccent;
                    }

                    graphics2D.Render(
                        new Ellipse(center, 8 * inverseScale),
                        circleColor);

                    graphics2D.DrawString(
                        $"{1 + i++}",
                        center.X,
                        center.Y,
                        justification: Agg.Font.Justification.Center,
                        baseline: Agg.Font.Baseline.BoundsCenter,
                        pointSize: theme.FontSize7 * inverseScale,
                        color: theme.TextColor);
                }
            }

            //graphics2D.PopTransform();

            base.OnDraw(graphics2D);
        }
        public override void OnDraw(Graphics2D graphics2D)
        {
            graphics2D.Rectangle(scaledBedRect, lightColor);

            // Draw some basic bed gridlines
            this.RenderBedGrid(graphics2D);

            // Build hotend path
            if (this.RenderProbePath)
            {
                this.RenderProbingPath(graphics2D);
            }

            if (this.RenderLevelingData)
            {
                if (currentLevelingFunctions == null)
                {
                    PrintLevelingData levelingData = printer.Settings.Helpers.GetPrintLevelingData();
                    currentLevelingFunctions = new LevelingFunctions(printer.Settings, levelingData);
                }

                var levelingTriangles = new VertexStorage();

                foreach (var region in currentLevelingFunctions.Regions)
                {
                    levelingTriangles.MoveTo(region.V0.X * scalingFactor, region.V0.Y * scalingFactor);

                    levelingTriangles.LineTo(region.V1.X * scalingFactor, region.V1.Y * scalingFactor);
                    levelingTriangles.LineTo(region.V2.X * scalingFactor, region.V2.Y * scalingFactor);
                    levelingTriangles.LineTo(region.V0.X * scalingFactor, region.V0.Y * scalingFactor);
                }

                graphics2D.Render(
                    new Stroke(levelingTriangles),
                    opaqueMinimumAccent);
            }

            // Render probe points
            int i = 0;

            foreach (var position in probePoints)
            {
                var center = new Vector2(position.X * scalingFactor, position.Y * scalingFactor);

                var circleColor = lightColor;

                if (this.SimplePoints)
                {
                    graphics2D.Render(
                        new Ellipse(center, 4),
                        opaqueMinimumAccent);
                }
                else
                {
                    if (i < this.ActiveProbeIndex)
                    {
                        circleColor = opaqueMinimumAccent;
                    }
                    else if (i == this.ActiveProbeIndex)
                    {
                        circleColor = opaqueAccent;
                    }

                    graphics2D.Render(
                        new Ellipse(center, 8),
                        circleColor);

                    graphics2D.DrawString(
                        $"{1 + i++}",
                        center.X,
                        center.Y,
                        justification: Agg.Font.Justification.Center,
                        baseline: Agg.Font.Baseline.BoundsCenter,
                        pointSize: theme.FontSize7,
                        color: theme.TextColor);
                }
            }

            base.OnDraw(graphics2D);
        }