Added dragging to the histogram center
Added open to the image to path object when backed by an ImageObject
This commit is contained in:
parent
e016241a0b
commit
ac5f4ed2f9
5 changed files with 66 additions and 41 deletions
|
|
@ -477,12 +477,16 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
// grabing the center
|
||||
bool centerDown = false;
|
||||
var centerX = 0.0;
|
||||
var downStart = 0.0;
|
||||
var downEnd = 0.0;
|
||||
histogramBackground.MouseDown += (s, e) =>
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
centerDown = true;
|
||||
centerX = e.Position.X;
|
||||
downStart = RangeStart;
|
||||
downEnd = RangeEnd;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -490,12 +494,19 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
{
|
||||
if (centerDown)
|
||||
{
|
||||
var newStart = RangeStart;
|
||||
var newEnd = RangeEnd;
|
||||
var offset = e.Position.X - centerX;
|
||||
var newEnd = RangeEnd + offset / _histogramRawCache.Width;
|
||||
newEnd = agg_basics.Clamp(newEnd, RangeStart, 1);
|
||||
|
||||
var newStart = RangeStart + offset / _histogramRawCache.Width;
|
||||
newStart = agg_basics.Clamp(newStart, 0, newEnd);
|
||||
if (offset < 0)
|
||||
{
|
||||
newStart = Math.Max(downStart + offset / _histogramRawCache.Width, 0);
|
||||
newEnd = newStart + (downEnd - downStart);
|
||||
}
|
||||
else
|
||||
{
|
||||
newEnd = Math.Min(downEnd + offset / _histogramRawCache.Width, 1);
|
||||
newStart = newEnd - (downEnd - downStart);
|
||||
}
|
||||
|
||||
if (RangeStart != newStart
|
||||
&& RangeEnd != newEnd)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ using Polygons = System.Collections.Generic.List<System.Collections.Generic.List
|
|||
namespace MatterHackers.MatterControl.DesignTools
|
||||
{
|
||||
[HideMeterialAndColor]
|
||||
public class ImageToPathObject3D_2 : Object3D, IImageProvider, IPathObject, ISelectedEditorDraw, IObject3DControlsProvider, IPropertyGridModifier
|
||||
public class ImageToPathObject3D_2 : Object3D, IImageProvider, IPathObject, ISelectedEditorDraw, IObject3DControlsProvider, IPropertyGridModifier, IEditorWidgetModifier
|
||||
{
|
||||
public ImageToPathObject3D_2()
|
||||
{
|
||||
|
|
@ -316,6 +316,15 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
});
|
||||
}
|
||||
|
||||
public void ModifyEditorWidget(GuiWidget widget, ThemeConfig theme, Action requestWidgetUpdate)
|
||||
{
|
||||
var child = this.Children.First();
|
||||
if (child is ImageObject3D imageObject)
|
||||
{
|
||||
ImageObject3D.ModifyImageObjectEditorWidget(imageObject, widget, theme, requestWidgetUpdate);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateControls(PublicPropertyChange change)
|
||||
{
|
||||
change.SetRowVisible(nameof(Histogram), () => AnalysisType != AnalysisTypes.Transparency);
|
||||
|
|
|
|||
|
|
@ -46,13 +46,18 @@ using Newtonsoft.Json;
|
|||
|
||||
namespace MatterHackers.MatterControl.DesignTools
|
||||
{
|
||||
public interface IEditorWidgetModifier
|
||||
{
|
||||
void ModifyEditorWidget(GuiWidget widget, ThemeConfig theme, Action requestWidgetUpdate);
|
||||
}
|
||||
|
||||
public interface IImageProvider
|
||||
{
|
||||
ImageBuffer Image { get; }
|
||||
}
|
||||
|
||||
[HideMeterialAndColor]
|
||||
public class ImageObject3D : AssetObject3D, IImageProvider, IObject3DControlsProvider
|
||||
public class ImageObject3D : AssetObject3D, IImageProvider, IObject3DControlsProvider, IEditorWidgetModifier
|
||||
{
|
||||
private const double DefaultSizeMm = 60;
|
||||
|
||||
|
|
@ -243,19 +248,39 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
return null;
|
||||
}
|
||||
|
||||
public void AddEditorExtra(GuiWidget imageWidget, ThemeConfig theme, Action updateEditorImage)
|
||||
public void ModifyEditorWidget(GuiWidget widget, ThemeConfig theme, Action requestWidgetUpdate)
|
||||
{
|
||||
imageWidget.Click += (s, e) =>
|
||||
ModifyImageObjectEditorWidget(this, widget, theme, requestWidgetUpdate);
|
||||
}
|
||||
|
||||
public static void ModifyImageObjectEditorWidget(ImageObject3D imageObject, GuiWidget widget, ThemeConfig theme, Action requestWidgetUpdate)
|
||||
{
|
||||
widget.Click += (s, e) =>
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
ShowOpenDialog();
|
||||
ShowOpenDialog(imageObject);
|
||||
}
|
||||
|
||||
if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
var popupMenu = new PopupMenu(theme);
|
||||
|
||||
var openMenu = popupMenu.CreateMenuItem("Open".Localize());
|
||||
openMenu.Click += (s2, e2) =>
|
||||
{
|
||||
popupMenu.Close();
|
||||
ShowOpenDialog(imageObject);
|
||||
};
|
||||
|
||||
popupMenu.CreateSeparator();
|
||||
|
||||
var copyMenu = popupMenu.CreateMenuItem("Copy".Localize());
|
||||
copyMenu.Click += (s2, e2) =>
|
||||
{
|
||||
Clipboard.Instance.SetImage(imageObject.Image);
|
||||
};
|
||||
|
||||
var pasteMenu = popupMenu.CreateMenuItem("Paste".Localize());
|
||||
pasteMenu.Click += (s2, e2) =>
|
||||
{
|
||||
|
|
@ -267,28 +292,22 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
filePath,
|
||||
activeImage);
|
||||
|
||||
this.AssetPath = filePath;
|
||||
this.Mesh = null;
|
||||
imageObject.AssetPath = filePath;
|
||||
imageObject.Mesh = null;
|
||||
|
||||
updateEditorImage();
|
||||
requestWidgetUpdate();
|
||||
|
||||
this.Invalidate(InvalidateType.Image);
|
||||
imageObject.Invalidate(InvalidateType.Image);
|
||||
};
|
||||
|
||||
pasteMenu.Enabled = Clipboard.Instance.ContainsImage;
|
||||
|
||||
var copyMenu = popupMenu.CreateMenuItem("Copy".Localize());
|
||||
copyMenu.Click += (s2, e2) =>
|
||||
{
|
||||
Clipboard.Instance.SetImage(this.Image);
|
||||
};
|
||||
|
||||
popupMenu.ShowMenu(imageWidget, e);
|
||||
popupMenu.ShowMenu(widget, e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void ShowOpenDialog()
|
||||
public static void ShowOpenDialog(IAssetObject assetObject)
|
||||
{
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
|
|
@ -305,7 +324,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
return;
|
||||
}
|
||||
|
||||
AssetPath = openParams.FileName;
|
||||
assetObject.AssetPath = openParams.FileName;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -681,9 +681,9 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
object3D.Invalidated += RefreshField;
|
||||
imageWidget.Closed += (s, e) => object3D.Invalidated -= RefreshField;
|
||||
|
||||
if (object3D is ImageObject3D imageObject)
|
||||
if (object3D is IEditorWidgetModifier editorWidgetModifier)
|
||||
{
|
||||
imageObject.AddEditorExtra(imageWidget, theme, UpdateEditorImage);
|
||||
editorWidgetModifier.ModifyEditorWidget(imageWidget, theme, UpdateEditorImage);
|
||||
}
|
||||
|
||||
rowContainer.AddChild(imageWidget);
|
||||
|
|
@ -900,21 +900,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
{
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
// we do this using to make sure that the stream is closed before we try and insert the Picture
|
||||
AggContext.FileDialogs.OpenFileDialog(
|
||||
new OpenFileDialogParams(
|
||||
"Select an image file|*.jpg;*.png;*.bmp;*.gif;*.pdf",
|
||||
multiSelect: false,
|
||||
title: "Add Image".Localize()),
|
||||
(openParams) =>
|
||||
{
|
||||
if (!File.Exists(openParams.FileName))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
assetObject.AssetPath = openParams.FileName;
|
||||
});
|
||||
ImageObject3D.ShowOpenDialog(assetObject);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 2ec468c986a2e2a4b65fc092e120760d3f0e1a2d
|
||||
Subproject commit e084f2a9b64b5e98827ee9929ff84f111a81a61c
|
||||
Loading…
Add table
Add a link
Reference in a new issue