From 67a6d9a84acc0af95f33cc912be04ee0f4e8fce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Concei=C3=A7=C3=A3o?= Date: Wed, 23 Sep 2020 20:45:04 +0100 Subject: [PATCH] Add Sonic Mini 4K --- CREDITS.md | 3 +- ImportPrusaSlicerData.bat | 19 ++-- PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini | 37 +++++++ UVtools.WPF/MainWindow.axaml | 104 +++++++++++++++++- UVtools.WPF/MainWindow.axaml.cs | 103 +++++++++++++++-- 5 files changed, 246 insertions(+), 20 deletions(-) create mode 100644 PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini diff --git a/CREDITS.md b/CREDITS.md index a11130d..623eaed 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -30,4 +30,5 @@ * Paul Hammerstrom * Jeremy Lauzon * Peter Teal -* Ulrich Mandl \ No newline at end of file +* Ulrich Mandl +* Erwin Ried \ No newline at end of file diff --git a/ImportPrusaSlicerData.bat b/ImportPrusaSlicerData.bat index 1619412..60ec0f4 100644 --- a/ImportPrusaSlicerData.bat +++ b/ImportPrusaSlicerData.bat @@ -31,15 +31,16 @@ SET files[21]=Phrozen Shuffle XL.ini SET files[22]=Phrozen Shuffle 4K.ini SET files[23]=Phrozen Sonic.ini SET files[24]=Phrozen Sonic Mini.ini -SET files[25]=Phrozen Transform.ini -SET files[26]=Kelant S400.ini -SET files[27]=Wanhao D7.ini -SET files[28]=Wanhao D8.ini -SET files[29]=Creality LD-002R.ini -SET files[30]=Creality LD-002H.ini -SET files[31]=Voxelab Polaris.ini -SET files[32]=Longer Orange 10.ini -SET files[33]=Longer Orange 30.ini +SET files[25]=Phrozen Sonic Mini 4K.ini +SET files[26]=Phrozen Transform.ini +SET files[27]=Kelant S400.ini +SET files[28]=Wanhao D7.ini +SET files[29]=Wanhao D8.ini +SET files[30]=Creality LD-002R.ini +SET files[31]=Creality LD-002H.ini +SET files[32]=Voxelab Polaris.ini +SET files[33]=Longer Orange 10.ini +SET files[34]=Longer Orange 30.ini echo PrusaSlicer Printers Instalation echo This will replace printers, all changes will be discarded diff --git a/PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini b/PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini new file mode 100644 index 0000000..f2cd3c4 --- /dev/null +++ b/PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini @@ -0,0 +1,37 @@ +# generated by PrusaSlicer 2.2.0+win64 on 2020-09-23 at 19:41:00 UTC +absolute_correction = 0 +area_fill = 50 +bed_custom_model = +bed_custom_texture = +bed_shape = 0x0,134.4x0,134.4x75.6,0x75.6 +default_sla_material_profile = Prusa Orange Tough 0.05 +default_sla_print_profile = 0.05 Normal +display_height = 75.6 +display_mirror_x = 0 +display_mirror_y = 1 +display_orientation = landscape +display_pixels_x = 3840 +display_pixels_y = 2160 +display_width = 134.4 +elefant_foot_compensation = 0.2 +elefant_foot_min_width = 0.2 +fast_tilt_time = 5 +gamma_correction = 1 +inherits = Original Prusa SL1 +max_exposure_time = 120 +max_initial_exposure_time = 300 +max_print_height = 130 +min_exposure_time = 1 +min_initial_exposure_time = 1 +print_host = +printer_model = SL1 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MINI_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_10\nBottomLightOffDelay_10\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES +printer_settings_id = +printer_technology = SLA +printer_variant = default +printer_vendor = +printhost_apikey = +printhost_cafile = +relative_correction = 1,1 +slow_tilt_time = 8 +thumbnails = 400x400,800x480 diff --git a/UVtools.WPF/MainWindow.axaml b/UVtools.WPF/MainWindow.axaml index 2207776..9eb4d6a 100644 --- a/UVtools.WPF/MainWindow.axaml +++ b/UVtools.WPF/MainWindow.axaml @@ -416,7 +416,109 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/UVtools.WPF/MainWindow.axaml.cs b/UVtools.WPF/MainWindow.axaml.cs index 5816260..ed9561b 100644 --- a/UVtools.WPF/MainWindow.axaml.cs +++ b/UVtools.WPF/MainWindow.axaml.cs @@ -20,6 +20,7 @@ using Avalonia.Input; using Avalonia.Markup.Xaml; using Avalonia.Media.Imaging; using Avalonia.Threading; +using DynamicData; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; @@ -190,7 +191,6 @@ namespace UVtools.WPF { return; // This should never happen! } - var dialog = new SaveFileDialog { Filters = Helpers.PngFileFilter, @@ -372,6 +372,95 @@ namespace UVtools.WPF #endregion + #region Issues + + public void OnClickDetectIssues() + { + if (!IsFileLoaded) return; + ComputeIssues( + GetIslandDetectionConfiguration(), + GetResinTrapDetectionConfiguration(), + GetTouchingBoundsDetectionConfiguration(), + Settings.Issues.ComputeEmptyLayers); + } + + private async void ComputeIssues(IslandDetectionConfiguration islandConfig = null, + ResinTrapDetectionConfiguration resinTrapConfig = null, + TouchingBoundDetectionConfiguration touchingBoundConfig = null, bool emptyLayersConfig = true) + { + + Issues.Clear(); + IsGUIEnabled = false; + + ProgressWindow.SetTitle("Computing Issues"); + + var task = Task.Factory.StartNew(async () => + { + try + { + var issues = SlicerFile.LayerManager.GetAllIssues(islandConfig, resinTrapConfig, touchingBoundConfig, + emptyLayersConfig, ProgressWindow.RestartProgress()); + return issues; + } + catch (OperationCanceledException) + { + + } + catch (Exception ex) + { + await this.MessageBoxError(ex.Message, "Error while trying compute issues"); + } + finally + { + IsGUIEnabled = true; + } + + return null; + }); + + await ProgressWindow.ShowDialog(this); + if (task.Result.Result is null) return; + Issues.AddRange(task.Result.Result); + + } + + public IslandDetectionConfiguration GetIslandDetectionConfiguration() + { + return new IslandDetectionConfiguration + { + Enabled = Settings.Issues.ComputeIslands, + AllowDiagonalBonds = Settings.Issues.IslandAllowDiagonalBonds, + BinaryThreshold = Settings.Issues.IslandBinaryThreshold, + RequiredAreaToProcessCheck = Settings.Issues.IslandRequiredAreaToProcessCheck, + RequiredPixelBrightnessToProcessCheck = Settings.Issues.IslandRequiredPixelBrightnessToProcessCheck, + RequiredPixelsToSupport = Settings.Issues.IslandRequiredPixelsToSupport, + RequiredPixelBrightnessToSupport = Settings.Issues.IslandRequiredPixelBrightnessToSupport + }; + } + + public ResinTrapDetectionConfiguration GetResinTrapDetectionConfiguration() + { + return new ResinTrapDetectionConfiguration + { + Enabled = Settings.Issues.ComputeResinTraps, + BinaryThreshold = Settings.Issues.ResinTrapBinaryThreshold, + RequiredAreaToProcessCheck = Settings.Issues.ResinTrapRequiredAreaToProcessCheck, + RequiredBlackPixelsToDrain = Settings.Issues.ResinTrapRequiredBlackPixelsToDrain, + MaximumPixelBrightnessToDrain = Settings.Issues.ResinTrapMaximumPixelBrightnessToDrain + }; + } + + public TouchingBoundDetectionConfiguration GetTouchingBoundsDetectionConfiguration() + { + return new TouchingBoundDetectionConfiguration + { + Enabled = Settings.Issues.ComputeTouchingBounds, + //MaximumPixelBrightness = 100 + }; + } + + #endregion + #region Log public bool IsVerbose { @@ -543,16 +632,16 @@ namespace UVtools.WPF set { if (!SetProperty(ref _actualLayer, value)) return; - InvalidateLayerNavigation(); ShowLayer(); + InvalidateLayerNavigation(); } } public void ForceUpdateActualLayer(uint layerIndex = 0) { _actualLayer = layerIndex; - InvalidateLayerNavigation(); ShowLayer(); + InvalidateLayerNavigation(); } public void InvalidateLayerNavigation() @@ -763,9 +852,6 @@ namespace UVtools.WPF return false; }); - //ProgressWindow progressWindow = new ProgressWindow(); - //progressWindow.ShowDialog(this); - await ProgressWindow.ShowDialog(this); if (!task.Result.Result) { @@ -805,7 +891,6 @@ namespace UVtools.WPF UpdateTitle(); - _actualLayer = actualLayer.Clamp(actualLayer, SliderMaximumValue); if (!(mat is null) && Settings.LayerPreview.AutoRotateLayerBestView) { @@ -814,8 +899,8 @@ namespace UVtools.WPF ResetDataContext(); - ShowLayer(); - + ForceUpdateActualLayer(actualLayer.Clamp(actualLayer, SliderMaximumValue)); + if (Settings.LayerPreview.ZoomToFitPrintVolumeBounds) { ZoomToFit();