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); }