From 21f43a2992647b06c82e554a5de3279cacd180f7 Mon Sep 17 00:00:00 2001 From: MatterHackers Date: Sat, 14 Jan 2023 13:36:42 -0800 Subject: [PATCH] improving text object --- .../DesignTools/Primitives/TextObject3D.cs | 40 +++++++++++++++---- Program.cs | 4 +- StaticData/Translations/Master.txt | 6 +++ Submodules/agg-sharp | 2 +- 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/MatterControlLib/DesignTools/Primitives/TextObject3D.cs b/MatterControlLib/DesignTools/Primitives/TextObject3D.cs index b20f51709..e16953207 100644 --- a/MatterControlLib/DesignTools/Primitives/TextObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/TextObject3D.cs @@ -92,7 +92,9 @@ namespace MatterHackers.MatterControl.DesignTools return item; } - [EnumDisplay(IconPaths = new string[] { "align_left.png", "align_center_x.png", "align_right.png" }, InvertIcons = true)] + public bool MultiLine { get; set; } + + [EnumDisplay(IconPaths = new string[] { "align_left.png", "align_center_x.png", "align_right.png" }, InvertIcons = true)] public TextAlign Alignment { get; set; } = TextAlign.Left; [DisplayName("Text")] @@ -102,9 +104,13 @@ namespace MatterHackers.MatterControl.DesignTools [DisplayName("Text")] public StringOrExpression MultiLineText { get; set; } = "MultiLine\nText"; - public bool MultiLine { get; set; } + [Description("Leave 0 for no wrapping")] + public DoubleOrExpression WrappingWidth { get; set; } = 0; - [Slider(1, 48, snapDistance: 1)] + [Description("The number of spaces to add after wrapping a line. Very useful for bullet points.")] + public IntOrExpression WrappingIndent { get; set; } = 0; + + [Slider(1, 48, snapDistance: 1)] public DoubleOrExpression PointSize { get; set; } = 24; [MaxDecimalPlaces(2)] @@ -182,10 +188,27 @@ namespace MatterHackers.MatterControl.DesignTools { bool valuesChanged = false; var height = Height.ClampIfNotCalculated(this, .01, 1000000, ref valuesChanged); - var nameToWrite = MultiLine - ? MultiLineText.Value(this).Replace("\\n", "\n").Replace("\r", "\n").Replace("\n\n", "\n") + var wrappingWidth = WrappingWidth.Value(this); + var wrappingIndent = WrappingIndent.ClampIfNotCalculated(this, 0, 100, ref valuesChanged); + + if (wrappingWidth < 10) + { + wrappingWidth = 0; + } + + var textToWrite = MultiLine + ? MultiLineText.Value(this).Replace("\\n", "\n").Replace("\r", "\n") : NameToWrite.Value(this); - if (string.IsNullOrWhiteSpace(nameToWrite)) + + var pointSize = PointSize.Value(this); + + if (MultiLine && wrappingWidth > 0) + { + var wrapper = new EnglishTextWrapping(pointSize); + textToWrite = wrapper.InsertCRs(textToWrite, wrappingWidth, wrappingIndent); + } + + if (string.IsNullOrWhiteSpace(textToWrite)) { Mesh = PlatonicSolids.CreateCube(20, 10, height); } @@ -199,7 +222,6 @@ namespace MatterHackers.MatterControl.DesignTools var offset = Vector2.Zero; double pointsToMm = 0.352778; - var pointSize = PointSize.Value(this); var lineNumber = 1; var leterNumber = 1; var lineObject = new Object3D() @@ -208,7 +230,7 @@ namespace MatterHackers.MatterControl.DesignTools }; list.Add(lineObject); - foreach (var letter in nameToWrite.ToCharArray()) + foreach (var letter in textToWrite.ToCharArray()) { var style = new StyledTypeFace(ApplicationController.GetTypeFace(this.Font), pointSize); var letterPrinter = new TypeFacePrinter(letter.ToString(), style) @@ -328,6 +350,8 @@ namespace MatterHackers.MatterControl.DesignTools change.SetRowVisible(nameof(Alignment), () => MultiLine); change.SetRowVisible(nameof(NameToWrite), () => !MultiLine); change.SetRowVisible(nameof(Height), () => Output == OutputDimensions.Output3D); + change.SetRowVisible(nameof(WrappingWidth), () => MultiLine); + change.SetRowVisible(nameof(WrappingIndent), () => MultiLine); if (change.Changed == nameof(Output)) { refreshToolBar = true; diff --git a/Program.cs b/Program.cs index b586f5cb0..567813325 100644 --- a/Program.cs +++ b/Program.cs @@ -166,12 +166,14 @@ namespace MatterHackers.MatterControl // Set default Agg providers AggContext.Config.ProviderTypes.SystemWindowProvider = "MatterHackers.GlfwProvider.GlfwWindowProvider, MatterHackers.GlfwProvider"; + AggContext.Config.ProviderTypes.SystemWindowProvider = "MatterHackers.MatterControl.WinformsSingleWindowProvider, MatterControl.Winforms"; + // for now we will ship release with the old renderer #if !DEBUG AggContext.Config.ProviderTypes.SystemWindowProvider = "MatterHackers.MatterControl.WinformsSingleWindowProvider, MatterControl.Winforms"; #endif - string userProfilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + string userProfilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); _raygunClient = new RaygunClient("hQIlyUUZRGPyXVXbI6l1dA==") // this is the PC key { diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 1fe5c47d0..03b9b70da 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -6379,6 +6379,12 @@ Translated:Would you like to setup Wifi? English:Wouldn’t Slice Correctly Translated:Wouldn’t Slice Correctly +English:Wrapping Indent +Translated:Wrapping Indent + +English:Wrapping Width +Translated:Wrapping Width + English:Write Filter Translated:Write Filter diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 8dcbd0956..8d9bb9ee8 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 8dcbd095680bdf8c1c3b99dd2bf9b0d48cecb443 +Subproject commit 8d9bb9ee85248a201d83f08ab7eb6d4b0f696ef4