Working toward shared ViewControls3D and functional slicing
- More missing functionality restored in action bars/slicing views
This commit is contained in:
parent
44e9cbc09c
commit
08d2a6ab1a
13 changed files with 438 additions and 500 deletions
|
|
@ -55,28 +55,29 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
{
|
||||
private List<Button> activePrintButtons = new List<Button>();
|
||||
private Button addButton;
|
||||
private List<Button> allPrintButtons = new List<Button>();
|
||||
private Button cancelButton;
|
||||
private Button cancelConnectButton;
|
||||
private Button touchScreenConnectButton;
|
||||
private Button addPrinterButton;
|
||||
private Button selectPrinterButton;
|
||||
private List<Button> allPrintButtons = new List<Button>();
|
||||
|
||||
private Button touchScreenConnectButton;
|
||||
private Button cancelConnectButton;
|
||||
private Button resetConnectionButton;
|
||||
private Button doneWithCurrentPartButton;
|
||||
private Button pauseButton;
|
||||
private Button removeButton;
|
||||
private Button reprintButton;
|
||||
private Button resumeButton;
|
||||
private Button skipButton;
|
||||
|
||||
private Button startButton;
|
||||
private Button pauseButton;
|
||||
private Button cancelButton;
|
||||
|
||||
private Button finishSetupButton;
|
||||
|
||||
private EventHandler unregisterEvents;
|
||||
|
||||
public PrintActionRow()
|
||||
|
||||
public PrintActionRow(TextImageButtonFactory buttonFactory, GuiWidget parentWidget)
|
||||
{
|
||||
this.HAnchor = HAnchor.ParentLeftRight;
|
||||
|
||||
AddChildElements();
|
||||
AddChildElements(buttonFactory, parentWidget);
|
||||
|
||||
// Add Handlers
|
||||
PrinterConnectionAndCommunication.Instance.ActivePrintItemChanged.RegisterEvent(onStateChanged, ref unregisterEvents);
|
||||
|
|
@ -84,11 +85,9 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
ProfileManager.ProfilesListChanged.RegisterEvent(onStateChanged, ref unregisterEvents);
|
||||
}
|
||||
|
||||
protected void AddChildElements()
|
||||
protected void AddChildElements(TextImageButtonFactory buttonFactory, GuiWidget parentWidget)
|
||||
{
|
||||
var buttonFactory = ApplicationController.Instance.Theme.ActionRowButtonFactory;
|
||||
|
||||
addButton = buttonFactory.GenerateTooltipButton("Add".Localize(), StaticData.Instance.LoadIcon("icon_circle_plus.png",32,32).InvertLightness());
|
||||
addButton = buttonFactory.GenerateTooltipButton("Add".Localize().ToUpper());
|
||||
addButton.ToolTipText = "Add a file to be printed".Localize();
|
||||
addButton.Margin = new BorderDouble(6, 6, 6, 3);
|
||||
addButton.Click += (s, e) =>
|
||||
|
|
@ -96,7 +95,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
UiThread.RunOnIdle(AddButtonOnIdle);
|
||||
};
|
||||
|
||||
startButton = buttonFactory.GenerateTooltipButton("Print".Localize(), StaticData.Instance.LoadIcon("icon_play_32x32.png",32,32).InvertLightness());
|
||||
startButton = buttonFactory.GenerateTooltipButton("Print".Localize().ToUpper());
|
||||
startButton.Name = "Start Print Button";
|
||||
startButton.ToolTipText = "Begin printing the selected item.".Localize();
|
||||
startButton.Margin = new BorderDouble(6, 6, 6, 3);
|
||||
|
|
@ -108,7 +107,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
finishSetupButton.Margin = new BorderDouble(6, 6, 6, 3);
|
||||
finishSetupButton.Click += onStartButton_Click;
|
||||
|
||||
touchScreenConnectButton = buttonFactory.GenerateTooltipButton("Connect".Localize(), StaticData.Instance.LoadIcon("connect.png", 32,32).InvertLightness());
|
||||
touchScreenConnectButton = buttonFactory.GenerateTooltipButton("Connect".Localize().ToUpper(), StaticData.Instance.LoadIcon("connect.png", 16,16).InvertLightness());
|
||||
touchScreenConnectButton.ToolTipText = "Connect to the printer".Localize();
|
||||
touchScreenConnectButton.Margin = new BorderDouble(0, 6, 6, 3);
|
||||
touchScreenConnectButton.Click += (s, e) =>
|
||||
|
|
@ -131,7 +130,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
}
|
||||
};
|
||||
|
||||
addPrinterButton = buttonFactory.GenerateTooltipButton("Add Printer".Localize());
|
||||
addPrinterButton = buttonFactory.GenerateTooltipButton("Add Printer".Localize().ToUpper());
|
||||
addPrinterButton.ToolTipText = "Select and add a new printer.".Localize();
|
||||
addPrinterButton.Margin = new BorderDouble(6, 6, 6, 3);
|
||||
addPrinterButton.Click += (s, e) =>
|
||||
|
|
@ -139,7 +138,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
UiThread.RunOnIdle(() => WizardWindow.ShowPrinterSetup(true));
|
||||
};
|
||||
|
||||
selectPrinterButton = buttonFactory.GenerateTooltipButton("Select Printer".Localize());
|
||||
selectPrinterButton = buttonFactory.GenerateTooltipButton("Select Printer".Localize().ToUpper());
|
||||
selectPrinterButton.ToolTipText = "Select an existing printer.".Localize();
|
||||
selectPrinterButton.Margin = new BorderDouble(6, 6, 6, 3);
|
||||
selectPrinterButton.Click += (s, e) =>
|
||||
|
|
@ -147,27 +146,23 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
WizardWindow.Show<SetupOptionsPage>("/SetupOptions", "Setup Wizard");
|
||||
};
|
||||
|
||||
resetConnectionButton = buttonFactory.GenerateTooltipButton("Reset".Localize(), StaticData.Instance.LoadIcon("e_stop4.png", 32,32).InvertLightness());
|
||||
resetConnectionButton = buttonFactory.GenerateTooltipButton("Reset".Localize().ToUpper(), StaticData.Instance.LoadIcon("e_stop4.png", 32,32).InvertLightness());
|
||||
resetConnectionButton.ToolTipText = "Reboots the firmware on the controller".Localize();
|
||||
resetConnectionButton.Margin = new BorderDouble(6, 6, 6, 3);
|
||||
resetConnectionButton.Click += (s, e) => UiThread.RunOnIdle(PrinterConnectionAndCommunication.Instance.RebootBoard);
|
||||
|
||||
skipButton = makeButton("Skip".Localize(), "Skip the current item and move to the next in queue".Localize());
|
||||
skipButton.Click += onSkipButton_Click;
|
||||
|
||||
removeButton = makeButton("Remove".Localize(), "Remove current item from queue".Localize());
|
||||
removeButton.Click += onRemoveButton_Click;
|
||||
|
||||
pauseButton = makeButton("Pause".Localize(), "Pause the current print".Localize());
|
||||
pauseButton = buttonFactory.GenerateTooltipButton("Pause".Localize().ToUpper());
|
||||
pauseButton.ToolTipText = "Pause the current print".Localize();
|
||||
pauseButton.Click += (s, e) =>
|
||||
{
|
||||
UiThread.RunOnIdle(PrinterConnectionAndCommunication.Instance.RequestPause);
|
||||
pauseButton.Enabled = false;
|
||||
};
|
||||
this.AddChild(pauseButton);
|
||||
parentWidget.AddChild(pauseButton);
|
||||
allPrintButtons.Add(pauseButton);
|
||||
|
||||
cancelConnectButton = makeButton("Cancel Connect".Localize(), "Stop trying to connect to the printer.".Localize());
|
||||
cancelConnectButton = buttonFactory.GenerateTooltipButton("Cancel Connect".Localize().ToUpper());
|
||||
cancelConnectButton.ToolTipText = "Stop trying to connect to the printer.".Localize();
|
||||
cancelConnectButton.Click += (s, e) => UiThread.RunOnIdle(() =>
|
||||
{
|
||||
ApplicationController.Instance.ConditionalCancelPrint();
|
||||
|
|
@ -175,7 +170,8 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
});
|
||||
|
||||
|
||||
cancelButton = makeButton("Cancel".Localize(), "Stop the current print".Localize());
|
||||
cancelButton = buttonFactory.GenerateTooltipButton("Cancel".Localize().ToUpper());
|
||||
cancelButton.ToolTipText = "Stop the current print".Localize();
|
||||
cancelButton.Name = "Cancel Print Button";
|
||||
cancelButton.Click += (s, e) => UiThread.RunOnIdle(() =>
|
||||
{
|
||||
|
|
@ -183,7 +179,8 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
SetButtonStates();
|
||||
});
|
||||
|
||||
resumeButton = makeButton("Resume".Localize(), "Resume the current print".Localize());
|
||||
resumeButton = buttonFactory.GenerateTooltipButton("Resume".Localize().ToUpper());
|
||||
resumeButton.ToolTipText = "Resume the current print".Localize();
|
||||
resumeButton.Name = "Resume Button";
|
||||
resumeButton.Click += (s, e) =>
|
||||
{
|
||||
|
|
@ -194,63 +191,36 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
pauseButton.Enabled = true;
|
||||
};
|
||||
|
||||
this.AddChild(resumeButton);
|
||||
parentWidget.AddChild(resumeButton);
|
||||
allPrintButtons.Add(resumeButton);
|
||||
|
||||
reprintButton = makeButton("Print Again".Localize(), "Print current item again".Localize());
|
||||
reprintButton.Name = "Print Again Button";
|
||||
reprintButton.Click += onReprintButton_Click;
|
||||
|
||||
doneWithCurrentPartButton = makeButton("Done".Localize(), "Move to next print in queue".Localize());
|
||||
doneWithCurrentPartButton.Name = "Done Button";
|
||||
doneWithCurrentPartButton.Click += (s,e) => UiThread.RunOnIdle(() =>
|
||||
{
|
||||
PrinterConnectionAndCommunication.Instance.ResetToReadyState();
|
||||
QueueData.Instance.RemoveAt(QueueData.Instance.SelectedIndex);
|
||||
// We don't have to change the selected index because we should be on the next one as we deleted the one
|
||||
// we were on.
|
||||
});
|
||||
|
||||
this.Margin = new BorderDouble(0, 0, 10, 0);
|
||||
this.HAnchor = HAnchor.FitToChildren;
|
||||
|
||||
this.AddChild(touchScreenConnectButton);
|
||||
parentWidget.AddChild(touchScreenConnectButton);
|
||||
allPrintButtons.Add(touchScreenConnectButton);
|
||||
|
||||
this.AddChild(addPrinterButton);
|
||||
parentWidget.AddChild(addPrinterButton);
|
||||
allPrintButtons.Add(addPrinterButton);
|
||||
|
||||
this.AddChild(selectPrinterButton);
|
||||
parentWidget.AddChild(selectPrinterButton);
|
||||
allPrintButtons.Add(selectPrinterButton);
|
||||
|
||||
this.AddChild(addButton);
|
||||
parentWidget.AddChild(addButton);
|
||||
allPrintButtons.Add(addButton);
|
||||
|
||||
this.AddChild(startButton);
|
||||
parentWidget.AddChild(startButton);
|
||||
allPrintButtons.Add(startButton);
|
||||
|
||||
this.AddChild(finishSetupButton);
|
||||
parentWidget.AddChild(finishSetupButton);
|
||||
allPrintButtons.Add(finishSetupButton);
|
||||
|
||||
this.AddChild(doneWithCurrentPartButton);
|
||||
allPrintButtons.Add(doneWithCurrentPartButton);
|
||||
|
||||
this.AddChild(skipButton);
|
||||
allPrintButtons.Add(skipButton);
|
||||
|
||||
this.AddChild(cancelButton);
|
||||
parentWidget.AddChild(cancelButton);
|
||||
allPrintButtons.Add(cancelButton);
|
||||
|
||||
this.AddChild(cancelConnectButton);
|
||||
parentWidget.AddChild(cancelConnectButton);
|
||||
allPrintButtons.Add(cancelConnectButton);
|
||||
|
||||
this.AddChild(reprintButton);
|
||||
allPrintButtons.Add(reprintButton);
|
||||
|
||||
this.AddChild(removeButton);
|
||||
allPrintButtons.Add(removeButton);
|
||||
|
||||
this.AddChild(resetConnectionButton);
|
||||
parentWidget.AddChild(resetConnectionButton);
|
||||
allPrintButtons.Add(resetConnectionButton);
|
||||
|
||||
SetButtonStates();
|
||||
|
|
@ -274,15 +244,6 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
}
|
||||
}
|
||||
|
||||
protected Button makeButton(string buttonText, string buttonToolTip = "")
|
||||
{
|
||||
Button button = ApplicationController.Instance.Theme.ActionRowButtonFactory.GenerateTooltipButton(buttonText);
|
||||
button.ToolTipText = buttonToolTip;
|
||||
button.Margin = new BorderDouble(0, 6, 6, 3);
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
//Set the states of the buttons based on the status of PrinterCommunication
|
||||
protected void SetButtonStates()
|
||||
{
|
||||
|
|
@ -310,12 +271,6 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
ShowActiveButtons();
|
||||
EnableActiveButtons();
|
||||
}
|
||||
else if (PrinterConnectionAndCommunication.Instance.ActivePrintItem == null)
|
||||
{
|
||||
this.activePrintButtons.Add(addButton);
|
||||
ShowActiveButtons();
|
||||
EnableActiveButtons();
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (PrinterConnectionAndCommunication.Instance.CommunicationState)
|
||||
|
|
@ -335,13 +290,6 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
else
|
||||
{
|
||||
this.activePrintButtons.Add(startButton);
|
||||
//Show 'skip' button if there are more items in queue
|
||||
if (QueueData.Instance.ItemCount > 1)
|
||||
{
|
||||
this.activePrintButtons.Add(skipButton);
|
||||
}
|
||||
|
||||
this.activePrintButtons.Add(removeButton);
|
||||
}
|
||||
|
||||
EnableActiveButtons();
|
||||
|
|
@ -374,8 +322,6 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
break;
|
||||
|
||||
case PrinterConnectionAndCommunication.CommunicationStates.FinishedPrint:
|
||||
this.activePrintButtons.Add(reprintButton);
|
||||
this.activePrintButtons.Add(doneWithCurrentPartButton);
|
||||
EnableActiveButtons();
|
||||
break;
|
||||
|
||||
|
|
@ -432,24 +378,6 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
WizardWindow.Show<SetupWizardTroubleshooting>("TroubleShooting", "Trouble Shooting");
|
||||
}
|
||||
|
||||
private void onRemoveButton_Click(object sender, EventArgs mouseEvent)
|
||||
{
|
||||
QueueData.Instance.RemoveAt(QueueData.Instance.SelectedIndex);
|
||||
}
|
||||
|
||||
private void onReprintButton_Click(object sender, EventArgs mouseEvent)
|
||||
{
|
||||
UiThread.RunOnIdle(() => PrinterConnectionAndCommunication.Instance.PrintActivePartIfPossible());
|
||||
}
|
||||
|
||||
private void onSkipButton_Click(object sender, EventArgs mouseEvent)
|
||||
{
|
||||
if (QueueData.Instance.ItemCount > 1)
|
||||
{
|
||||
QueueData.Instance.MoveToNext();
|
||||
}
|
||||
}
|
||||
|
||||
string unsavedChangesCaption = "Unsaved Changes";
|
||||
string unsavedChangesMessage = "You have unsaved changes to your part. Are you sure you want to start this print?";
|
||||
private void onStartButton_Click(object sender, EventArgs mouseEvent)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
{
|
||||
HAnchor = HAnchor.ParentLeftRight,
|
||||
Cursor = Cursors.Hand,
|
||||
Margin = new BorderDouble(0, 6, 0, 3)
|
||||
Margin = 0
|
||||
};
|
||||
printerSelector.AddPrinter += (s, e) => WizardWindow.ShowPrinterSetup(true);
|
||||
this.AddChild(printerSelector);
|
||||
|
|
@ -300,7 +300,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
PrinterConnectionAndCommunication.Instance.Disable();
|
||||
}
|
||||
});
|
||||
//this.AddChild(disconnectButton);
|
||||
this.AddChild(disconnectButton);
|
||||
|
||||
foreach (var child in Children)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
|
||||
FlowLayoutWidget printStatusContainer = CreateActivePrinterInfoWidget();
|
||||
|
||||
var printActionRow = new PrintActionRow()
|
||||
var printActionRow = new PrintActionRow(ApplicationController.Instance.Theme.BreadCrumbButtonFactory, this)
|
||||
{
|
||||
VAnchor = VAnchor.ParentTop
|
||||
};
|
||||
|
|
|
|||
|
|
@ -107,6 +107,12 @@ namespace MatterHackers.MatterControl
|
|||
ColumnTwo.CloseAllChildren();
|
||||
PopOutManager.SaveIfClosed = true;
|
||||
|
||||
// HACK: Short term restore auto population of ActivePrintItem based on Queue Index0. Long term, persist Scene as needed before running operations that depend on ActivePrintItem
|
||||
if (PrinterConnectionAndCommunication.Instance.ActivePrintItem == null)
|
||||
{
|
||||
PrinterConnectionAndCommunication.Instance.ActivePrintItem = QueueData.Instance.GetPrintItemWrapper(0);
|
||||
}
|
||||
|
||||
PartPreviewContent partViewContent = new PartPreviewContent(PrinterConnectionAndCommunication.Instance.ActivePrintItem, View3DWidget.WindowMode.Embeded, View3DWidget.AutoRotate.Disabled);
|
||||
partViewContent.AnchorAll();
|
||||
|
||||
|
|
|
|||
|
|
@ -60,8 +60,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
private bool needToRecreateBed = false;
|
||||
|
||||
public PartPreview3DWidget()
|
||||
public PartPreview3DWidget(ViewControls3D viewControls3D)
|
||||
{
|
||||
this.viewControls3D = viewControls3D;
|
||||
|
||||
ActiveSliceSettings.SettingChanged.RegisterEvent(CheckSettingChanged, ref unregisterEvents);
|
||||
ApplicationController.Instance.AdvancedControlsPanelReloading.RegisterEvent(CheckSettingChanged, ref unregisterEvents);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,17 +38,15 @@ using MatterHackers.MeshVisualizer;
|
|||
using MatterHackers.VectorMath;
|
||||
using System;
|
||||
using System.IO;
|
||||
using static MatterHackers.MatterControl.PartPreviewWindow.View3DWidget;
|
||||
|
||||
namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||
{
|
||||
public class PartPreviewContent : GuiWidget
|
||||
public class PartPreviewContent : FlowLayoutWidget
|
||||
{
|
||||
private EventHandler unregisterEvents;
|
||||
|
||||
private View3DWidget partPreviewView;
|
||||
private ViewGcodeBasic viewGcodeBasic;
|
||||
private TabControl tabControl;
|
||||
private Tab layerViewTab;
|
||||
private View3DWidget.AutoRotate autoRotate3DView;
|
||||
private View3DWidget.OpenMode openMode;
|
||||
private View3DWidget.WindowMode windowMode;
|
||||
|
|
@ -64,43 +62,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor;
|
||||
this.AnchorAll();
|
||||
this.LoadPrintItem(printItem);
|
||||
|
||||
PrinterConnectionAndCommunication.Instance.ActivePrintItemChanged.RegisterEvent((s, e) =>
|
||||
{
|
||||
if (windowMode == View3DWidget.WindowMode.Embeded)
|
||||
{
|
||||
this.printItem = PrinterConnectionAndCommunication.Instance.ActivePrintItem;
|
||||
LoadActivePrintItem();
|
||||
}
|
||||
}, ref unregisterEvents);
|
||||
|
||||
// We do this after showing the system window so that when we try and take focus of the parent window (the system window)
|
||||
// it exists and can give the focus to its child the gcode window.
|
||||
if (printItem != null
|
||||
&& Path.GetExtension(printItem.FileLocation).ToUpper() == ".GCODE")
|
||||
{
|
||||
SwitchToGcodeView();
|
||||
}
|
||||
}
|
||||
|
||||
public void Reload(PrintItemWrapper printItem)
|
||||
{
|
||||
this.CloseAllChildren();
|
||||
this.LoadPrintItem(printItem);
|
||||
}
|
||||
|
||||
private async void LoadActivePrintItem()
|
||||
{
|
||||
await partPreviewView.ClearBedAndLoadPrintItemWrapper(printItem);
|
||||
viewGcodeBasic.LoadItem(printItem);
|
||||
}
|
||||
|
||||
private void LoadPrintItem(PrintItemWrapper printItem)
|
||||
{
|
||||
// LoadPrintItem {{
|
||||
var activeSettings = ActiveSliceSettings.Instance;
|
||||
|
||||
tabControl = ApplicationController.Instance.Theme.CreateTabControl();
|
||||
|
||||
string tabTitle = !activeSettings.PrinterSelected ? "Printer".Localize() : activeSettings.GetValue(SettingsKey.printer_name);
|
||||
|
||||
RGBA_Bytes selectedTabColor;
|
||||
if (!UserSettings.Instance.IsTouchScreen)
|
||||
{
|
||||
|
|
@ -113,119 +82,124 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
selectedTabColor = ActiveTheme.Instance.SecondaryAccentColor;
|
||||
}
|
||||
|
||||
double buildHeight = activeSettings.GetValue<double>(SettingsKey.build_height);
|
||||
|
||||
// put in the 3D view
|
||||
partPreviewView = new View3DWidget(printItem,
|
||||
new Vector3(activeSettings.GetValue<Vector2>(SettingsKey.bed_size), buildHeight),
|
||||
activeSettings.GetValue<Vector2>(SettingsKey.print_center),
|
||||
activeSettings.GetValue<BedShape>(SettingsKey.bed_shape),
|
||||
windowMode,
|
||||
autoRotate3DView,
|
||||
openMode);
|
||||
|
||||
string tabTitle = !activeSettings.PrinterSelected ? "Printer".Localize() : activeSettings.GetValue(SettingsKey.printer_name);
|
||||
|
||||
TabPage partPreview3DView = new TabPage(partPreviewView, tabTitle.ToUpper());
|
||||
|
||||
// put in the gcode view
|
||||
ViewGcodeBasic.WindowMode gcodeWindowMode = ViewGcodeBasic.WindowMode.Embeded;
|
||||
if (windowMode == View3DWidget.WindowMode.StandAlone)
|
||||
{
|
||||
gcodeWindowMode = ViewGcodeBasic.WindowMode.StandAlone;
|
||||
}
|
||||
|
||||
viewGcodeBasic = new ViewGcodeBasic(
|
||||
new Vector3(activeSettings.GetValue<Vector2>(SettingsKey.bed_size), buildHeight),
|
||||
activeSettings.GetValue<Vector2>(SettingsKey.print_center),
|
||||
activeSettings.GetValue<BedShape>(SettingsKey.bed_shape), gcodeWindowMode);
|
||||
|
||||
if (windowMode == View3DWidget.WindowMode.StandAlone)
|
||||
{
|
||||
partPreviewView.Closed += (s, e) => Close();
|
||||
viewGcodeBasic.Closed += (s, e) => Close();
|
||||
}
|
||||
|
||||
Tab printerTab;
|
||||
var layerView = new TabPage(viewGcodeBasic, "Layer View".Localize().ToUpper());
|
||||
|
||||
// add the correct tabs based on whether we are stand alone or embedded
|
||||
if (windowMode == View3DWidget.WindowMode.StandAlone || UserSettings.Instance.IsTouchScreen)
|
||||
{
|
||||
printerTab = new SimpleTextTabWidget(
|
||||
partPreview3DView,
|
||||
"3D View Tab",
|
||||
tabControl.TextPointSize,
|
||||
selectedTabColor,
|
||||
new RGBA_Bytes(),
|
||||
ActiveTheme.Instance.TabLabelUnselected,
|
||||
new RGBA_Bytes());
|
||||
|
||||
|
||||
layerViewTab = new SimpleTextTabWidget(
|
||||
layerView,
|
||||
"Layer View Tab",
|
||||
tabControl.TextPointSize,
|
||||
selectedTabColor,
|
||||
new RGBA_Bytes(),
|
||||
ActiveTheme.Instance.TabLabelUnselected,
|
||||
new RGBA_Bytes());
|
||||
}
|
||||
else
|
||||
{
|
||||
printerTab = new PopOutTextTabWidget(
|
||||
partPreview3DView,
|
||||
"3D View Tab",
|
||||
new Vector2(590, 400),
|
||||
tabControl.TextPointSize);
|
||||
|
||||
layerViewTab = new PopOutTextTabWidget(
|
||||
layerView,
|
||||
"Layer View Tab",
|
||||
new Vector2(590, 400),
|
||||
tabControl.TextPointSize);
|
||||
}
|
||||
|
||||
layerViewTab.Selected += (s1, e1) =>
|
||||
{
|
||||
// match the transform from the 3d view
|
||||
viewGcodeBasic.meshViewerWidget.TrackballTumbleWidget.TrackBallController.CopyTransforms(partPreviewView.meshViewerWidget.TrackballTumbleWidget.TrackBallController);
|
||||
};
|
||||
|
||||
printerTab.Selected += (s1, e1) =>
|
||||
{
|
||||
// match the transform from the 3d view
|
||||
partPreviewView.meshViewerWidget.TrackballTumbleWidget.TrackBallController.CopyTransforms(viewGcodeBasic.meshViewerWidget.TrackballTumbleWidget.TrackBallController);
|
||||
};
|
||||
|
||||
// Add a tab for the current printer
|
||||
var printerTab = new SimpleTextTabWidget(
|
||||
new TabPage(new PrinterTabPage(ActiveSliceSettings.Instance, printItem), tabTitle.ToUpper()),
|
||||
"3D View Tab",
|
||||
tabControl.TextPointSize,
|
||||
selectedTabColor,
|
||||
new RGBA_Bytes(),
|
||||
ActiveTheme.Instance.TabLabelUnselected,
|
||||
new RGBA_Bytes());
|
||||
printerTab.ToolTipText = "Preview 3D Design".Localize();
|
||||
layerViewTab.ToolTipText = "Preview layer Tool Paths".Localize();
|
||||
|
||||
tabControl.AddTab(printerTab);
|
||||
tabControl.AddTab(layerViewTab);
|
||||
|
||||
this.AddChild(tabControl);
|
||||
}
|
||||
|
||||
public override void OnLoad(EventArgs args)
|
||||
public void Reload(PrintItemWrapper printItem)
|
||||
{
|
||||
MatterControlApplication.Instance.ActiveView3DWidget = partPreviewView;
|
||||
|
||||
LoadActivePrintItem();
|
||||
|
||||
base.OnLoad(args);
|
||||
this.CloseAllChildren();
|
||||
//this.LoadPrintItem(printItem);
|
||||
System.Diagnostics.Debugger.Break();
|
||||
}
|
||||
|
||||
public void SwitchToGcodeView()
|
||||
public class PrinterTabPage : GuiWidget
|
||||
{
|
||||
tabControl.TabBar.SelectTab(layerViewTab);
|
||||
viewGcodeBasic.Focus();
|
||||
}
|
||||
private View3DWidget modelViewer;
|
||||
private ViewGcodeBasic gcodeViewer;
|
||||
private PrintItemWrapper printItem;
|
||||
private ViewControls3D viewControls3D;
|
||||
|
||||
public override void OnClosed(ClosedEventArgs e)
|
||||
{
|
||||
unregisterEvents?.Invoke(this, null);
|
||||
base.OnClosed(e);
|
||||
public PrinterTabPage(PrinterSettings activeSettings, PrintItemWrapper printItem)
|
||||
{
|
||||
double buildHeight = activeSettings.GetValue<double>(SettingsKey.build_height);
|
||||
|
||||
var topToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom);
|
||||
topToBottom.AnchorAll();
|
||||
this.AddChild(topToBottom);
|
||||
|
||||
topToBottom.AddChild(new PrinterActionsBar());
|
||||
|
||||
viewControls3D = new ViewControls3D()
|
||||
{
|
||||
PartSelectVisible = false,
|
||||
VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren | VAnchor.AbsolutePosition,
|
||||
HAnchor = HAnchor.ParentLeft | HAnchor.FitToChildren,
|
||||
Visible = true,
|
||||
Margin = new BorderDouble(3, 0, 0, 51)
|
||||
};
|
||||
viewControls3D.ResetView += (sender, e) =>
|
||||
{
|
||||
modelViewer.meshViewerWidget.ResetView();
|
||||
};
|
||||
|
||||
// The 3D model view
|
||||
modelViewer = new View3DWidget(printItem,
|
||||
new Vector3(activeSettings.GetValue<Vector2>(SettingsKey.bed_size), buildHeight),
|
||||
activeSettings.GetValue<Vector2>(SettingsKey.print_center),
|
||||
activeSettings.GetValue<BedShape>(SettingsKey.bed_shape),
|
||||
View3DWidget.WindowMode.Embeded,
|
||||
View3DWidget.AutoRotate.Disabled,
|
||||
viewControls3D,
|
||||
View3DWidget.OpenMode.Editing);
|
||||
topToBottom.AddChild(modelViewer);
|
||||
|
||||
// The slice layers view
|
||||
gcodeViewer = new ViewGcodeBasic(
|
||||
new Vector3(activeSettings.GetValue<Vector2>(SettingsKey.bed_size), buildHeight),
|
||||
activeSettings.GetValue<Vector2>(SettingsKey.print_center),
|
||||
activeSettings.GetValue<BedShape>(SettingsKey.bed_shape),
|
||||
ViewGcodeBasic.WindowMode.Embeded,
|
||||
viewControls3D);
|
||||
gcodeViewer.AnchorAll();
|
||||
this.gcodeViewer.Visible = false;
|
||||
topToBottom.AddChild(gcodeViewer);
|
||||
|
||||
this.printItem = printItem;
|
||||
|
||||
//this.DebugShowBounds = true;
|
||||
|
||||
|
||||
this.AddChild(viewControls3D);
|
||||
|
||||
this.AnchorAll();
|
||||
}
|
||||
|
||||
public void ToggleView()
|
||||
{
|
||||
bool layersVisible = gcodeViewer.Visible;
|
||||
|
||||
if (layersVisible)
|
||||
{
|
||||
// Copy layers tumble state to partpreview
|
||||
}
|
||||
else
|
||||
{
|
||||
// Copy partpreview tumble state to layers
|
||||
}
|
||||
|
||||
modelViewer.Visible = layersVisible;
|
||||
gcodeViewer.Visible = !modelViewer.Visible;
|
||||
}
|
||||
|
||||
private async void LoadActivePrintItem()
|
||||
{
|
||||
await modelViewer.ClearBedAndLoadPrintItemWrapper(printItem);
|
||||
gcodeViewer.LoadItem();
|
||||
}
|
||||
|
||||
public override void OnLoad(EventArgs args)
|
||||
{
|
||||
MatterControlApplication.Instance.ActiveView3DWidget = modelViewer;
|
||||
LoadActivePrintItem();
|
||||
base.OnLoad(args);
|
||||
}
|
||||
|
||||
public override void OnClosed(ClosedEventArgs e)
|
||||
{
|
||||
base.OnClosed(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -38,13 +38,19 @@ using MatterHackers.MatterControl.Library;
|
|||
|
||||
namespace MatterHackers.MatterControl
|
||||
{
|
||||
public class SaveAsContext : LibraryConfig
|
||||
{
|
||||
}
|
||||
|
||||
public class SaveAsWindow : SystemWindow
|
||||
{
|
||||
private Action<SaveAsReturnInfo, Action> functionToCallOnSaveAs;
|
||||
private TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
|
||||
private MHTextEditWidget textToAddWidget;
|
||||
ListView librarySelectorWidget;
|
||||
Button saveAsButton;
|
||||
private ListView librarySelectorWidget;
|
||||
private Button saveAsButton;
|
||||
|
||||
private ILibraryContext libraryNavContext;
|
||||
|
||||
public SaveAsWindow(Action<SaveAsReturnInfo, Action> functionToCallOnSaveAs, ILibraryContainer providerLocator, bool showQueue, bool getNewName)
|
||||
: base(480, 500)
|
||||
|
|
@ -94,26 +100,24 @@ namespace MatterHackers.MatterControl
|
|||
BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor
|
||||
};
|
||||
|
||||
// TODO: Needs a separate implementation that doesn't change the standard list view contents as we browse around
|
||||
throw new NotImplementedException();
|
||||
libraryNavContext = new SaveAsContext()
|
||||
{
|
||||
ActiveContainer = ApplicationController.Instance.Library.RootLibaryContainer
|
||||
};
|
||||
libraryNavContext.ContainerChanged += (s, e) =>
|
||||
{
|
||||
/* Still Needed?
|
||||
breadCrumbWidget.SetBreadCrumbs(e.ActiveContainer); */
|
||||
|
||||
librarySelectorWidget = new ListView(ApplicationController.Instance.Library);
|
||||
saveAsButton.Enabled = libraryNavContext.ActiveContainer is ILibraryWritableContainer;
|
||||
};
|
||||
|
||||
librarySelectorWidget = new ListView(libraryNavContext);
|
||||
|
||||
// put in the bread crumb widget
|
||||
var breadCrumbWidget = new FolderBreadCrumbWidget(librarySelectorWidget);
|
||||
middleRowContainer.AddChild(breadCrumbWidget);
|
||||
|
||||
// TODO: Resolve
|
||||
/*
|
||||
librarySelectorWidget.LibraryContainerChanged += (s, e) =>
|
||||
{
|
||||
breadCrumbWidget.SetBreadCrumbs(e.ActiveContainer);
|
||||
|
||||
// Once we have navigated to any provider enable the ability to click the save as button.
|
||||
saveAsButton.Enabled = true;
|
||||
|
||||
}; */
|
||||
|
||||
// put in the area to pick the provider to save to
|
||||
// Adds text box and check box to the above container
|
||||
GuiWidget chooseWindow = new GuiWidget(10, 30)
|
||||
|
|
|
|||
|
|
@ -55,7 +55,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
var buttonFactory = ApplicationController.Instance.Theme.BreadCrumbButtonFactory;
|
||||
|
||||
this.AddChild(new PrinterConnectButton(buttonFactory));
|
||||
//this.AddChild(new ResetButton(buttonFactory));
|
||||
|
||||
this.AddChild(new PrintActionRow(buttonFactory, this));
|
||||
|
||||
//ImageBuffer terminalSettingsImage = StaticData.Instance.LoadIcon("terminal-24x24.png", 24, 24).InvertLightness();
|
||||
var terminalButton = buttonFactory.Generate("Terminal".Localize().ToUpper());
|
||||
|
|
@ -78,6 +79,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
this.AddChild(new HorizontalSpacer());
|
||||
|
||||
this.AddChild(GeneratePopupContent());
|
||||
|
||||
var overflowDropdown = new OverflowDropdown(allowLightnessInvert: true)
|
||||
{
|
||||
AlignToRightEdge = true,
|
||||
|
|
@ -89,6 +92,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
private GuiWidget GeneratePopupContent()
|
||||
{
|
||||
var widgetToPop = new FlowLayoutWidget();
|
||||
widgetToPop.MaximumSize = new VectorMath.Vector2(280, 35);
|
||||
|
||||
widgetToPop.AddChild(new PrinterSelectEditDropdown());
|
||||
|
||||
|
|
|
|||
|
|
@ -239,7 +239,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
protected FlowLayoutWidget editPlateButtonsContainer;
|
||||
|
||||
public View3DWidget(PrintItemWrapper printItemWrapper, Vector3 viewerVolume, Vector2 bedCenter, BedShape bedShape, WindowMode windowType, AutoRotate autoRotate, OpenMode openMode = OpenMode.Viewing)
|
||||
public View3DWidget(PrintItemWrapper printItemWrapper, Vector3 viewerVolume, Vector2 bedCenter, BedShape bedShape, WindowMode windowType, AutoRotate autoRotate, ViewControls3D viewControls3D, OpenMode openMode = OpenMode.Viewing)
|
||||
: base(viewControls3D)
|
||||
{
|
||||
this.openMode = openMode;
|
||||
this.windowType = windowType;
|
||||
|
|
@ -261,13 +262,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
var textImageButtonFactory = ApplicationController.Instance.Theme.BreadCrumbButtonFactorySmallMargins;
|
||||
|
||||
mainContainerTopToBottom.AddChild(new PrinterActionsBar());
|
||||
|
||||
GuiWidget viewArea = new GuiWidget();
|
||||
viewArea.AnchorAll();
|
||||
{
|
||||
meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape);
|
||||
|
||||
viewControls3D.RegisterViewer(meshViewerWidget);
|
||||
|
||||
PutOemImageOnBed();
|
||||
|
||||
meshViewerWidget.AnchorAll();
|
||||
|
|
@ -491,12 +492,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
buttonRightPanelHolder.Visible = Sidebar.Visible;
|
||||
};
|
||||
|
||||
viewControls3D = new ViewControls3D(meshViewerWidget);
|
||||
viewControls3D.ResetView += (sender, e) =>
|
||||
{
|
||||
meshViewerWidget.ResetView();
|
||||
};
|
||||
|
||||
buttonRightPanelDisabledCover = new GuiWidget()
|
||||
{
|
||||
HAnchor = HAnchor.ParentLeftRight,
|
||||
|
|
@ -505,7 +500,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
buttonRightPanelDisabledCover.BackgroundColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryBackgroundColor, 150);
|
||||
buttonRightPanelHolder.AddChild(buttonRightPanelDisabledCover);
|
||||
|
||||
viewControls3D.PartSelectVisible = false;
|
||||
LockEditControls();
|
||||
|
||||
GuiWidget leftRightSpacer = new GuiWidget();
|
||||
|
|
@ -528,7 +522,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
this.AnchorAll();
|
||||
|
||||
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
|
||||
AddChild(viewControls3D);
|
||||
|
||||
|
||||
/* TODO: Why doesn't this pattern work but using new SelectedObjectPanel object does?
|
||||
|
|
@ -1593,8 +1586,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
SplitButton splitButton = new SplitButton(button, menu);
|
||||
*/
|
||||
|
||||
var textImageButtonFactory = ApplicationController.Instance.Theme.BreadCrumbButtonFactorySmallMargins;
|
||||
|
||||
SplitButtonFactory splitButtonFactory = new SplitButtonFactory();
|
||||
splitButtonFactory.FixedHeight = 40 * GuiWidget.DeviceScale;
|
||||
splitButtonFactory.FixedHeight = textImageButtonFactory.FixedHeight;
|
||||
|
||||
saveButtons = splitButtonFactory.Generate(buttonList, Direction.Up, imageName: "icon_save_32x32.png");
|
||||
saveButtons.Visible = false;
|
||||
|
|
@ -2122,11 +2117,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
var libraryToSaveTo = returnInfo.destinationLibraryProvider;
|
||||
if (libraryToSaveTo != null)
|
||||
{
|
||||
libraryToSaveTo.AddItem(printItemWrapper);
|
||||
var writableContainer = libraryToSaveTo as ILibraryWritableContainer;
|
||||
if (writableContainer != null)
|
||||
{
|
||||
writableContainer.Add(new[] { new FileSystemFileItem(printItemWrapper.FileLocation) });
|
||||
|
||||
throw new NotImplementedException();
|
||||
// HACK: This is a short term hack to get back into the game
|
||||
// Set active item
|
||||
//PrinterConnectionAndCommunication.Instance.ActivePrintItem = printItemWrapper;
|
||||
}
|
||||
|
||||
//libraryToSaveTo.Dispose();
|
||||
libraryToSaveTo.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ using System.Collections.Generic;
|
|||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
using MatterHackers.RenderOpenGl;
|
||||
using MatterHackers.MatterControl.CustomWidgets;
|
||||
using System.Linq;
|
||||
|
||||
namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||
{
|
||||
|
|
@ -54,7 +55,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
public class ViewControls3D : FlowLayoutWidget
|
||||
{
|
||||
private GuiWidget partSelectSeparator;
|
||||
private MeshViewerWidget meshViewerWidget;
|
||||
private List<MeshViewerWidget> meshViewers = new List<MeshViewerWidget>();
|
||||
|
||||
private Button resetViewButton;
|
||||
|
||||
|
|
@ -65,10 +66,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
private EventHandler unregisterEvents;
|
||||
|
||||
private OverflowDropdown overflowButton;
|
||||
|
||||
private int buttonHeight;
|
||||
|
||||
public event EventHandler ResetView;
|
||||
|
||||
|
||||
public bool PartSelectVisible
|
||||
{
|
||||
get { return partSelectSeparator.Visible; }
|
||||
|
|
@ -91,32 +95,37 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
this.activeTransformState = value;
|
||||
|
||||
switch(value)
|
||||
foreach (var meshViewerWidget in meshViewers)
|
||||
{
|
||||
case ViewControls3DButtons.Rotate:
|
||||
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
|
||||
rotateButton.Checked = true;
|
||||
break;
|
||||
switch (value)
|
||||
{
|
||||
case ViewControls3DButtons.Rotate:
|
||||
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
|
||||
rotateButton.Checked = true;
|
||||
break;
|
||||
|
||||
case ViewControls3DButtons.Translate:
|
||||
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Translation;
|
||||
translateButton.Checked = true;
|
||||
break;
|
||||
case ViewControls3DButtons.Translate:
|
||||
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Translation;
|
||||
translateButton.Checked = true;
|
||||
break;
|
||||
|
||||
case ViewControls3DButtons.Scale:
|
||||
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Scale;
|
||||
scaleButton.Checked = true;
|
||||
break;
|
||||
case ViewControls3DButtons.Scale:
|
||||
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Scale;
|
||||
scaleButton.Checked = true;
|
||||
break;
|
||||
|
||||
case ViewControls3DButtons.PartSelect:
|
||||
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.None;
|
||||
partSelectButton.Checked = true;
|
||||
break;
|
||||
case ViewControls3DButtons.PartSelect:
|
||||
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.None;
|
||||
partSelectButton.Checked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ViewControls3D(MeshViewerWidget meshViewerWidget)
|
||||
public MeshViewerWidget FirstMeshViewer { get; private set; }
|
||||
|
||||
public ViewControls3D()
|
||||
{
|
||||
if (UserSettings.Instance.IsTouchScreen)
|
||||
{
|
||||
|
|
@ -127,7 +136,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
buttonHeight = 0;
|
||||
}
|
||||
|
||||
this.meshViewerWidget = meshViewerWidget;
|
||||
var textImageButtonFactory = new TextImageButtonFactory()
|
||||
{
|
||||
normalTextColor = ActiveTheme.Instance.PrimaryTextColor,
|
||||
|
|
@ -145,29 +153,29 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
iconPath = Path.Combine("ViewTransformControls", "reset.png");
|
||||
resetViewButton = textImageButtonFactory.Generate("", StaticData.Instance.LoadIcon(iconPath,32,32).InvertLightness());
|
||||
resetViewButton.ToolTipText = "Reset View".Localize();
|
||||
AddChild(resetViewButton);
|
||||
resetViewButton.Click += (s, e) => ResetView?.Invoke(this, null);
|
||||
AddChild(resetViewButton);
|
||||
|
||||
iconPath = Path.Combine("ViewTransformControls", "rotate.png");
|
||||
rotateButton = textImageButtonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath,32,32));
|
||||
rotateButton.ToolTipText = "Rotate (Alt + Left Mouse)".Localize();
|
||||
rotateButton.Margin = new BorderDouble(3);
|
||||
AddChild(rotateButton);
|
||||
rotateButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.Rotate;
|
||||
AddChild(rotateButton);
|
||||
|
||||
iconPath = Path.Combine("ViewTransformControls", "translate.png");
|
||||
translateButton = textImageButtonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath,32,32));
|
||||
translateButton.ToolTipText = "Move (Shift + Left Mouse)".Localize();
|
||||
translateButton.Margin = new BorderDouble(3);
|
||||
AddChild(translateButton);
|
||||
translateButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.Translate;
|
||||
AddChild(translateButton);
|
||||
|
||||
iconPath = Path.Combine("ViewTransformControls", "scale.png");
|
||||
scaleButton = textImageButtonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath,32,32));
|
||||
scaleButton.ToolTipText = "Zoom (Ctrl + Left Mouse)".Localize();
|
||||
scaleButton.Margin = 3;
|
||||
AddChild(scaleButton);
|
||||
scaleButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.Scale;
|
||||
AddChild(scaleButton);
|
||||
|
||||
partSelectSeparator = new GuiWidget(2, 32);
|
||||
partSelectSeparator.BackgroundColor = RGBA_Bytes.White;
|
||||
|
|
@ -178,20 +186,28 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
partSelectButton = textImageButtonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath,32,32));
|
||||
partSelectButton.ToolTipText = "Select Part".Localize();
|
||||
partSelectButton.Margin = new BorderDouble(3);
|
||||
AddChild(partSelectButton);
|
||||
partSelectButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.PartSelect;
|
||||
AddChild(partSelectButton);
|
||||
|
||||
var overflowButton = new OverflowDropdown(allowLightnessInvert: false);
|
||||
iconPath = Path.Combine("ViewTransformControls", "layers.png");
|
||||
var layersButton = textImageButtonFactory.Generate("", StaticData.Instance.LoadIcon(iconPath, 32, 32).InvertLightness());
|
||||
layersButton.ToolTipText = "Layers".Localize();
|
||||
layersButton.Margin = 3;
|
||||
layersButton.Click += (s, e) =>
|
||||
{
|
||||
var parentTabPage = this.Parents<PartPreviewContent.PrinterTabPage>().First();
|
||||
parentTabPage.ToggleView();
|
||||
};
|
||||
AddChild(layersButton);
|
||||
|
||||
overflowButton = new OverflowDropdown(allowLightnessInvert: false);
|
||||
overflowButton.ToolTipText = "More...".Localize();
|
||||
overflowButton.Margin = 3;
|
||||
overflowButton.PopupContent = ShowOverflowMenu();
|
||||
AddChild(overflowButton);
|
||||
|
||||
Margin = new BorderDouble(5);
|
||||
HAnchor |= Agg.UI.HAnchor.ParentLeft;
|
||||
VAnchor = Agg.UI.VAnchor.ParentTop;
|
||||
|
||||
Margin = new BorderDouble(0, 0, 0, 72);
|
||||
rotateButton.Checked = true;
|
||||
BackgroundColor = new RGBA_Bytes(0, 0, 0, 120);
|
||||
|
||||
|
|
@ -201,7 +217,22 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
ActiveTheme.ThemeChanged.RegisterEvent(ThemeChanged, ref unregisterEvents);
|
||||
}
|
||||
|
||||
public GuiWidget ShowOverflowMenu()
|
||||
public override void OnLoad(EventArgs args)
|
||||
{
|
||||
overflowButton.PopupContent = ShowOverflowMenu();
|
||||
base.OnLoad(args);
|
||||
}
|
||||
|
||||
public void RegisterViewer(MeshViewerWidget meshViewer)
|
||||
{
|
||||
if (this.FirstMeshViewer == null)
|
||||
{
|
||||
this.FirstMeshViewer = meshViewer;
|
||||
}
|
||||
this.meshViewers.Add(meshViewer);
|
||||
}
|
||||
|
||||
private GuiWidget ShowOverflowMenu()
|
||||
{
|
||||
var popupContainer = new FlowLayoutWidget(FlowDirection.TopToBottom);
|
||||
|
||||
|
|
@ -209,14 +240,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
AddCheckbox(
|
||||
"Show Print Bed".Localize(),
|
||||
"Show Help Checkbox",
|
||||
meshViewerWidget.RenderBed,
|
||||
this.FirstMeshViewer.RenderBed,
|
||||
5,
|
||||
(s, e) =>
|
||||
{
|
||||
var checkbox = s as CheckBox;
|
||||
if (checkbox != null)
|
||||
{
|
||||
meshViewerWidget.RenderBed = checkbox.Checked;
|
||||
meshViewers.ForEach(m => m.RenderBed = checkbox.Checked);
|
||||
}
|
||||
}));
|
||||
|
||||
|
|
@ -227,14 +258,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
AddCheckbox(
|
||||
"Show Print Area".Localize(),
|
||||
"Show Help Checkbox",
|
||||
meshViewerWidget.RenderBuildVolume,
|
||||
this.FirstMeshViewer.RenderBed,
|
||||
5,
|
||||
(s, e) =>
|
||||
{
|
||||
var checkbox = s as CheckBox;
|
||||
if (checkbox != null)
|
||||
{
|
||||
meshViewerWidget.RenderBuildVolume = checkbox.Checked;
|
||||
meshViewers.ForEach(m => m.RenderBuildVolume = checkbox.Checked);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
|
@ -276,19 +307,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
bool canParse = Enum.TryParse(renderTypeString, out renderType);
|
||||
if (canParse)
|
||||
{
|
||||
meshViewerWidget.RenderType = renderType;
|
||||
meshViewers.ForEach(m => m.RenderType = renderType);
|
||||
}
|
||||
|
||||
{
|
||||
RadioButton renderTypeCheckBox = new RadioButton("Shaded".Localize(), textColor: itemTextColor);
|
||||
renderTypeCheckBox.Checked = (meshViewerWidget.RenderType == RenderTypes.Shaded);
|
||||
renderTypeCheckBox.Checked = (this.FirstMeshViewer.RenderType == RenderTypes.Shaded);
|
||||
|
||||
renderTypeCheckBox.CheckedStateChanged += (sender, e) =>
|
||||
{
|
||||
if (renderTypeCheckBox.Checked)
|
||||
{
|
||||
meshViewerWidget.RenderType = RenderTypes.Shaded;
|
||||
UserSettings.Instance.set(UserSettingsKey.defaultRenderSetting, meshViewerWidget.RenderType.ToString());
|
||||
meshViewers.ForEach(m => m.RenderType = RenderTypes.Shaded);
|
||||
UserSettings.Instance.set(UserSettingsKey.defaultRenderSetting, this.FirstMeshViewer.RenderType.ToString());
|
||||
}
|
||||
};
|
||||
parentContainer.AddChild(renderTypeCheckBox);
|
||||
|
|
@ -296,13 +327,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
{
|
||||
RadioButton renderTypeCheckBox = new RadioButton("Outlines".Localize(), textColor: itemTextColor);
|
||||
renderTypeCheckBox.Checked = (meshViewerWidget.RenderType == RenderTypes.Outlines);
|
||||
renderTypeCheckBox.Checked = (this.FirstMeshViewer.RenderType == RenderTypes.Outlines);
|
||||
renderTypeCheckBox.CheckedStateChanged += (sender, e) =>
|
||||
{
|
||||
if (renderTypeCheckBox.Checked)
|
||||
{
|
||||
meshViewerWidget.RenderType = RenderTypes.Outlines;
|
||||
UserSettings.Instance.set(UserSettingsKey.defaultRenderSetting, meshViewerWidget.RenderType.ToString());
|
||||
meshViewers.ForEach(m => m.RenderType = RenderTypes.Outlines);
|
||||
UserSettings.Instance.set(UserSettingsKey.defaultRenderSetting, this.FirstMeshViewer.RenderType.ToString());
|
||||
}
|
||||
};
|
||||
parentContainer.AddChild(renderTypeCheckBox);
|
||||
|
|
@ -310,13 +341,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
{
|
||||
RadioButton renderTypeCheckBox = new RadioButton("Polygons".Localize(), textColor: itemTextColor);
|
||||
renderTypeCheckBox.Checked = (meshViewerWidget.RenderType == RenderTypes.Polygons);
|
||||
renderTypeCheckBox.Checked = (this.FirstMeshViewer.RenderType == RenderTypes.Polygons);
|
||||
renderTypeCheckBox.CheckedStateChanged += (sender, e) =>
|
||||
{
|
||||
if (renderTypeCheckBox.Checked)
|
||||
{
|
||||
meshViewerWidget.RenderType = RenderTypes.Polygons;
|
||||
UserSettings.Instance.set(UserSettingsKey.defaultRenderSetting, meshViewerWidget.RenderType.ToString());
|
||||
meshViewers.ForEach(m => m.RenderType = RenderTypes.Polygons);
|
||||
UserSettings.Instance.set(UserSettingsKey.defaultRenderSetting, this.FirstMeshViewer.RenderType.ToString());
|
||||
}
|
||||
};
|
||||
parentContainer.AddChild(renderTypeCheckBox);
|
||||
|
|
@ -324,7 +355,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
{
|
||||
RadioButton renderTypeCheckBox = new RadioButton("Overhang".Localize(), textColor: itemTextColor);
|
||||
renderTypeCheckBox.Checked = (meshViewerWidget.RenderType == RenderTypes.Overhang);
|
||||
renderTypeCheckBox.Checked = (this.FirstMeshViewer.RenderType == RenderTypes.Overhang);
|
||||
|
||||
renderTypeCheckBox.CheckedStateChanged += (sender, e) =>
|
||||
{
|
||||
|
|
@ -333,8 +364,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
// TODO: Determine if Scene is available in scope
|
||||
var scene = MatterControlApplication.Instance.ActiveView3DWidget.Scene;
|
||||
|
||||
meshViewerWidget.RenderType = RenderTypes.Overhang;
|
||||
UserSettings.Instance.set("defaultRenderSetting", meshViewerWidget.RenderType.ToString());
|
||||
meshViewers.ForEach(m => m.RenderType = RenderTypes.Overhang);
|
||||
|
||||
UserSettings.Instance.set("defaultRenderSetting", this.FirstMeshViewer.RenderType.ToString());
|
||||
foreach (var meshAndTransform in scene.VisibleMeshes(Matrix4X4.Identity))
|
||||
{
|
||||
meshAndTransform.MeshData.MarkAsChanged();
|
||||
|
|
@ -404,11 +436,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
protected void SetMeshViewerDisplayTheme(object sender = null, EventArgs e = null)
|
||||
{
|
||||
meshViewerWidget.TrackballTumbleWidget.RotationHelperCircleColor = ActiveTheme.Instance.PrimaryBackgroundColor;
|
||||
|
||||
//meshViewerWidget.MaterialColor = RGBA_Bytes.White;
|
||||
//meshViewerWidget.SelectedMaterialColor = ActiveTheme.Instance.PrimaryAccentColor;
|
||||
meshViewerWidget.BuildVolumeColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryAccentColor.Red0To255, ActiveTheme.Instance.PrimaryAccentColor.Green0To255, ActiveTheme.Instance.PrimaryAccentColor.Blue0To255, 50);
|
||||
meshViewers.ForEach(meshViewerWidget =>
|
||||
{
|
||||
meshViewerWidget.TrackballTumbleWidget.RotationHelperCircleColor = ActiveTheme.Instance.PrimaryBackgroundColor;
|
||||
meshViewerWidget.BuildVolumeColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryAccentColor.Red0To255, ActiveTheme.Instance.PrimaryAccentColor.Green0To255, ActiveTheme.Instance.PrimaryAccentColor.Blue0To255, 50);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (c) 2014, Lars Brubaker
|
||||
Copyright (c) 2017, Lars Brubaker, John Lewin
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
|
@ -27,9 +27,10 @@ of the authors and should not be interpreted as representing official policies,
|
|||
either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using MatterHackers.Agg;
|
||||
using MatterHackers.Agg.ImageProcessing;
|
||||
using MatterHackers.Agg.PlatformAbstract;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.GCodeVisualizer;
|
||||
using MatterHackers.Localizations;
|
||||
|
|
@ -38,9 +39,6 @@ using MatterHackers.MatterControl.PrintQueue;
|
|||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
using MatterHackers.MeshVisualizer;
|
||||
using MatterHackers.VectorMath;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
|
||||
namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||
{
|
||||
|
|
@ -48,15 +46,15 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
public enum WindowMode { Embeded, StandAlone };
|
||||
|
||||
public SolidSlider selectLayerSlider;
|
||||
//public SolidSlider selectLayerSlider;
|
||||
|
||||
private SetLayerWidget setLayerWidget;
|
||||
private LayerNavigationWidget navigationWidget;
|
||||
public DoubleSolidSlider layerRenderRatioSlider;
|
||||
//private SetLayerWidget setLayerWidget;
|
||||
//private LayerNavigationWidget navigationWidget;
|
||||
//public DoubleSolidSlider layerRenderRatioSlider;
|
||||
|
||||
private TextWidget gcodeProcessingStateInfoText;
|
||||
private ViewGcodeWidget gcodeViewWidget;
|
||||
private PrintItemWrapper printItem { get; set; }
|
||||
private PrintItemWrapper printItem => PrinterConnectionAndCommunication.Instance.ActivePrintItem;
|
||||
private bool startedSliceFromGenerateButton = false;
|
||||
private Button generateGCodeButton;
|
||||
private FlowLayoutWidget buttonBottomPanel;
|
||||
|
|
@ -90,7 +88,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
private BedShape bedShape;
|
||||
private int sliderWidth;
|
||||
|
||||
public ViewGcodeBasic(Vector3 viewerVolume, Vector2 bedCenter, BedShape bedShape, WindowMode windowMode)
|
||||
public ViewGcodeBasic(Vector3 viewerVolume, Vector2 bedCenter, BedShape bedShape, WindowMode windowMode, ViewControls3D viewControls3D)
|
||||
:base(viewControls3D)
|
||||
{
|
||||
this.viewerVolume = viewerVolume;
|
||||
this.bedShape = bedShape;
|
||||
|
|
@ -117,21 +116,21 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
}
|
||||
|
||||
private void RecreateBedAndPartPosition(object sender, EventArgs e)
|
||||
{
|
||||
viewerVolume = new Vector3(ActiveSliceSettings.Instance.GetValue<Vector2>(SettingsKey.bed_size), ActiveSliceSettings.Instance.GetValue<double>(SettingsKey.build_height));
|
||||
bedShape = ActiveSliceSettings.Instance.GetValue<BedShape>(SettingsKey.bed_shape);
|
||||
bedCenter = ActiveSliceSettings.Instance.GetValue<Vector2>(SettingsKey.print_center);
|
||||
{
|
||||
viewerVolume = new Vector3(ActiveSliceSettings.Instance.GetValue<Vector2>(SettingsKey.bed_size), ActiveSliceSettings.Instance.GetValue<double>(SettingsKey.build_height));
|
||||
bedShape = ActiveSliceSettings.Instance.GetValue<BedShape>(SettingsKey.bed_shape);
|
||||
bedCenter = ActiveSliceSettings.Instance.GetValue<Vector2>(SettingsKey.print_center);
|
||||
|
||||
double buildHeight = ActiveSliceSettings.Instance.GetValue<double>(SettingsKey.build_height);
|
||||
double buildHeight = ActiveSliceSettings.Instance.GetValue<double>(SettingsKey.build_height);
|
||||
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
meshViewerWidget.CreatePrintBed(
|
||||
viewerVolume,
|
||||
bedCenter,
|
||||
bedShape);
|
||||
});
|
||||
}
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
meshViewerWidget.CreatePrintBed(
|
||||
viewerVolume,
|
||||
bedCenter,
|
||||
bedShape);
|
||||
});
|
||||
}
|
||||
|
||||
private void CheckSettingChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
|
@ -164,17 +163,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
}
|
||||
}
|
||||
|
||||
public void LoadItem(PrintItemWrapper printItem)
|
||||
public void LoadItem()
|
||||
{
|
||||
this.printItem = printItem;
|
||||
Clear3DGCode();
|
||||
|
||||
gcodeDisplayWidget.CloseAllChildren();
|
||||
|
||||
if(printItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (printItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//firstProcessingMessage = "Loading G-Code...".Localize();
|
||||
if (Path.GetExtension(printItem.FileLocation).ToUpper() == ".GCODE")
|
||||
|
|
@ -245,7 +243,26 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
generateGCodeButton = textImageButtonFactory.Generate("Generate".Localize());
|
||||
generateGCodeButton.Name = "Generate Gcode Button";
|
||||
generateGCodeButton.Click += generateButton_Click;
|
||||
generateGCodeButton.Click += (s, e) =>
|
||||
{
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
if (ActiveSliceSettings.Instance.PrinterSelected)
|
||||
{
|
||||
if (ActiveSliceSettings.Instance.IsValid() && printItem != null)
|
||||
{
|
||||
generateGCodeButton.Visible = false;
|
||||
SlicingQueue.Instance.QueuePartForSlicing(printItem);
|
||||
startedSliceFromGenerateButton = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
StyledMessageBox.ShowMessageBox(null, "Oops! Please select a printer in order to continue slicing.", "Select Printer", StyledMessageBox.MessageType.OK);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
buttonBottomPanel.AddChild(generateGCodeButton);
|
||||
|
||||
layerSelectionButtonsPanel = new FlowLayoutWidget(FlowDirection.RightToLeft);
|
||||
|
|
@ -301,6 +318,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
meshViewerWidget.TrackballTumbleWidget.DrawGlContent += TrackballTumbleWidget_DrawGlContent;
|
||||
|
||||
viewControls2D = new ViewControls2D();
|
||||
viewControls2D.Visible = false;
|
||||
AddChild(viewControls2D);
|
||||
|
||||
viewControls2D.ResetView += (sender, e) =>
|
||||
|
|
@ -308,18 +326,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
SetDefaultView2D();
|
||||
};
|
||||
|
||||
viewControls3D = new ViewControls3D(meshViewerWidget);
|
||||
viewControls3D.Margin = new BorderDouble(0, 0, 0, 40);
|
||||
viewControls3D.PartSelectVisible = false;
|
||||
AddChild(viewControls3D);
|
||||
|
||||
viewControls3D.RegisterViewer(meshViewerWidget);
|
||||
viewControls3D.ResetView += (sender, e) =>
|
||||
{
|
||||
meshViewerWidget.ResetView();
|
||||
};
|
||||
|
||||
viewControls3D.ActiveButton = ViewControls3DButtons.Rotate;
|
||||
viewControls3D.Visible = false;
|
||||
|
||||
viewControlsToggle = new ViewControlsToggle();
|
||||
viewControlsToggle.HAnchor = Agg.UI.HAnchor.ParentRight;
|
||||
|
|
@ -330,6 +343,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
meshViewerWidget.ResetView();
|
||||
|
||||
PrinterConnectionAndCommunication.Instance.ActivePrintItemChanged.RegisterEvent(HookUpGCodeMessagesWhenDonePrinting, ref unregisterEvents);
|
||||
|
||||
viewControls2D.translateButton.Click += (sender, e) =>
|
||||
{
|
||||
gcodeViewWidget.TransformState = ViewGcodeWidget.ETransformState.Move;
|
||||
|
|
@ -394,22 +409,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
gcodeViewWidget.gCodeRenderer.Render3D(renderInfo);
|
||||
}
|
||||
|
||||
private void SetAnimationPosition()
|
||||
{
|
||||
int currentLayer = PrinterConnectionAndCommunication.Instance.CurrentlyPrintingLayer;
|
||||
if (currentLayer <= 0)
|
||||
{
|
||||
selectLayerSlider.Value = 0;
|
||||
layerRenderRatioSlider.SecondValue = 0;
|
||||
layerRenderRatioSlider.FirstValue = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectLayerSlider.Value = currentLayer - 1;
|
||||
layerRenderRatioSlider.SecondValue = PrinterConnectionAndCommunication.Instance.RatioIntoCurrentLayer;
|
||||
layerRenderRatioSlider.FirstValue = 0;
|
||||
}
|
||||
}
|
||||
private Action ResetAnimationPosition;
|
||||
|
||||
private FlowLayoutWidget CreateRightButtonPanel()
|
||||
{
|
||||
|
|
@ -532,8 +532,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
modelInfoContainer.AddChild(GetEstimatedMassInfo());
|
||||
modelInfoContainer.AddChild(GetEstimatedCostInfo());
|
||||
|
||||
PrinterConnectionAndCommunication.Instance.CommunicationStateChanged.RegisterEvent(HookUpGCodeMessagesWhenDonePrinting, ref unregisterEvents);
|
||||
|
||||
buttonPanel.AddChild(modelInfoContainer);
|
||||
|
||||
textImageButtonFactory.FixedWidth = oldWidth;
|
||||
|
|
@ -808,34 +806,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
textImageButtonFactory.FixedWidth = oldWidth;
|
||||
}
|
||||
|
||||
private void SetSyncToPrintVisibility()
|
||||
{
|
||||
if (windowMode == WindowMode.Embeded)
|
||||
{
|
||||
bool printerIsRunningPrint = PrinterConnectionAndCommunication.Instance.PrinterIsPaused || PrinterConnectionAndCommunication.Instance.PrinterIsPrinting;
|
||||
|
||||
if (syncToPrint.Checked && printerIsRunningPrint)
|
||||
{
|
||||
SetAnimationPosition();
|
||||
//navigationWidget.Visible = false;
|
||||
//setLayerWidget.Visible = false;
|
||||
layerRenderRatioSlider.Visible = false;
|
||||
selectLayerSlider.Visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (layerRenderRatioSlider != null)
|
||||
{
|
||||
layerRenderRatioSlider.FirstValue = 0;
|
||||
layerRenderRatioSlider.SecondValue = 1;
|
||||
}
|
||||
navigationWidget.Visible = true;
|
||||
setLayerWidget.Visible = true;
|
||||
layerRenderRatioSlider.Visible = true;
|
||||
selectLayerSlider.Visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
private Action SetSyncToPrintVisibility;
|
||||
|
||||
private void SetLayerViewType()
|
||||
{
|
||||
|
|
@ -845,7 +816,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
viewControls2D.Visible = false;
|
||||
gcodeViewWidget.Visible = false;
|
||||
|
||||
viewControls3D.Visible = true;
|
||||
meshViewerWidget.Visible = true;
|
||||
}
|
||||
else
|
||||
|
|
@ -854,7 +824,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
viewControls2D.Visible = true;
|
||||
gcodeViewWidget.Visible = true;
|
||||
|
||||
viewControls3D.Visible = false;
|
||||
meshViewerWidget.Visible = false;
|
||||
}
|
||||
}
|
||||
|
|
@ -873,7 +842,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
generateGCodeButton.Visible = true;
|
||||
}
|
||||
SetSyncToPrintVisibility();
|
||||
//SetSyncToPrintVisibility();
|
||||
}
|
||||
|
||||
private string partToStartLoadingOnFirstDraw = null;
|
||||
|
|
@ -897,7 +866,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
&& syncToPrint.Checked
|
||||
&& printerIsRunningPrint)
|
||||
{
|
||||
SetAnimationPosition();
|
||||
ResetAnimationPosition();
|
||||
}
|
||||
|
||||
EnsureKeyDownHooked();
|
||||
|
|
@ -1019,7 +988,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
return false;
|
||||
}
|
||||
|
||||
private void DoneLoadingGCode(object sender, EventArgs e)
|
||||
private void DoneLoadingGCode(object sender, EventArgs ex)
|
||||
{
|
||||
SetProcessingMessage("");
|
||||
if (gcodeViewWidget != null
|
||||
|
|
@ -1050,30 +1019,101 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
buttonRightPanel.Visible = true;
|
||||
viewControlsToggle.Visible = true;
|
||||
|
||||
CloseIfNotNull(setLayerWidget);
|
||||
setLayerWidget = new SetLayerWidget(gcodeViewWidget);
|
||||
var setLayerWidget = new SetLayerWidget(gcodeViewWidget);
|
||||
setLayerWidget.VAnchor = Agg.UI.VAnchor.ParentTop;
|
||||
layerSelectionButtonsPanel.AddChild(setLayerWidget);
|
||||
|
||||
CloseIfNotNull(navigationWidget);
|
||||
navigationWidget = new LayerNavigationWidget(gcodeViewWidget);
|
||||
var navigationWidget = new LayerNavigationWidget(gcodeViewWidget);
|
||||
navigationWidget.Margin = new BorderDouble(0, 0, 20, 0);
|
||||
layerSelectionButtonsPanel.AddChild(navigationWidget);
|
||||
|
||||
CloseIfNotNull(selectLayerSlider);
|
||||
selectLayerSlider = new SolidSlider(new Vector2(), sliderWidth, 0, gcodeViewWidget.LoadedGCode.NumChangesInZ - 1, Orientation.Vertical);
|
||||
selectLayerSlider.ValueChanged += selectLayerSlider_ValueChanged;
|
||||
gcodeViewWidget.ActiveLayerChanged += gcodeViewWidget_ActiveLayerChanged;
|
||||
var selectLayerSlider = new SolidSlider(new Vector2(), sliderWidth, 0, gcodeViewWidget.LoadedGCode.NumChangesInZ - 1, Orientation.Vertical);
|
||||
selectLayerSlider.ValueChanged += (s, e) =>
|
||||
{
|
||||
gcodeViewWidget.ActiveLayerIndex = (int)(selectLayerSlider.Value + .5);
|
||||
};
|
||||
gcodeViewWidget.ActiveLayerChanged += (s, e) =>
|
||||
{
|
||||
if (gcodeViewWidget.ActiveLayerIndex != (int)(selectLayerSlider.Value + .5))
|
||||
{
|
||||
selectLayerSlider.Value = gcodeViewWidget.ActiveLayerIndex;
|
||||
}
|
||||
};
|
||||
AddChild(selectLayerSlider);
|
||||
|
||||
CloseIfNotNull(layerRenderRatioSlider);
|
||||
layerRenderRatioSlider = new DoubleSolidSlider(new Vector2(), sliderWidth);
|
||||
var layerRenderRatioSlider = new DoubleSolidSlider(new Vector2(), sliderWidth);
|
||||
layerRenderRatioSlider.FirstValue = 0;
|
||||
layerRenderRatioSlider.FirstValueChanged += layerStartRenderRatioSlider_ValueChanged;
|
||||
layerRenderRatioSlider.FirstValueChanged += (s, e) =>
|
||||
{
|
||||
gcodeViewWidget.FeatureToStartOnRatio0To1 = layerRenderRatioSlider.FirstValue;
|
||||
gcodeViewWidget.FeatureToEndOnRatio0To1 = layerRenderRatioSlider.SecondValue;
|
||||
gcodeViewWidget.Invalidate();
|
||||
};
|
||||
layerRenderRatioSlider.SecondValue = 1;
|
||||
layerRenderRatioSlider.SecondValueChanged += layerEndRenderRatioSlider_ValueChanged;
|
||||
layerRenderRatioSlider.SecondValueChanged += (s, e) =>
|
||||
{
|
||||
gcodeViewWidget.FeatureToStartOnRatio0To1 = layerRenderRatioSlider.FirstValue;
|
||||
gcodeViewWidget.FeatureToEndOnRatio0To1 = layerRenderRatioSlider.SecondValue;
|
||||
gcodeViewWidget.Invalidate();
|
||||
};
|
||||
AddChild(layerRenderRatioSlider);
|
||||
|
||||
ResetAnimationPosition = () =>
|
||||
{
|
||||
int currentLayer = PrinterConnectionAndCommunication.Instance.CurrentlyPrintingLayer;
|
||||
if (currentLayer <= 0)
|
||||
{
|
||||
selectLayerSlider.Value = 0;
|
||||
layerRenderRatioSlider.SecondValue = 0;
|
||||
layerRenderRatioSlider.FirstValue = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectLayerSlider.Value = currentLayer - 1;
|
||||
layerRenderRatioSlider.SecondValue = PrinterConnectionAndCommunication.Instance.RatioIntoCurrentLayer;
|
||||
layerRenderRatioSlider.FirstValue = 0;
|
||||
}
|
||||
};
|
||||
|
||||
SetSyncToPrintVisibility = () =>
|
||||
{
|
||||
if (windowMode == WindowMode.Embeded)
|
||||
{
|
||||
bool printerIsRunningPrint = PrinterConnectionAndCommunication.Instance.PrinterIsPaused || PrinterConnectionAndCommunication.Instance.PrinterIsPrinting;
|
||||
|
||||
if (syncToPrint?.Checked == true
|
||||
&& printerIsRunningPrint)
|
||||
{
|
||||
ResetAnimationPosition();
|
||||
//navigationWidget.Visible = false;
|
||||
//setLayerWidget.Visible = false;
|
||||
layerRenderRatioSlider.Visible = false;
|
||||
selectLayerSlider.Visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (layerRenderRatioSlider != null)
|
||||
{
|
||||
layerRenderRatioSlider.FirstValue = 0;
|
||||
layerRenderRatioSlider.SecondValue = 1;
|
||||
}
|
||||
navigationWidget.Visible = true;
|
||||
setLayerWidget.Visible = true;
|
||||
layerRenderRatioSlider.Visible = true;
|
||||
selectLayerSlider.Visible = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
SetSliderSizes = () =>
|
||||
{
|
||||
selectLayerSlider.OriginRelativeParent = new Vector2(gcodeDisplayWidget.Width - 20, 70);
|
||||
selectLayerSlider.TotalWidthInPixels = gcodeDisplayWidget.Height - 80;
|
||||
|
||||
layerRenderRatioSlider.OriginRelativeParent = new Vector2(60, 70);
|
||||
layerRenderRatioSlider.TotalWidthInPixels = gcodeDisplayWidget.Width - 100;
|
||||
};
|
||||
|
||||
SetSliderSizes();
|
||||
|
||||
// let's change the active layer so that it is set to the first layer with data
|
||||
|
|
@ -1083,6 +1123,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
BoundsChanged += PartPreviewGCode_BoundsChanged;
|
||||
|
||||
meshViewerWidget.partProcessingInfo.Visible = false;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1098,46 +1140,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
}
|
||||
}
|
||||
|
||||
private void layerStartRenderRatioSlider_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
gcodeViewWidget.FeatureToStartOnRatio0To1 = layerRenderRatioSlider.FirstValue;
|
||||
gcodeViewWidget.FeatureToEndOnRatio0To1 = layerRenderRatioSlider.SecondValue;
|
||||
gcodeViewWidget.Invalidate();
|
||||
}
|
||||
|
||||
private void layerEndRenderRatioSlider_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
gcodeViewWidget.FeatureToStartOnRatio0To1 = layerRenderRatioSlider.FirstValue;
|
||||
gcodeViewWidget.FeatureToEndOnRatio0To1 = layerRenderRatioSlider.SecondValue;
|
||||
gcodeViewWidget.Invalidate();
|
||||
}
|
||||
|
||||
private void gcodeViewWidget_ActiveLayerChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (gcodeViewWidget.ActiveLayerIndex != (int)(selectLayerSlider.Value + .5))
|
||||
{
|
||||
selectLayerSlider.Value = gcodeViewWidget.ActiveLayerIndex;
|
||||
}
|
||||
}
|
||||
|
||||
private void selectLayerSlider_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
gcodeViewWidget.ActiveLayerIndex = (int)(selectLayerSlider.Value + .5);
|
||||
}
|
||||
|
||||
private void PartPreviewGCode_BoundsChanged(object sender, EventArgs e)
|
||||
{
|
||||
SetSliderSizes();
|
||||
}
|
||||
|
||||
private void SetSliderSizes()
|
||||
{
|
||||
selectLayerSlider.OriginRelativeParent = new Vector2(gcodeDisplayWidget.Width - 20, 70);
|
||||
selectLayerSlider.TotalWidthInPixels = gcodeDisplayWidget.Height - 80;
|
||||
|
||||
layerRenderRatioSlider.OriginRelativeParent = new Vector2(60, 70);
|
||||
layerRenderRatioSlider.TotalWidthInPixels = gcodeDisplayWidget.Width - 100;
|
||||
}
|
||||
private Action SetSliderSizes;
|
||||
|
||||
private void AddHandlers()
|
||||
{
|
||||
|
|
@ -1191,28 +1199,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
private void generateButton_Click(object sender, EventArgs mouseEvent)
|
||||
{
|
||||
UiThread.RunOnIdle(DoGenerateButton_Click, sender);
|
||||
}
|
||||
|
||||
private void DoGenerateButton_Click(object state)
|
||||
{
|
||||
if (ActiveSliceSettings.Instance.PrinterSelected)
|
||||
{
|
||||
if (ActiveSliceSettings.Instance.IsValid() && printItem != null)
|
||||
{
|
||||
((Button)state).Visible = false;
|
||||
SlicingQueue.Instance.QueuePartForSlicing(printItem);
|
||||
startedSliceFromGenerateButton = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
StyledMessageBox.ShowMessageBox(null, "Oops! Please select a printer in order to continue slicing.", "Select Printer", StyledMessageBox.MessageType.OK);
|
||||
}
|
||||
}
|
||||
|
||||
private void sliceItem_SlicingOutputMessage(object sender, EventArgs e)
|
||||
{
|
||||
StringEventArgs message = e as StringEventArgs;
|
||||
|
|
@ -1234,7 +1220,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
printItem.SlicingOutputMessage -= sliceItem_SlicingOutputMessage;
|
||||
printItem.SlicingDone -= sliceItem_Done;
|
||||
|
||||
UiThread.RunOnIdle(() => LoadItem(printItem));
|
||||
UiThread.RunOnIdle(() => LoadItem());
|
||||
|
||||
startedSliceFromGenerateButton = false;
|
||||
}
|
||||
|
|
|
|||
BIN
StaticData/Icons/ViewTransformControls/layers.png
Normal file
BIN
StaticData/Icons/ViewTransformControls/layers.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 349 B |
|
|
@ -117,8 +117,9 @@ namespace MatterHackers.PolygonMesh.UnitTests
|
|||
new Vector2(100, 100),
|
||||
MeshVisualizer.BedShape.Rectangular,
|
||||
View3DWidget.WindowMode.Embeded,
|
||||
View3DWidget.AutoRotate.Disabled,
|
||||
View3DWidget.OpenMode.Editing);
|
||||
View3DWidget.AutoRotate.Disabled,
|
||||
new ViewControls3D(),
|
||||
View3DWidget.OpenMode.Editing);
|
||||
|
||||
var scene = view3DWidget.Scene;
|
||||
scene.Children.Add(new Object3D
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue