diff --git a/MatterControlLib/DesignTools/EditorTools/RotateControls/RotateCornerControl.cs b/MatterControlLib/DesignTools/EditorTools/RotateControls/RotateCornerControl.cs index 6d8b534aa..1433713bb 100644 --- a/MatterControlLib/DesignTools/EditorTools/RotateControls/RotateCornerControl.cs +++ b/MatterControlLib/DesignTools/EditorTools/RotateControls/RotateCornerControl.cs @@ -850,6 +850,7 @@ namespace MatterHackers.Plugins.EditorTools public override void Dispose() { angleTextControl.Close(); + Object3DControlContext.GuiSurface.AfterDraw -= Object3DControl_AfterDraw; } internal class Mouse3DInfo diff --git a/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleCornerControl.cs b/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleCornerControl.cs index bea103751..6d0c9e937 100644 --- a/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleCornerControl.cs +++ b/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleCornerControl.cs @@ -197,12 +197,12 @@ namespace MatterHackers.Plugins.EditorTools { if (e.ZBuffered) { - Object3DControlContext.World.Render3DLine(clippingFrustum, startPosition, endPosition, theme.TextColor); + Object3DControlContext.World.Render3DLine(clippingFrustum, startPosition, endPosition, theme.TextColor, width: GuiWidget.DeviceScale); } else { // render on top of everything very lightly - Object3DControlContext.World.Render3DLine(clippingFrustum, startPosition, endPosition, new Color(theme.TextColor, 20), false); + Object3DControlContext.World.Render3DLine(clippingFrustum, startPosition, endPosition, new Color(theme.TextColor, 20), false, GuiWidget.DeviceScale); } } @@ -541,6 +541,7 @@ namespace MatterHackers.Plugins.EditorTools { xValueDisplayInfo.Close(); yValueDisplayInfo.Close(); + Object3DControlContext.GuiSurface.AfterDraw -= Object3DControl_AfterDraw; } } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleTopControl.cs b/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleTopControl.cs index 3cda642fe..b38148caf 100644 --- a/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleTopControl.cs +++ b/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleTopControl.cs @@ -183,12 +183,12 @@ namespace MatterHackers.Plugins.EditorTools if (e.ZBuffered) { - Object3DControlContext.World.Render3DLine(clippingFrustum, bottomPosition, topPosition, theme.TextColor); + Object3DControlContext.World.Render3DLine(clippingFrustum, bottomPosition, topPosition, theme.TextColor, width: GuiWidget.DeviceScale); } else { // render on top of everything very lightly - Object3DControlContext.World.Render3DLine(clippingFrustum, bottomPosition, topPosition, new Color(theme.TextColor, 20), false); + Object3DControlContext.World.Render3DLine(clippingFrustum, bottomPosition, topPosition, new Color(theme.TextColor, 20), false, GuiWidget.DeviceScale); } } } @@ -369,6 +369,7 @@ namespace MatterHackers.Plugins.EditorTools public override void Dispose() { zValueDisplayInfo.Close(); + Object3DControlContext.GuiSurface.AfterDraw -= Object3DControl_AfterDraw; } } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Operations/Object3DExtensions.cs b/MatterControlLib/DesignTools/Operations/Object3DExtensions.cs index 85d3fa325..d85081a99 100644 --- a/MatterControlLib/DesignTools/Operations/Object3DExtensions.cs +++ b/MatterControlLib/DesignTools/Operations/Object3DExtensions.cs @@ -57,6 +57,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations { get { + var count = 6; if (_primitiveColors == null) { _primitiveColors = new Dictionary(); @@ -70,12 +71,12 @@ namespace MatterHackers.MatterControl.DesignTools.Operations _primitiveColors.Add("Wedge", BlendHsl("Cube", "Text", 2, 3)); _primitiveColors.Add("HalfWedge", BlendHsl("Cube", "Text", 3, 3)); // mid color - _primitiveColors.Add("Cylinder", BlendHsl("Text", "HalfSphere", 1, 6)); - _primitiveColors.Add("Cone", BlendHsl("Text", "HalfSphere", 2, 6)); - _primitiveColors.Add("HalfCylinder", BlendHsl("Text", "HalfSphere", 3, 6)); - _primitiveColors.Add("Torus", BlendHsl("Text", "HalfSphere", 4, 6)); - _primitiveColors.Add("Ring", BlendHsl("Text", "HalfSphere", 5, 6)); - _primitiveColors.Add("Sphere", BlendHsl("Text", "HalfSphere", 6, 6)); + _primitiveColors.Add("Cylinder", BlendHsl("Text", "HalfSphere", 1, count)); + _primitiveColors.Add("Cone", BlendHsl("Text", "HalfSphere", 2, count)); + _primitiveColors.Add("HalfCylinder", BlendHsl("Text", "HalfSphere", 3, count)); + _primitiveColors.Add("Torus", BlendHsl("Text", "HalfSphere", 4, count)); + _primitiveColors.Add("Ring", BlendHsl("Text", "HalfSphere", 5, count)); + _primitiveColors.Add("Sphere", BlendHsl("Text", "HalfSphere", 6, count)); // end color } diff --git a/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs b/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs index 04f74bac3..43d8f1ff4 100644 --- a/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs @@ -28,6 +28,7 @@ either expressed or implied, of the FreeBSD Project. */ using System.Threading.Tasks; +using MatterHackers.Agg; using MatterHackers.DataConverters3D; using MatterHackers.Localizations; using MatterHackers.PolygonMesh; diff --git a/MatterControlLib/DesignTools/Primitives/MeasureToolObject3D.cs b/MatterControlLib/DesignTools/Primitives/MeasureToolObject3D.cs new file mode 100644 index 000000000..8633603c9 --- /dev/null +++ b/MatterControlLib/DesignTools/Primitives/MeasureToolObject3D.cs @@ -0,0 +1,108 @@ +/* +Copyright (c) 2019, 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 System; +using System.Collections.Generic; +using System.Threading.Tasks; +using MatterHackers.Agg; +using MatterHackers.Agg.UI; +using MatterHackers.DataConverters3D; +using MatterHackers.Localizations; +using MatterHackers.MatterControl.PartPreviewWindow; +using MatterHackers.MeshVisualizer; +using MatterHackers.PolygonMesh; +using MatterHackers.RenderOpenGl; +using MatterHackers.VectorMath; + +namespace MatterHackers.MatterControl.DesignTools +{ + + public class MeasureToolObject3D : Object3D, IObject3DControlsProvider, IEditorDraw + { + public MeasureToolObject3D() + { + Name = "Measure Tool".Localize(); + Color = Color.FromHSL(.11, .98, .76); + } + + public static async Task Create() + { + var item = new MeasureToolObject3D(); + await item.Rebuild(); + return item; + } + + public Vector3 StartPosition { get; set; } = new Vector3(-5, 0, 15); + + public Vector3 EndPosition { get; set; } = new Vector3(5, 0, 15); + + public List GetObject3DControls(Object3DControlsLayer object3DControlsLayer) + { + return new List + { + new TracedPositionObject3DControl(object3DControlsLayer, this, Color.Green, () => StartPosition, (position) => StartPosition = position), + new TracedPositionObject3DControl(object3DControlsLayer, this, Color.Red, () => EndPosition, (position) => EndPosition = position), + }; + } + + public override async void OnInvalidate(InvalidateArgs invalidateType) + { + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) + && invalidateType.Source == this) + { + await Rebuild(); + } + else + { + base.OnInvalidate(invalidateType); + } + } + + public override Task Rebuild() + { + this.DebugDepth("Rebuild"); + + using (RebuildLock()) + { + using (new CenterAndHeightMaintainer(this)) + { + Mesh = PlatonicSolids.CreateCube(20, 20, 10); + } + } + + Parent?.Invalidate(new InvalidateArgs(this, InvalidateType.Mesh)); + return Task.CompletedTask; + } + + public void DrawEditor(Object3DControlsLayer object3DControlLayer, List transparentMeshes, DrawEventArgs e, ref bool suppressNormalDraw) + { + object3DControlLayer.World.Render3DLine(StartPosition.Transform(Matrix), EndPosition.Transform(Matrix), Color.Black, width: GuiWidget.DeviceScale); + } + } +} \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs b/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs new file mode 100644 index 000000000..15faca00c --- /dev/null +++ b/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs @@ -0,0 +1,105 @@ +/* +Copyright (c) 2019, 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; +using MatterHackers.DataConverters3D; +using MatterHackers.MatterControl.PartPreviewWindow; +using MatterHackers.MeshVisualizer; +using MatterHackers.PolygonMesh; +using MatterHackers.RayTracer; +using MatterHackers.RayTracer.Traceable; +using MatterHackers.RenderOpenGl; +using MatterHackers.VectorMath; +using System; + +namespace MatterHackers.MatterControl.DesignTools +{ + public class TracedPositionObject3DControl : IObject3DControl + { + private Color color; + + private Func getPosition; + + private Action setPosition; + + private Mesh shape; + private IObject3D owner; + private ITraceable collisionVolume; + + public TracedPositionObject3DControl(IObject3DControlContext context, IObject3D owner, Color color, Func getPosition, Action setPosition) + { + this.getPosition = getPosition; + this.setPosition = setPosition; + this.color = color; + this.shape = PlatonicSolids.CreateCube(); + this.owner = owner; + collisionVolume = shape.CreateBVHData(); + } + + public bool DrawOnTop => false; + + public string Name => "Traced Position"; + + public bool Visible { get; set; } + + public void CancelOperation() + { + } + + public void Dispose() + { + } + + public void Draw(DrawGlContentEventArgs e) + { + GLHelper.Render(shape, color, owner.Matrix * Matrix4X4.CreateTranslation(getPosition()), RenderTypes.Shaded); + } + + public ITraceable GetTraceable() + { + return new Transform(collisionVolume, owner.Matrix); + } + + public void OnMouseDown(Mouse3DEventArgs mouseEvent3D) + { + } + + public void OnMouseMove(Mouse3DEventArgs mouseEvent3D) + { + } + + public void OnMouseUp(Mouse3DEventArgs mouseEvent3D) + { + } + + public void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo) + { + } + } +} \ No newline at end of file diff --git a/MatterControlLib/Library/Providers/MatterControl/PrimitivesContainer.cs b/MatterControlLib/Library/Providers/MatterControl/PrimitivesContainer.cs index 137bc73fc..bfc212224 100644 --- a/MatterControlLib/Library/Providers/MatterControl/PrimitivesContainer.cs +++ b/MatterControlLib/Library/Providers/MatterControl/PrimitivesContainer.cs @@ -133,6 +133,11 @@ namespace MatterHackers.MatterControl.Library return Task.FromResult(constructedComponent); }) { DateCreated = new System.DateTime(index++) }, + new GeneratorItem( + () => "Measure Tool".Localize(), + async () => await MeasureToolObject3D.Create()) + { DateCreated = new System.DateTime(index++) }, + }; string title = "Primitive Shapes".Localize(); diff --git a/MatterControlLib/PartPreviewWindow/View3D/Gui3D/MoveInZControl.cs b/MatterControlLib/PartPreviewWindow/View3D/Gui3D/MoveInZControl.cs index 9ae6975ec..b8354bc0b 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Gui3D/MoveInZControl.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Gui3D/MoveInZControl.cs @@ -150,6 +150,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public override void Dispose() { zHeightDisplayInfo.Close(); + Object3DControlContext.GuiSurface.AfterDraw -= Object3DControl_AfterDraw; } public override void Draw(DrawGlContentEventArgs e) diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index d449c1120..e6f7c0723 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit d449c1120577c8080d734af538c5116a178b1ff0 +Subproject commit e6f7c072303cf31f9d02ce9e4880aad1ed708050