diff --git a/MatterControlLib/DesignTools/EditorTools/RotateControls/PathControl.cs b/MatterControlLib/DesignTools/EditorTools/RotateControls/PathControl.cs index c0d4258c2..1cca63202 100644 --- a/MatterControlLib/DesignTools/EditorTools/RotateControls/PathControl.cs +++ b/MatterControlLib/DesignTools/EditorTools/RotateControls/PathControl.cs @@ -30,6 +30,7 @@ either expressed or implied, of the FreeBSD Project. using System; using System.Collections.Generic; using System.Linq; +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg; using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; @@ -45,7 +46,7 @@ using MatterHackers.VectorMath; namespace MatterHackers.Plugins.EditorTools { - public class PathControl : IObject3DControl, IObject3DControlsProvider + public class PathControl : IObject3DControl, IObject3DControlsProvider { private readonly IObject3DControlContext context; @@ -193,7 +194,7 @@ namespace MatterHackers.Plugins.EditorTools lastItem = selectedItem; - if (selectedItem is PathContainerObject3D pathObject) + if (selectedItem is PathObject3DAbstract pathObject) { var vertexStorage = pathObject.VertexStorage; diff --git a/MatterControlLib/DesignTools/Operations/FindSliceObject3D.cs b/MatterControlLib/DesignTools/Operations/FindSliceObject3D.cs index cea15de64..a574c7724 100644 --- a/MatterControlLib/DesignTools/Operations/FindSliceObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/FindSliceObject3D.cs @@ -29,11 +29,13 @@ either expressed or implied, of the FreeBSD Project. using System.Collections.Generic; using System.Threading.Tasks; +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters3D; using MatterHackers.Localizations; using MatterHackers.MatterControl.DesignTools.Operations; +using MatterHackers.MatterControl.DesignTools.Primitives; using MatterHackers.PolygonMesh; using MatterHackers.PolygonMesh.Csg; using MatterHackers.PolygonMesh.Processors; @@ -83,12 +85,13 @@ namespace MatterHackers.MatterControl.DesignTools public override void Apply(UndoBuffer undoBuffer) { - var newPathObject = new PathObject3D() - { - VertexStorage = new VertexStorage(this.GetVertexSource()) - }; + var newPathObject = new CustomPathObject3D(); - base.Apply(undoBuffer, new IObject3D[] { newPathObject }); + var vertexStorage = new VertexStorage(this.GetVertexSource()); + newPathObject.PathForEditing.SvgDString = vertexStorage.SvgDString; + newPathObject.Rebuild(); + + base.Apply(undoBuffer, new IObject3D[] { newPathObject }); } private void RemoveFacesAboveCut(Mesh mesh) diff --git a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs index 22307b72b..20589eac2 100644 --- a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs @@ -36,6 +36,7 @@ using System; using System.Linq; using System.Threading.Tasks; using ClipperLib; +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg; using MatterHackers.Agg.Image; using MatterHackers.Agg.Image.ThresholdFunctions; @@ -55,7 +56,7 @@ using Polygons = System.Collections.Generic.List true; public override bool MeshIsSolidObject => false; diff --git a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D_2.cs b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D_2.cs index 8751fc23a..8833b631f 100644 --- a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D_2.cs +++ b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D_2.cs @@ -33,6 +33,7 @@ using System.ComponentModel; using System.Linq; using System.Threading.Tasks; using ClipperLib; +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg; using MatterHackers.Agg.Image; using MatterHackers.Agg.Image.ThresholdFunctions; @@ -51,8 +52,8 @@ using Polygons = System.Collections.Generic.List false; + + public bool MeshIsSolidObject => false; + + [PathEditorFactory.ShowOrigin] + public PathEditorFactory.EditableVertexStorage PathForEditing { get; set; } = new PathEditorFactory.EditableVertexStorage(); + + public string ThumbnailName => "Custom Path"; + + public static async Task Create() + { + var item = new CustomPathObject3D(); + await item.Rebuild(); + return item; + } + + public void DrawEditor(Object3DControlsLayer layer, DrawEventArgs e) + { + this.DrawPath(); + } + + public AxisAlignedBoundingBox GetEditorWorldspaceAABB(Object3DControlsLayer layer) + { + return this.GetWorldspaceAabbOfDrawPath(); + } + + public IEnumerable GetOperations() + { + return PathObject3DAbstract.GetOperations(this.GetType()); + } + + public virtual IVertexSource GetVertexSource() + { + return PathForEditing; + } + + public override async void OnInvalidate(InvalidateArgs invalidateArgs) + { + if (invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this) + { + await Rebuild(); + } + else if (Expressions.NeedRebuild(this, invalidateArgs)) + { + await Rebuild(); + } + else if (invalidateArgs.InvalidateType.HasFlag(InvalidateType.Path)) + { + await Rebuild(); + } + else if (invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children)) + + { + base.OnInvalidate(invalidateArgs); + } + } + + public override Task Rebuild() + { + this.DebugDepth("Rebuild"); + + using (RebuildLock()) + { + if (PathForEditing.Count == 0) + { + var maxWidthDepth = 20; + var bottom = -10; + var top = 10; + + var bottomPoint = new Vector2(maxWidthDepth, bottom * 10); + var topPoint = new Vector2(maxWidthDepth, top * 10); + var middlePoint = (bottomPoint + topPoint) / 2; + middlePoint.X *= 2; + + var Point1 = new Vector2(maxWidthDepth, bottom); + var Point2 = new Vector2(maxWidthDepth, bottom + (top - bottom) * .2); + var Point3 = new Vector2(maxWidthDepth * 1.5, bottom + (top - bottom) * .2); + var Point4 = new Vector2(maxWidthDepth * 1.5, bottom + (top - bottom) * .5); + var Point5 = new Vector2(maxWidthDepth * 1.5, bottom + (top - bottom) * .8); + var Point6 = new Vector2(maxWidthDepth, bottom + (top - bottom) * .8); + var Point7 = new Vector2(maxWidthDepth, top); + + var newPath = new VertexStorage(); + newPath.MoveTo(Point1); + newPath.Curve4(Point2, Point3, Point4); + newPath.Curve4(Point5, Point6, Point7); + newPath.ClosePolygon(); + + PathForEditing.SvgDString = newPath.SvgDString; + } + + using (new CenterAndHeightMaintainer(this)) + { + Mesh = PathForEditing.Extrude(Constants.PathPolygonsHeight); + } + } + + this.CancelAllParentBuilding(); + Parent?.Invalidate(new InvalidateArgs(this, InvalidateType.Path)); + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs index 7f11a67be..4f3fbec30 100644 --- a/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs @@ -32,6 +32,7 @@ using System.ComponentModel; using System.Linq; using System.Threading.Tasks; using ClipperLib; +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters2D; @@ -43,14 +44,14 @@ using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.DesignTools.Operations { - public enum ExpandStyles + public enum ExpandStyles { Flat, Round, Sharp, } - public class InflatePathObject3D : PathContainerObject3D, IEditorDraw, IObject3DControlsProvider + public class InflatePathObject3D : PathObject3DAbstract, IEditorDraw, IObject3DControlsProvider { public InflatePathObject3D() { diff --git a/MatterControlLib/DesignTools/Operations/Path/LinearExtrudeObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/LinearExtrudeObject3D.cs index 9829ef18b..6e8a49433 100644 --- a/MatterControlLib/DesignTools/Operations/Path/LinearExtrudeObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/LinearExtrudeObject3D.cs @@ -32,6 +32,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Threading; using System.Threading.Tasks; +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg.UI; using MatterHackers.DataConverters3D; using MatterHackers.DataConverters3D.UndoCommands; @@ -43,7 +44,7 @@ using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.DesignTools.Operations { - public class LinearExtrudeObject3D : PathContainerObject3D, IPrimaryOperationsSpecifier, IPropertyGridModifier + public class LinearExtrudeObject3D : PathObject3DAbstract, IPrimaryOperationsSpecifier, IPropertyGridModifier { [Description("The height of the extrusion")] [Slider(.1, 50, Easing.EaseType.Quadratic, useSnappingGrid: true)] diff --git a/MatterControlLib/DesignTools/Operations/Path/MergePathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/MergePathObject3D.cs index e66f596be..5d13dd70a 100644 --- a/MatterControlLib/DesignTools/Operations/Path/MergePathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/MergePathObject3D.cs @@ -32,6 +32,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters3D; @@ -164,7 +165,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public IEnumerable GetOperations() { - return PathContainerObject3D.GetOperations(this.GetType()); + return PathObject3DAbstract.GetOperations(this.GetType()); } public IVertexSource GetVertexSource() diff --git a/MatterControlLib/DesignTools/Operations/Path/OutlinePathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/OutlinePathObject3D.cs index 2f86c29ef..934ec6cfc 100644 --- a/MatterControlLib/DesignTools/Operations/Path/OutlinePathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/OutlinePathObject3D.cs @@ -33,6 +33,7 @@ using System.ComponentModel; using System.Linq; using System.Threading.Tasks; using ClipperLib; +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg; using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; @@ -45,7 +46,7 @@ using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.DesignTools.Operations { - public class OutlinePathObject3D : PathContainerObject3D, IEditorDraw, IObject3DControlsProvider + public class OutlinePathObject3D : PathObject3DAbstract, IEditorDraw, IObject3DControlsProvider { public OutlinePathObject3D() { diff --git a/MatterControlLib/DesignTools/Operations/PathEditorFactory.cs b/MatterControlLib/DesignTools/Operations/Path/PathEditorFactory.cs similarity index 97% rename from MatterControlLib/DesignTools/Operations/PathEditorFactory.cs rename to MatterControlLib/DesignTools/Operations/Path/PathEditorFactory.cs index b42f4ab7f..b555bc8a1 100644 --- a/MatterControlLib/DesignTools/Operations/PathEditorFactory.cs +++ b/MatterControlLib/DesignTools/Operations/Path/PathEditorFactory.cs @@ -30,11 +30,12 @@ either expressed or implied, of the FreeBSD Project. using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters3D; +using MatterHackers.MatterControl.DesignTools; using MatterHackers.VectorMath; using System; using System.Collections.Generic; -namespace MatterHackers.MatterControl.DesignTools +namespace MatterControlLib.DesignTools.Operations.Path { public class PathEditorFactory : IPropertyEditorFactory { diff --git a/MatterControlLib/DesignTools/Operations/PathEditorWidget.cs b/MatterControlLib/DesignTools/Operations/Path/PathEditorWidget.cs similarity index 96% rename from MatterControlLib/DesignTools/Operations/PathEditorWidget.cs rename to MatterControlLib/DesignTools/Operations/Path/PathEditorWidget.cs index 3967ffb2c..b504176a2 100644 --- a/MatterControlLib/DesignTools/Operations/PathEditorWidget.cs +++ b/MatterControlLib/DesignTools/Operations/Path/PathEditorWidget.cs @@ -34,13 +34,14 @@ using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.ImageProcessing; using MatterHackers.Localizations; +using MatterHackers.MatterControl.DesignTools; using MatterHackers.MatterControl.SlicerConfiguration; using MatterHackers.VectorMath; using System; using System.Linq; using System.Reflection; -namespace MatterHackers.MatterControl.DesignTools +namespace MatterControlLib.DesignTools.Operations.Path { interface IPathEditorDraw { @@ -117,7 +118,7 @@ namespace MatterHackers.MatterControl.DesignTools this.vertexChanged = vertexChanged; this.theme = theme; this.vertexStorage = vertexStorage; - this.beforeLastChange = new VertexStorage(); + beforeLastChange = new VertexStorage(); beforeLastChange.SvgDString = vertexStorage.SvgDString; var toolBar = new FlowLayoutWidget() @@ -129,7 +130,7 @@ namespace MatterHackers.MatterControl.DesignTools toolBar.VAnchor |= VAnchor.Bottom; - this.AddChild(toolBar); + AddChild(toolBar); AddControlsToToolBar(theme, toolBar); } @@ -143,7 +144,7 @@ namespace MatterHackers.MatterControl.DesignTools AddPositionControls(theme, toolBar); } - public static readonly int VectorXYEditWidth = (int)(60 * GuiWidget.DeviceScale + .5); + public static readonly int VectorXYEditWidth = (int)(60 * DeviceScale + .5); private void AddPositionControls(ThemeConfig theme, FlowLayoutWidget toolBar) { @@ -295,14 +296,14 @@ namespace MatterHackers.MatterControl.DesignTools hasBeenStartupPositioned = true; } - if(editableProperty.Source is IPathEditorDraw pathEditorDraw) + if (editableProperty.Source is IPathEditorDraw pathEditorDraw) { pathEditorDraw.BeforePathEditorDraw(graphics2D, this); } new VertexSourceApplyTransform(vertexStorage, TotalTransform).RenderPath(graphics2D, theme.TextColor, 2, true, theme.PrimaryAccentColor.Blend(theme.TextColor, .5), theme.PrimaryAccentColor); - if(editableProperty.PropertyInfo.GetCustomAttributes(true).OfType().FirstOrDefault() is PathEditorFactory.ShowOriginAttribute showAxisAttribute) + if (editableProperty.PropertyInfo.GetCustomAttributes(true).OfType().FirstOrDefault() is PathEditorFactory.ShowOriginAttribute showAxisAttribute) { var leftOrigin = new Vector2(-10000, 0); var rightOrigin = new Vector2(10000, 0); @@ -353,9 +354,9 @@ namespace MatterHackers.MatterControl.DesignTools if (selectedPointIndex == -1) { xEditWidget.Text = "---"; - xEditWidget.Enabled= false; + xEditWidget.Enabled = false; yEditWidget.Text = "---"; - yEditWidget.Enabled= false; + yEditWidget.Enabled = false; sharpButton.Enabled = false; alignedButton.Enabled = false; @@ -395,7 +396,7 @@ namespace MatterHackers.MatterControl.DesignTools xEditWidget.Value = selected.Position.X; yEditWidget.Value = selected.Position.Y; - switch(selected.Hint) + switch (selected.Hint) { case CommandHint.C4Point: case CommandHint.C4ControlToPoint: @@ -551,7 +552,7 @@ namespace MatterHackers.MatterControl.DesignTools } else if (mouseDelta.Y > 0) { - zoomDelta = 1 + (1 * mouseDelta.Y / 100); + zoomDelta = 1 + 1 * mouseDelta.Y / 100; } var mousePreScale = mouseDownPosition; @@ -562,7 +563,7 @@ namespace MatterHackers.MatterControl.DesignTools var mousePostScale = mouseDownPosition; TotalTransform.inverse_transform(ref mousePostScale); - unscaledRenderOffset += (mousePostScale - mousePreScale); + unscaledRenderOffset += mousePostScale - mousePreScale; scaleChanged?.Invoke(unscaledRenderOffset, layerScale); break; @@ -587,7 +588,7 @@ namespace MatterHackers.MatterControl.DesignTools if (FirstWidgetUnderMouse) // TODO: find a good way to decide if you are what the wheel is trying to do { const double deltaFor1Click = 120; - double scaleAmount = (mouseEvent.WheelDelta / deltaFor1Click) * .1; + double scaleAmount = mouseEvent.WheelDelta / deltaFor1Click * .1; ScalePartAndFixPosition(mouseEvent, layerScale + layerScale * scaleAmount); @@ -613,7 +614,7 @@ namespace MatterHackers.MatterControl.DesignTools var mousePostScale = new Vector2(mouseEvent.X, mouseEvent.Y); TotalTransform.inverse_transform(ref mousePostScale); - unscaledRenderOffset += (mousePostScale - mousePreScale); + unscaledRenderOffset += mousePostScale - mousePreScale; scaleChanged?.Invoke(unscaledRenderOffset, layerScale); } diff --git a/MatterControlLib/DesignTools/Operations/Image/PathContainerObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/PathObject3DAbstract.cs similarity index 80% rename from MatterControlLib/DesignTools/Operations/Image/PathContainerObject3D.cs rename to MatterControlLib/DesignTools/Operations/Path/PathObject3DAbstract.cs index 1520e87e5..4f0e1f36d 100644 --- a/MatterControlLib/DesignTools/Operations/Image/PathContainerObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/PathObject3DAbstract.cs @@ -30,15 +30,17 @@ either expressed or implied, of the FreeBSD Project. using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters3D; +using MatterHackers.MatterControl; +using MatterHackers.MatterControl.DesignTools; using MatterHackers.MatterControl.DesignTools.Operations; using MatterHackers.MatterControl.PartPreviewWindow; using MatterHackers.VectorMath; using System; using System.Collections.Generic; -namespace MatterHackers.MatterControl.DesignTools +namespace MatterControlLib.DesignTools.Operations.Path { - public abstract class PathContainerObject3D : Object3D, IEditorDraw, IPrimaryOperationsSpecifier, IPathObject3D + public abstract class PathObject3DAbstract : Object3D, IEditorDraw, IPrimaryOperationsSpecifier, IPathObject3D { public void DrawEditor(Object3DControlsLayer layer, DrawEventArgs e) { @@ -50,13 +52,27 @@ namespace MatterHackers.MatterControl.DesignTools return this.GetWorldspaceAabbOfDrawPath(); } - public VertexStorage VertexStorage { get; set; } + public VertexStorage VertexStorage { get; set; } = new VertexStorage(); public virtual IVertexSource GetVertexSource() { return VertexStorage; } + public override bool CanApply => true; + + public override void Apply(UndoBuffer undoBuffer) + { + if (MeshIsSolidObject) + { + base.Apply(undoBuffer); + } + else + { + this.FlattenToPathObject(undoBuffer); + } + } + public abstract bool MeshIsSolidObject { get; } public static IEnumerable GetOperations(Type type) @@ -78,16 +94,7 @@ namespace MatterHackers.MatterControl.DesignTools public IEnumerable GetOperations() { - return GetOperations(this.GetType()); + return GetOperations(GetType()); } } - - /// - /// This is a class that is specifically holding a path and the mesh is a visualization of the path - /// - public class PathObject3D : PathContainerObject3D - { - // Report that the Mesh is a visual representation of the Path and not a solid object - public override bool MeshIsSolidObject => false; - } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs index 7d3e9be6f..2d29e556b 100644 --- a/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs @@ -31,6 +31,7 @@ using System; using System.ComponentModel; using System.Threading.Tasks; using ClipperLib; +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters2D; @@ -44,7 +45,7 @@ using Polygons = System.Collections.Generic.List await XyCalibrationFaceObject3D.Create()) { DateCreated = new System.DateTime(index++) }, - new GeneratorItem( - "Path".Localize(), - () => - { - var storage = new VertexStorage(); - storage.MoveTo(5, 5); - storage.LineTo(10, 5); - storage.LineTo(7.5, 10); - storage.ClosePolygon(); - - var path = new PathObject3D() - { - VertexStorage = storage - }; - - return Task.FromResult(path); - }) - { DateCreated = new System.DateTime(index++) }, }, Name = "Experimental".Localize() }) diff --git a/MatterControlLib/Library/Providers/MatterControl/Primitives2DContainer.cs b/MatterControlLib/Library/Providers/MatterControl/Primitives2DContainer.cs index 26a7fa53b..143abfd11 100644 --- a/MatterControlLib/Library/Providers/MatterControl/Primitives2DContainer.cs +++ b/MatterControlLib/Library/Providers/MatterControl/Primitives2DContainer.cs @@ -58,6 +58,10 @@ namespace MatterHackers.MatterControl.Library "Box".Localize(), async () => await BoxPathObject3D.Create()) { DateCreated = new DateTime(index++) }, + new GeneratorItem( + "Custom Path".Localize(), + async () => await CustomPathObject3D.Create()) + { DateCreated = new DateTime(index++) }, #if DEBUG new GeneratorItem( "Triangle".Localize(), diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractPathObject3D.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractPathObject3D.cs index 96ab5673f..f677ac71b 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractPathObject3D.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractPathObject3D.cs @@ -27,6 +27,7 @@ of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. */ +using MatterControlLib.DesignTools.Operations.Path; using MatterHackers.Agg; using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; @@ -257,7 +258,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D public IEnumerable GetOperations() { - return PathContainerObject3D.GetOperations(this.GetType()); + return PathObject3DAbstract.GetOperations(this.GetType()); } public IVertexSource GetVertexSource() diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 661f126df..32264001e 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -1279,6 +1279,9 @@ Translated:Curve English:Custom Object Builder Translated:Custom Object Builder +English:Custom Path +Translated:Custom Path + English:Custom Points Translated:Custom Points diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 2ba5e9779..65ed18943 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 2ba5e9779639090ffa4b632aeb014e4b59256ae6 +Subproject commit 65ed18943d895a552136fff3e82bd16809a0b8f5