Beispiel #1
0
        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);
            });
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #3
0
        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);
                }
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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;
                }
            }
        }