From 57ac7d9415e4daa0b5e836df9331b3d97d0dee32 Mon Sep 17 00:00:00 2001 From: MatterHackers Date: Sat, 11 Mar 2023 12:17:09 -0800 Subject: [PATCH] Export to bambu studio --- .../CustomWidgets/ExportPrintItemPage.cs | 13 ++ .../DesignTools/Primitives/BaseObject3D.cs | 6 + .../Library/Export/ExportStlToExecutable.cs | 146 ++++++++++++++++++ StaticData/Translations/Master.txt | 9 ++ 4 files changed, 174 insertions(+) create mode 100644 MatterControlLib/Library/Export/ExportStlToExecutable.cs diff --git a/MatterControlLib/CustomWidgets/ExportPrintItemPage.cs b/MatterControlLib/CustomWidgets/ExportPrintItemPage.cs index 77f7ae394..9bb4b2f44 100644 --- a/MatterControlLib/CustomWidgets/ExportPrintItemPage.cs +++ b/MatterControlLib/CustomWidgets/ExportPrintItemPage.cs @@ -245,6 +245,19 @@ namespace MatterHackers.MatterControl return; } + if (exportPlugin is ExportStlToExecutable) + { + ApplicationController.Instance.Tasks.Execute( + "Saving".Localize() + "...", + printer, + async (reporter, cancellationTokenSource) => + { + await exportPlugin.Generate(libraryItems, null, reporter, cancellationTokenSource.Token); + }); + + return; + } + UiThread.RunOnIdle(() => { string title = ApplicationController.Instance.ProductName + " - " + "Export File".Localize(); diff --git a/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs b/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs index e31909720..2e01d5616 100644 --- a/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs @@ -310,6 +310,12 @@ namespace MatterHackers.MatterControl.DesignTools } } + if (outsidePolygons.Count == 0) + { + // add them all + outsidePolygons.AddRange(polygons); + } + IVertexSource outsideSource = outsidePolygons.CreateVertexStorage(); var polyCenter = outsideSource.GetWeightedCenter(); diff --git a/MatterControlLib/Library/Export/ExportStlToExecutable.cs b/MatterControlLib/Library/Export/ExportStlToExecutable.cs new file mode 100644 index 000000000..c333ff42b --- /dev/null +++ b/MatterControlLib/Library/Export/ExportStlToExecutable.cs @@ -0,0 +1,146 @@ +/* +Copyright (c) 2017, Lars Brubaker, John Lewin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. +*/ + +using MatterHackers.Agg.Image; +using MatterHackers.Agg.Platform; +using MatterHackers.Localizations; +using MatterHackers.MatterControl.DataStorage; +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MatterHackers.MatterControl.Library.Export +{ + public class ExportToBambuStudio : ExportStlToExecutable, IExportPlugin + { + public ExportToBambuStudio() + { + + } + + protected override string regExKeyName => @" Bambu.Studio.1\Shell\Open\Command"; + + public override string ButtonText => "Bambu Studio".Localize(); + + public override string DisabledReason => "Bambu Studio not installed"; + + public void Initialize(PrinterConfig printer) + { + } + } + + public abstract class ExportStlToExecutable + { + private string pathToExe; + + public int Priority => 2; + + protected abstract string regExKeyName { get; } + + abstract public string ButtonText { get; } + + public string FileExtension => ".stl"; + + public string ExtensionFilter => "Save as STL|*.stl"; + + public ImageBuffer Icon { get; } = StaticData.Instance.LoadIcon(Path.Combine("filetypes", "stl.png")); + + public bool Enabled + { + get + { + // get data from the registry for: Computer\HKEY_CLASSES_ROOT\ Bambu.Studio.1\Shell\Open\Command + RegistryKey key = Registry.ClassesRoot.OpenSubKey(regExKeyName); + + if (key != null) + { + pathToExe = key.GetValue("").ToString(); + + var regex = "C:.+.exe"; + var match = System.Text.RegularExpressions.Regex.Match(pathToExe, regex); + pathToExe = match.Value; + + key.Close(); + return true; + } + + return false; + } + } + + public abstract string DisabledReason { get; } + + public bool ExportPossible(ILibraryAsset libraryItem) => true; + + public async Task> Generate(IEnumerable libraryItems, + string noPath, + Action progress, + CancellationToken cancellationToken) + { + string exportTempFileFolder = Path.Combine(ApplicationDataStorage.Instance.ApplicationTempDataPath, "ExportToExe"); + Directory.CreateDirectory(exportTempFileFolder); + var exportFilename = Path.ChangeExtension(Path.Combine(exportTempFileFolder, "TempExport"), ".stl"); + + List bedExports = new List(); + foreach (var item in libraryItems.OfType()) + { + if (!await MeshExport.ExportMesh(item, exportFilename, false, progress)) + { + bedExports.Add(item.Name); + } + } + + if (bedExports.Count == 0) + { + // open the file with the specified exe + ProcessStartInfo startInfo = new ProcessStartInfo(); + startInfo.FileName = $"\"{pathToExe}\""; + startInfo.Arguments = $"\"{exportFilename}\""; + + Process.Start(startInfo); + + return null; + } + + return new List() + { + new ValidationError(ValidationErrors.ItemToSTLExportInvalid) + { + Error = "One or more items cannot be exported as STL".Localize(), + Details = String.Join("\n", bedExports.ToArray()) + } + }; + } + } +} \ No newline at end of file diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 3034ef94f..21c8e89a5 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -502,6 +502,9 @@ Translated:Bad English:Bad Thermistor Translated:Bad Thermistor +English:Bambu Studio +Translated:Bambu Studio + English:Base Translated:Base @@ -1954,6 +1957,9 @@ Translated:Flooded Hot End English:Folder Name Translated:Folder Name +English:Folder Plater +Translated:Folder Plater + English:Font Translated:Font @@ -6229,6 +6235,9 @@ Translated:View XSmall Icons English:Visit MatterHackers.com to Purchase Translated:Visit MatterHackers.com to Purchase +English:Voron Parts Plater +Translated:Voron Parts Plater + English:Wait For Running Clean Translated:Wait For Running Clean