Move constructor to top
This commit is contained in:
parent
d1890d6f7f
commit
4eeb3964e0
1 changed files with 193 additions and 189 deletions
|
|
@ -100,195 +100,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||||
private IconButton undoButton;
|
private IconButton undoButton;
|
||||||
private IconButton redoButton;
|
private IconButton redoButton;
|
||||||
|
|
||||||
internal void NotifyResetView()
|
|
||||||
{
|
|
||||||
this.ResetView.Invoke(this, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsPrinterMode { get; }
|
|
||||||
|
|
||||||
public ViewControls3DButtons ActiveButton
|
|
||||||
{
|
|
||||||
get => activeTransformState;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
this.activeTransformState = value;
|
|
||||||
switch (this.activeTransformState)
|
|
||||||
{
|
|
||||||
case ViewControls3DButtons.Rotate:
|
|
||||||
if (rotateButton != null)
|
|
||||||
{
|
|
||||||
rotateButton.Checked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ViewControls3DButtons.Translate:
|
|
||||||
if (translateButton != null)
|
|
||||||
{
|
|
||||||
translateButton.Checked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ViewControls3DButtons.Scale:
|
|
||||||
if (scaleButton != null)
|
|
||||||
{
|
|
||||||
scaleButton.Checked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ViewControls3DButtons.PartSelect:
|
|
||||||
if (partSelectButton != null)
|
|
||||||
{
|
|
||||||
partSelectButton.Checked = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
TransformStateChanged?.Invoke(this, new TransformStateChangedEventArgs()
|
|
||||||
{
|
|
||||||
TransformMode = activeTransformState
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void SetView3DWidget(View3DWidget view3DWidget)
|
|
||||||
{
|
|
||||||
this.view3DWidget = view3DWidget;
|
|
||||||
|
|
||||||
bedMenuButton.DynamicPopupContent = () =>
|
|
||||||
{
|
|
||||||
var workspaceActions = ApplicationController.Instance.GetWorkspaceActions(view3DWidget);
|
|
||||||
var menuTheme = ApplicationController.Instance.MenuTheme;
|
|
||||||
var popupMenu = new PopupMenu(menuTheme);
|
|
||||||
|
|
||||||
int thumbWidth = 45;
|
|
||||||
var gutterWidth = thumbWidth + 7;
|
|
||||||
|
|
||||||
popupMenu.CreateSubMenu("Open Recent".Localize(), menuTheme, (subMenu) =>
|
|
||||||
{
|
|
||||||
int maxItemWidth = 0;
|
|
||||||
|
|
||||||
var recentFiles = new DirectoryInfo(ApplicationDataStorage.Instance.PlatingDirectory).GetFiles("*.mcx").OrderByDescending(f => f.LastWriteTime);
|
|
||||||
foreach (var item in recentFiles.Where(f => f.Length > 215).Select(f => new SceneReplacementFileItem(f.FullName)).Take(12))
|
|
||||||
{
|
|
||||||
var imageBuffer = new ImageBuffer(thumbWidth, thumbWidth);
|
|
||||||
|
|
||||||
var title = new FileInfo(item.Path).LastWriteTime.ToString("MMMM d h:mm tt");
|
|
||||||
|
|
||||||
var bedHistory = subMenu.CreateMenuItem(title, imageBuffer);
|
|
||||||
bedHistory.GutterWidth = gutterWidth;
|
|
||||||
bedHistory.HAnchor = HAnchor.Fit;
|
|
||||||
bedHistory.VAnchor = VAnchor.Absolute;
|
|
||||||
bedHistory.Padding = new BorderDouble(gutterWidth + 3, 2, 12, 2);
|
|
||||||
bedHistory.Height = thumbWidth + 3;
|
|
||||||
bedHistory.Click += (s, e) =>
|
|
||||||
{
|
|
||||||
UiThread.RunOnIdle(async () =>
|
|
||||||
{
|
|
||||||
await ApplicationController.Instance.Tasks.Execute("Saving changes".Localize() + "...", sceneContext.Printer, sceneContext.SaveChanges);
|
|
||||||
|
|
||||||
await sceneContext.LoadLibraryContent(item);
|
|
||||||
|
|
||||||
if (sceneContext.Printer != null)
|
|
||||||
{
|
|
||||||
sceneContext.Printer.ViewState.ViewMode = PartViewMode.Model;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
maxItemWidth = (int) Math.Max(maxItemWidth, bedHistory.Width);
|
|
||||||
|
|
||||||
void UpdateImageBuffer(ImageBuffer thumbnail)
|
|
||||||
{
|
|
||||||
// Dump OpenGL texture
|
|
||||||
ImageGlPlugin.Remove(imageBuffer);
|
|
||||||
|
|
||||||
// Copy updated thumbnail into original image
|
|
||||||
imageBuffer.CopyFrom(thumbnail);
|
|
||||||
|
|
||||||
bedHistory.Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
ApplicationController.Instance.Library.LoadItemThumbnail(
|
|
||||||
UpdateImageBuffer,
|
|
||||||
(contentProvider) =>
|
|
||||||
{
|
|
||||||
if (contentProvider is MeshContentProvider meshContentProvider)
|
|
||||||
{
|
|
||||||
ApplicationController.Instance.Thumbnails.QueueForGeneration(async () =>
|
|
||||||
{
|
|
||||||
// Ask the MeshContentProvider to RayTrace the image
|
|
||||||
var thumbnail = await meshContentProvider.GetThumbnail(item, thumbWidth, thumbWidth);
|
|
||||||
if (thumbnail != null)
|
|
||||||
{
|
|
||||||
UpdateImageBuffer(thumbnail);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
item,
|
|
||||||
ApplicationController.Instance.Library.PlatingHistory,
|
|
||||||
thumbWidth,
|
|
||||||
thumbWidth,
|
|
||||||
menuTheme).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resize menu items to max item width
|
|
||||||
foreach(var menuItem in subMenu.Children)
|
|
||||||
{
|
|
||||||
menuItem.HAnchor = HAnchor.Left | HAnchor.Absolute;
|
|
||||||
menuItem.Width = maxItemWidth;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var actions = new NamedAction[] {
|
|
||||||
new ActionSeparator(),
|
|
||||||
workspaceActions["Cut"],
|
|
||||||
workspaceActions["Copy"],
|
|
||||||
workspaceActions["Paste"],
|
|
||||||
new ActionSeparator(),
|
|
||||||
workspaceActions["Print"],
|
|
||||||
new ActionSeparator(),
|
|
||||||
new NamedAction()
|
|
||||||
{
|
|
||||||
ID = "Export",
|
|
||||||
Title = "Export".Localize(),
|
|
||||||
Icon = AggContext.StaticData.LoadIcon("cube_export.png", 16, 16, menuTheme.InvertIcons),
|
|
||||||
Action = () =>
|
|
||||||
{
|
|
||||||
ApplicationController.Instance.ExportLibraryItems(
|
|
||||||
new[] { new InMemoryLibraryItem(sceneContext.Scene)},
|
|
||||||
centerOnBed: false,
|
|
||||||
printer: view3DWidget.Printer);
|
|
||||||
},
|
|
||||||
IsEnabled = () => sceneContext.EditableScene
|
|
||||||
|| (sceneContext.EditContext.SourceItem is ILibraryAsset libraryAsset
|
|
||||||
&& string.Equals(Path.GetExtension(libraryAsset.FileName) ,".gcode" ,StringComparison.OrdinalIgnoreCase))
|
|
||||||
},
|
|
||||||
new ActionSeparator(),
|
|
||||||
new NamedAction()
|
|
||||||
{
|
|
||||||
ID = "ClearBed",
|
|
||||||
Title = "Clear Bed".Localize(),
|
|
||||||
Action = () =>
|
|
||||||
{
|
|
||||||
UiThread.RunOnIdle(() =>
|
|
||||||
{
|
|
||||||
view3DWidget.ClearPlate();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
menuTheme.CreateMenuItems(popupMenu, actions);
|
|
||||||
|
|
||||||
return popupMenu;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public ViewControls3D(PartWorkspace workspace, ThemeConfig theme, UndoBuffer undoBuffer, bool isPrinterType, bool showPrintButton)
|
public ViewControls3D(PartWorkspace workspace, ThemeConfig theme, UndoBuffer undoBuffer, bool isPrinterType, bool showPrintButton)
|
||||||
: base(theme)
|
: base(theme)
|
||||||
{
|
{
|
||||||
|
|
@ -474,6 +285,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||||
foreach (var operation in operationGroup.Operations)
|
foreach (var operation in operationGroup.Operations)
|
||||||
{
|
{
|
||||||
var operationMenu = popupMenu.CreateMenuItem(operation.Title, operation.Icon?.Invoke(theme.InvertIcons));
|
var operationMenu = popupMenu.CreateMenuItem(operation.Title, operation.Icon?.Invoke(theme.InvertIcons));
|
||||||
|
|
||||||
operationMenu.ToolTipText = operation.HelpText;
|
operationMenu.ToolTipText = operation.HelpText;
|
||||||
operationMenu.Enabled = operation.IsEnabled(sceneContext);
|
operationMenu.Enabled = operation.IsEnabled(sceneContext);
|
||||||
operationMenu.Click += (s, e) => UiThread.RunOnIdle(() =>
|
operationMenu.Click += (s, e) => UiThread.RunOnIdle(() =>
|
||||||
|
|
@ -499,6 +311,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
groupButton.VisibleChanged += (s, e) => Console.WriteLine();
|
||||||
|
|
||||||
|
|
||||||
button = groupButton;
|
button = groupButton;
|
||||||
}
|
}
|
||||||
else if (namedAction.Icon != null)
|
else if (namedAction.Icon != null)
|
||||||
|
|
@ -550,6 +365,195 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||||
Scene_SelectionChanged(null, null);
|
Scene_SelectionChanged(null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void NotifyResetView()
|
||||||
|
{
|
||||||
|
this.ResetView.Invoke(this, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsPrinterMode { get; }
|
||||||
|
|
||||||
|
public ViewControls3DButtons ActiveButton
|
||||||
|
{
|
||||||
|
get => activeTransformState;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.activeTransformState = value;
|
||||||
|
switch (this.activeTransformState)
|
||||||
|
{
|
||||||
|
case ViewControls3DButtons.Rotate:
|
||||||
|
if (rotateButton != null)
|
||||||
|
{
|
||||||
|
rotateButton.Checked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ViewControls3DButtons.Translate:
|
||||||
|
if (translateButton != null)
|
||||||
|
{
|
||||||
|
translateButton.Checked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ViewControls3DButtons.Scale:
|
||||||
|
if (scaleButton != null)
|
||||||
|
{
|
||||||
|
scaleButton.Checked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ViewControls3DButtons.PartSelect:
|
||||||
|
if (partSelectButton != null)
|
||||||
|
{
|
||||||
|
partSelectButton.Checked = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
TransformStateChanged?.Invoke(this, new TransformStateChangedEventArgs()
|
||||||
|
{
|
||||||
|
TransformMode = activeTransformState
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void SetView3DWidget(View3DWidget view3DWidget)
|
||||||
|
{
|
||||||
|
this.view3DWidget = view3DWidget;
|
||||||
|
|
||||||
|
bedMenuButton.DynamicPopupContent = () =>
|
||||||
|
{
|
||||||
|
var workspaceActions = ApplicationController.Instance.GetWorkspaceActions(view3DWidget);
|
||||||
|
var menuTheme = ApplicationController.Instance.MenuTheme;
|
||||||
|
var popupMenu = new PopupMenu(menuTheme);
|
||||||
|
|
||||||
|
int thumbWidth = 45;
|
||||||
|
var gutterWidth = thumbWidth + 7;
|
||||||
|
|
||||||
|
popupMenu.CreateSubMenu("Open Recent".Localize(), menuTheme, (subMenu) =>
|
||||||
|
{
|
||||||
|
int maxItemWidth = 0;
|
||||||
|
|
||||||
|
var recentFiles = new DirectoryInfo(ApplicationDataStorage.Instance.PlatingDirectory).GetFiles("*.mcx").OrderByDescending(f => f.LastWriteTime);
|
||||||
|
foreach (var item in recentFiles.Where(f => f.Length > 215).Select(f => new SceneReplacementFileItem(f.FullName)).Take(12))
|
||||||
|
{
|
||||||
|
var imageBuffer = new ImageBuffer(thumbWidth, thumbWidth);
|
||||||
|
|
||||||
|
var title = new FileInfo(item.Path).LastWriteTime.ToString("MMMM d h:mm tt");
|
||||||
|
|
||||||
|
var bedHistory = subMenu.CreateMenuItem(title, imageBuffer);
|
||||||
|
bedHistory.GutterWidth = gutterWidth;
|
||||||
|
bedHistory.HAnchor = HAnchor.Fit;
|
||||||
|
bedHistory.VAnchor = VAnchor.Absolute;
|
||||||
|
bedHistory.Padding = new BorderDouble(gutterWidth + 3, 2, 12, 2);
|
||||||
|
bedHistory.Height = thumbWidth + 3;
|
||||||
|
bedHistory.Click += (s, e) =>
|
||||||
|
{
|
||||||
|
UiThread.RunOnIdle(async () =>
|
||||||
|
{
|
||||||
|
await ApplicationController.Instance.Tasks.Execute("Saving changes".Localize() + "...", sceneContext.Printer, sceneContext.SaveChanges);
|
||||||
|
|
||||||
|
await sceneContext.LoadLibraryContent(item);
|
||||||
|
|
||||||
|
if (sceneContext.Printer != null)
|
||||||
|
{
|
||||||
|
sceneContext.Printer.ViewState.ViewMode = PartViewMode.Model;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
maxItemWidth = (int)Math.Max(maxItemWidth, bedHistory.Width);
|
||||||
|
|
||||||
|
void UpdateImageBuffer(ImageBuffer thumbnail)
|
||||||
|
{
|
||||||
|
// Dump OpenGL texture
|
||||||
|
ImageGlPlugin.Remove(imageBuffer);
|
||||||
|
|
||||||
|
// Copy updated thumbnail into original image
|
||||||
|
imageBuffer.CopyFrom(thumbnail);
|
||||||
|
|
||||||
|
bedHistory.Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
ApplicationController.Instance.Library.LoadItemThumbnail(
|
||||||
|
UpdateImageBuffer,
|
||||||
|
(contentProvider) =>
|
||||||
|
{
|
||||||
|
if (contentProvider is MeshContentProvider meshContentProvider)
|
||||||
|
{
|
||||||
|
ApplicationController.Instance.Thumbnails.QueueForGeneration(async () =>
|
||||||
|
{
|
||||||
|
// Ask the MeshContentProvider to RayTrace the image
|
||||||
|
var thumbnail = await meshContentProvider.GetThumbnail(item, thumbWidth, thumbWidth);
|
||||||
|
if (thumbnail != null)
|
||||||
|
{
|
||||||
|
UpdateImageBuffer(thumbnail);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
item,
|
||||||
|
ApplicationController.Instance.Library.PlatingHistory,
|
||||||
|
thumbWidth,
|
||||||
|
thumbWidth,
|
||||||
|
menuTheme).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resize menu items to max item width
|
||||||
|
foreach (var menuItem in subMenu.Children)
|
||||||
|
{
|
||||||
|
menuItem.HAnchor = HAnchor.Left | HAnchor.Absolute;
|
||||||
|
menuItem.Width = maxItemWidth;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var actions = new NamedAction[] {
|
||||||
|
new ActionSeparator(),
|
||||||
|
workspaceActions["Cut"],
|
||||||
|
workspaceActions["Copy"],
|
||||||
|
workspaceActions["Paste"],
|
||||||
|
new ActionSeparator(),
|
||||||
|
workspaceActions["Print"],
|
||||||
|
new ActionSeparator(),
|
||||||
|
new NamedAction()
|
||||||
|
{
|
||||||
|
ID = "Export",
|
||||||
|
Title = "Export".Localize(),
|
||||||
|
Icon = AggContext.StaticData.LoadIcon("cube_export.png", 16, 16, menuTheme.InvertIcons),
|
||||||
|
Action = () =>
|
||||||
|
{
|
||||||
|
ApplicationController.Instance.ExportLibraryItems(
|
||||||
|
new[] { new InMemoryLibraryItem(sceneContext.Scene)},
|
||||||
|
centerOnBed: false,
|
||||||
|
printer: view3DWidget.Printer);
|
||||||
|
},
|
||||||
|
IsEnabled = () => sceneContext.EditableScene
|
||||||
|
|| (sceneContext.EditContext.SourceItem is ILibraryAsset libraryAsset
|
||||||
|
&& string.Equals(Path.GetExtension(libraryAsset.FileName) ,".gcode" ,StringComparison.OrdinalIgnoreCase))
|
||||||
|
},
|
||||||
|
new ActionSeparator(),
|
||||||
|
new NamedAction()
|
||||||
|
{
|
||||||
|
ID = "ClearBed",
|
||||||
|
Title = "Clear Bed".Localize(),
|
||||||
|
Action = () =>
|
||||||
|
{
|
||||||
|
UiThread.RunOnIdle(() =>
|
||||||
|
{
|
||||||
|
view3DWidget.ClearPlate();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
menuTheme.CreateMenuItems(popupMenu, actions);
|
||||||
|
|
||||||
|
return popupMenu;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void UndoBuffer_Changed(object sender, EventArgs e)
|
private void UndoBuffer_Changed(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
undoButton.Enabled = undoBuffer.UndoCount > 0;
|
undoButton.Enabled = undoBuffer.UndoCount > 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue