Made it possible to render translucent extrusion paths.

Fixed some ui consistencies.
This commit is contained in:
Lars Brubaker 2015-12-16 18:14:32 -08:00
parent f3fd6428c9
commit 5ce6ba2eb7
5 changed files with 136 additions and 99 deletions

View file

@ -1301,7 +1301,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
BorderDouble buttonMargin = new BorderDouble(top: 3);
expandRotateOptions = expandMenuOptionFactory.GenerateCheckBoxButton(LocalizedString.Get("Rotate"), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandRotateOptions = expandMenuOptionFactory.GenerateCheckBoxButton("Rotate".Localize().ToUpper(), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandRotateOptions.Margin = new BorderDouble(bottom: 2);
buttonRightPanel.AddChild(expandRotateOptions);
@ -1310,7 +1310,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
rotateOptionContainer.Visible = false;
buttonRightPanel.AddChild(rotateOptionContainer);
expandScaleOptions = expandMenuOptionFactory.GenerateCheckBoxButton(LocalizedString.Get("Scale"), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandScaleOptions = expandMenuOptionFactory.GenerateCheckBoxButton("Scale".Localize().ToUpper(), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandScaleOptions.Margin = new BorderDouble(bottom: 2);
buttonRightPanel.AddChild(expandScaleOptions);
@ -1321,7 +1321,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
// put in the mirror options
{
expandMirrorOptions = expandMenuOptionFactory.GenerateCheckBoxButton(LocalizedString.Get("Mirror"), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandMirrorOptions = expandMenuOptionFactory.GenerateCheckBoxButton("Mirror".Localize().ToUpper(), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandMirrorOptions.Margin = new BorderDouble(bottom: 2);
buttonRightPanel.AddChild(expandMirrorOptions);
@ -1336,7 +1336,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
// put in the material options
int numberOfExtruders = ActiveSliceSettings.Instance.ExtruderCount;
expandMaterialOptions = expandMenuOptionFactory.GenerateCheckBoxButton(LocalizedString.Get("Materials"), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandMaterialOptions = expandMenuOptionFactory.GenerateCheckBoxButton("Materials".Localize().ToUpper(), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandMaterialOptions.Margin = new BorderDouble(bottom: 2);
if (numberOfExtruders > 1)
@ -1353,7 +1353,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
// put in the view options
{
expandViewOptions = expandMenuOptionFactory.GenerateCheckBoxButton(LocalizedString.Get("Display"), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandViewOptions = expandMenuOptionFactory.GenerateCheckBoxButton("Display".Localize().ToUpper(), "icon_arrow_right_no_border_32x32.png", "icon_arrow_down_no_border_32x32.png");
expandViewOptions.Margin = new BorderDouble(bottom: 2);
buttonRightPanel.AddChild(expandViewOptions);
@ -1362,7 +1362,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
viewOptionContainer.Padding = new BorderDouble(left: 4);
viewOptionContainer.Visible = false;
{
CheckBox showBedCheckBox = new CheckBox(LocalizedString.Get("Show Print Bed"), textColor: ActiveTheme.Instance.PrimaryTextColor);
CheckBox showBedCheckBox = new CheckBox("Show Print Bed".Localize(), textColor: ActiveTheme.Instance.PrimaryTextColor);
showBedCheckBox.Checked = true;
showBedCheckBox.CheckedStateChanged += (sender, e) =>
{
@ -1372,7 +1372,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (buildHeight > 0)
{
CheckBox showBuildVolumeCheckBox = new CheckBox(LocalizedString.Get("Show Print Area"), textColor: ActiveTheme.Instance.PrimaryTextColor);
CheckBox showBuildVolumeCheckBox = new CheckBox("Show Print Area".Localize(), textColor: ActiveTheme.Instance.PrimaryTextColor);
showBuildVolumeCheckBox.Checked = false;
showBuildVolumeCheckBox.Margin = new BorderDouble(bottom: 5);
showBuildVolumeCheckBox.CheckedStateChanged += (sender, e) =>

View file

@ -330,11 +330,15 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
renderType |= RenderType.SpeedColors;
}
if (gcodeViewWidget.SimulateExtrusion)
{
renderType |= RenderType.SimulateExtrusion;
}
if (gcodeViewWidget.HideExtruderOffsets)
if (gcodeViewWidget.SimulateExtrusion)
{
renderType |= RenderType.SimulateExtrusion;
}
if (gcodeViewWidget.TransparentExtrusion)
{
renderType |= RenderType.TransparentExtrusion;
}
if (gcodeViewWidget.HideExtruderOffsets)
{
renderType |= RenderType.HideExtruderOffsets;
}
@ -432,7 +436,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
modelInfoContainer.HAnchor = HAnchor.ParentLeftRight;
modelInfoContainer.Padding = new BorderDouble(5);
string printTimeLabel = "Print Time".Localize().ToUpper();
string printTimeLabel = "Print Time".Localize();
string printTimeLabelFull = string.Format("{0}:", printTimeLabel);
// put in the print time
modelInfoContainer.AddChild(new TextWidget(printTimeLabelFull, textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize: 10));
@ -463,7 +467,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
//modelInfoContainer.AddChild(new TextWidget("Size:", textColor: ActiveTheme.Instance.PrimaryTextColor));
string filamentLengthLabel = "Filament Length".Localize().ToUpper();
string filamentLengthLabel = "Filament Length".Localize();
string filamentLengthLabelFull = string.Format("{0}:", filamentLengthLabel);
// show the filament used
modelInfoContainer.AddChild(new TextWidget(filamentLengthLabelFull, textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize: 9));
@ -476,7 +480,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
modelInfoContainer.AddChild(estimatedPrintTime);
}
string filamentVolumeLabel = "Filament Volume".Localize().ToUpper();
string filamentVolumeLabel = "Filament Volume".Localize();
string filamentVolumeLabelFull = string.Format("{0}:", filamentVolumeLabel);
modelInfoContainer.AddChild(new TextWidget(filamentVolumeLabelFull, textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize: 9));
{
@ -488,7 +492,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
modelInfoContainer.AddChild(estimatedPrintTime);
}
string weightLabel = "Est. Weight".Localize().ToUpper();
string weightLabel = "Est. Weight".Localize();
string weightLabelFull = string.Format("{0}:", weightLabel);
modelInfoContainer.AddChild(new TextWidget(weightLabelFull, pointSize: 9, textColor: ActiveTheme.Instance.PrimaryTextColor));
{
@ -555,7 +559,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
// put in a show grid check box
{
CheckBox showGrid = new CheckBox(LocalizedString.Get("Grid"), textColor: ActiveTheme.Instance.PrimaryTextColor);
CheckBox showGrid = new CheckBox(LocalizedString.Get("Print Bed"), textColor: ActiveTheme.Instance.PrimaryTextColor);
showGrid.Checked = gcodeViewWidget.RenderGrid;
meshViewerWidget.RenderBed = showGrid.Checked;
showGrid.CheckedStateChanged += (sender, e) =>
@ -623,8 +627,24 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
layerInfoContainer.AddChild(simulateExtrusion);
}
// put in a simulate extrusion checkbox
if (ActiveSliceSettings.Instance.ExtruderCount > 1)
// put in a render extrusion transparent checkbox
{
CheckBox transparentExtrusion = new CheckBox(LocalizedString.Get("Transparent"), textColor: ActiveTheme.Instance.PrimaryTextColor)
{
Checked = gcodeViewWidget.TransparentExtrusion,
Margin = new BorderDouble(5, 0, 0, 0) * TextWidget.GlobalPointSizeScaleRatio,
HAnchor = HAnchor.ParentLeft,
};
transparentExtrusion.CheckedStateChanged += (sender, e) =>
{
gcodeViewWidget.TransparentExtrusion = transparentExtrusion.Checked;
};
layerInfoContainer.AddChild(transparentExtrusion);
}
// put in a simulate extrusion checkbox
if (ActiveSliceSettings.Instance.ExtruderCount > 1)
{
CheckBox hideExtruderOffsets = new CheckBox("Hide Offsets", textColor: ActiveTheme.Instance.PrimaryTextColor);
hideExtruderOffsets.Checked = gcodeViewWidget.HideExtruderOffsets;

View file

@ -39,6 +39,7 @@ using MatterHackers.VectorMath;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Threading.Tasks;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
@ -104,17 +105,27 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
public bool SimulateExtrusion
{
get { return (UserSettings.Instance.get("GcodeViewerSimulateExtrusion") == "True"); }
set
{
UserSettings.Instance.set("GcodeViewerSimulateExtrusion", value.ToString());
Invalidate();
}
}
public bool SimulateExtrusion
{
get { return (UserSettings.Instance.get("GcodeViewerSimulateExtrusion") == "True"); }
set
{
UserSettings.Instance.set("GcodeViewerSimulateExtrusion", value.ToString());
Invalidate();
}
}
public bool HideExtruderOffsets
public bool TransparentExtrusion
{
get { return (UserSettings.Instance.get("GcodeViewerTransparentExtrusion") == "True"); }
set
{
UserSettings.Instance.set("GcodeViewerTransparentExtrusion", value.ToString());
Invalidate();
}
}
public bool HideExtruderOffsets
{
get
{
@ -281,26 +292,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
private void initialLoading_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
SetGCodeAfterLoad((GCodeFile)e.Result);
private async void initialLoading_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
SetGCodeAfterLoad((GCodeFile)e.Result);
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.WorkerSupportsCancellation = true;
gCodeRenderer = new GCodeRenderer(loadedGCode);
backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(postLoadInitialization_ProgressChanged);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(postLoadInitialization_RunWorkerCompleted);
await Task.Run(() =>
{
DoPostLoadInitialization();
}
);
backgroundWorker.DoWork += new DoWorkEventHandler(DoPostLoadInitialization);
gCodeRenderer = new GCodeRenderer(loadedGCode);
backgroundWorker.RunWorkerAsync(gCodeRenderer);
postLoadInitialization_RunWorkerCompleted();
}
public static void DoPostLoadInitialization(object sender, DoWorkEventArgs doWorkEventArgs)
public void DoPostLoadInitialization()
{
GCodeRenderer gCodeRenderer = (GCodeRenderer)doWorkEventArgs.Argument;
try
{
if (gCodeRenderer.GCodeFileToDraw != null)
@ -324,7 +332,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
private void postLoadInitialization_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
private void postLoadInitialization_RunWorkerCompleted()
{
if (DoneLoading != null)
{
@ -339,68 +347,77 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
if (loadedGCode != null)
{
//using (new PerformanceTimer("GCode Timer", "Total"))
{
Affine transform = TotalTransform;
//using (new PerformanceTimer("GCode Timer", "Total"))
{
Affine transform = TotalTransform;
if (RenderGrid)
{
//using (new PerformanceTimer("GCode Timer", "Render Grid"))
{
double gridLineWidths = 0.2 * layerScale;
if (RenderGrid)
{
//using (new PerformanceTimer("GCode Timer", "Render Grid"))
{
double gridLineWidths = 0.2 * layerScale;
Graphics2DOpenGL graphics2DGl = graphics2D as Graphics2DOpenGL;
if (graphics2DGl != null)
{
GlRenderGrid(graphics2DGl, transform, gridLineWidths);
}
else
{
CreateGrid(transform);
Graphics2DOpenGL graphics2DGl = graphics2D as Graphics2DOpenGL;
if (graphics2DGl != null)
{
GlRenderGrid(graphics2DGl, transform, gridLineWidths);
}
else
{
CreateGrid(transform);
Stroke stroke = new Stroke(grid, gridLineWidths);
graphics2D.Render(stroke, gridColor);
}
}
}
Stroke stroke = new Stroke(grid, gridLineWidths);
graphics2D.Render(stroke, gridColor);
}
}
}
RenderType renderType = RenderType.Extrusions;
if (RenderMoves)
{
renderType |= RenderType.Moves;
}
if (RenderRetractions)
{
renderType |= RenderType.Retractions;
}
if (RenderSpeeds)
{
renderType |= RenderType.SpeedColors;
}
if (SimulateExtrusion)
{
renderType |= RenderType.SimulateExtrusion;
}
if (HideExtruderOffsets)
{
renderType |= RenderType.HideExtruderOffsets;
}
GCodeRenderInfo renderInfo = new GCodeRenderInfo(activeLayerIndex, activeLayerIndex, transform, layerScale, CreateRenderInfo(),
FeatureToStartOnRatio0To1, FeatureToEndOnRatio0To1,
new Vector2[] { ActiveSliceSettings.Instance.GetOffset(0), ActiveSliceSettings.Instance.GetOffset(1) });
GCodeRenderInfo renderInfo = new GCodeRenderInfo(activeLayerIndex, activeLayerIndex, transform, layerScale, renderType,
FeatureToStartOnRatio0To1, FeatureToEndOnRatio0To1,
new Vector2[] { ActiveSliceSettings.Instance.GetOffset(0), ActiveSliceSettings.Instance.GetOffset(1) });
//using (new PerformanceTimer("GCode Timer", "Render"))
{
gCodeRenderer.Render(graphics2D, renderInfo);
}
}
}
//using (new PerformanceTimer("GCode Timer", "Render"))
{
gCodeRenderer.Render(graphics2D, renderInfo);
}
}
}
base.OnDraw(graphics2D);
}
private void GlRenderGrid(Graphics2DOpenGL graphics2DGl, Affine transform, double width)
private RenderType CreateRenderInfo()
{
RenderType renderType = RenderType.Extrusions;
if (RenderMoves)
{
renderType |= RenderType.Moves;
}
if (RenderRetractions)
{
renderType |= RenderType.Retractions;
}
if (RenderSpeeds)
{
renderType |= RenderType.SpeedColors;
}
if (SimulateExtrusion)
{
renderType |= RenderType.SimulateExtrusion;
}
if (TransparentExtrusion)
{
renderType |= RenderType.TransparentExtrusion;
}
if (HideExtruderOffsets)
{
renderType |= RenderType.HideExtruderOffsets;
}
return renderType;
}
private void GlRenderGrid(Graphics2DOpenGL graphics2DGl, Affine transform, double width)
{
graphics2DGl.PreRender();
GL.Begin(BeginMode.Triangles);

@ -1 +1 @@
Subproject commit 721634489abd1574811367c55c68d28f41859904
Subproject commit a9373406537b96a198ce2ef81b436ea9840706cf

@ -1 +1 @@
Subproject commit 44ae2505ee332847a880c95f0c2415e971638b08
Subproject commit da60e2a608b257720e7a5a6019b66768ce789aaf