public GCode2DWidget(PrinterConfig printer, ThemeConfig theme) { this.printer = printer; options = printer.Bed.RendererOptions; this.LocalBounds = new RectangleDouble(0, 0, 100, 100); this.AnchorAll(); // Register listeners printer.Bed.LoadedGCodeChanged += LoadedGCodeChanged; printer.Settings.SettingChanged += Printer_SettingChanged; Printer_SettingChanged(this, null); this.gridSizeMm = printer.Settings.GetValue <Vector2>(SettingsKey.bed_size); this.gridCenterMm = printer.Settings.GetValue <Vector2>(SettingsKey.print_center); // Acquire the bed image bedImage = BedMeshGenerator.CreatePrintBedImage(printer); // Create a semi-transparent overlay with the theme color var overlay = new ImageBuffer(bedImage.Width, bedImage.Height); overlay.NewGraphics2D().Clear(new Color(theme.BackgroundColor, 100)); // Render the overlay onto the bedImage to tint it and reduce its default overbearing light on dark contrast bedImage.NewGraphics2D().Render(overlay, 0, 0); // Preload GL texture for 2D bed image and use MipMaps UiThread.RunOnIdle(() => { ImageGlPlugin.GetImageGlPlugin(bedImage, createAndUseMipMaps: true); }); }
private void Printer_SettingChanged(object sender, StringEventArgs stringEvent) { if (stringEvent != null) { if (stringEvent.Data == SettingsKey.bed_size || stringEvent.Data == SettingsKey.print_center || stringEvent.Data == SettingsKey.bed_shape) { this.gridSizeMm = printer.Settings.GetValue <Vector2>(SettingsKey.bed_size); this.gridCenterMm = printer.Settings.GetValue <Vector2>(SettingsKey.print_center); bedImage = BedMeshGenerator.CreatePrintBedImage(printer); } } }
private void Printer_SettingChanged(object sender, EventArgs e) { if (e is StringEventArgs stringEvent) { if (stringEvent.Data == SettingsKey.bed_size || stringEvent.Data == SettingsKey.print_center || stringEvent.Data == SettingsKey.bed_shape) { this.gridSizeMm = ActiveSliceSettings.Instance.GetValue <Vector2>(SettingsKey.bed_size); this.gridCenterMm = ActiveSliceSettings.Instance.GetValue <Vector2>(SettingsKey.print_center); bedImage = BedMeshGenerator.CreatePrintBedImage(printer); } } }
public GCode2DWidget(PrinterConfig printer, ThemeConfig theme) { this.printer = printer; options = printer.Bed.RendererOptions; this.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; this.LocalBounds = new RectangleDouble(0, 0, 100, 100); this.AnchorAll(); printer.Bed.LoadedGCodeChanged += LoadedGCodeChanged; // make sure we have good settings PrinterSettings.SettingChanged.RegisterEvent(Printer_SettingChanged, ref unregisterEvents); Printer_SettingChanged(this, null); this.gridSizeMm = printer.Settings.GetValue <Vector2>(SettingsKey.bed_size); this.gridCenterMm = printer.Settings.GetValue <Vector2>(SettingsKey.print_center); bedImage = BedMeshGenerator.CreatePrintBedImage(printer).Multiply(theme.TabBodyBackground); }
private void EnsureBedTexture(IObject3D selectedItem, bool clearToPlaceholderImage = true) { // Early exit for invalid cases if (loadingTextures || printer == null) { return; } if (bedTextures == null) { loadingTextures = true; Task.Run(() => { // On first draw we might take a few 100ms to generate textures and this // ensures we get a theme colored bed appearing on screen before out main // textures are finished generating if (clearToPlaceholderImage) { var placeHolderImage = new ImageBuffer(5, 5); var graphics = placeHolderImage.NewGraphics2D(); graphics.Clear(theme.BedColor); SetActiveTexture(placeHolderImage); } try { var bedImage = BedMeshGenerator.CreatePrintBedImage(sceneContext.Printer); if (printer.Settings.Helpers.HotendCount() > 1) { bedTextures = new[] { bedImage, // No limits, basic themed bed new ImageBuffer(bedImage), // T0 limits new ImageBuffer(bedImage), // T1 limits new ImageBuffer(bedImage) // Unioned T0 & T1 limits }; GenerateToolLimitsTexture(printer, 0, bedTextures[1]); GenerateToolLimitsTexture(printer, 1, bedTextures[2]); // Special case for union of both tools GenerateToolLimitsTexture(printer, 2, bedTextures[3]); } else { bedTextures = new[] { bedImage, // No limits, basic themed bed }; activeBedToolClippingImage = 0; } this.SetActiveTexture(bedTextures[0]); } catch { } loadingTextures = false; }); } else if (printer.Settings.Helpers.HotendCount() > 1 && printer.Bed.BedShape == BedShape.Rectangular) { int toolIndex = GetActiveToolIndex(selectedItem); if (activeBedToolClippingImage != toolIndex) { // Clamp to the range that's currently supported if (toolIndex > 2) { toolIndex = -1; } this.SetActiveTexture(bedTextures[toolIndex + 1]); activeBedToolClippingImage = toolIndex; } } }