diff --git a/MatterControlLib/ApplicationView/ApplicationController.cs b/MatterControlLib/ApplicationView/ApplicationController.cs index 427afaa72..17ffd4fb3 100644 --- a/MatterControlLib/ApplicationView/ApplicationController.cs +++ b/MatterControlLib/ApplicationView/ApplicationController.cs @@ -1279,7 +1279,7 @@ namespace MatterHackers.MatterControl using (new SelectionMaintainer(scene)) { scene.UndoBuffer.AddAndDo(new ReplaceCommand(new[] { sceneItem }, new[] { component })); - } // Invalidate image to kick off rebuild of ImageConverter stack + } // Invalidate image to kick off rebuild of ImageConverter stack imageObject.Invalidate(InvalidateType.Image); return Task.CompletedTask; @@ -3367,14 +3367,35 @@ If you experience adhesion problems, please re-run leveling." break; case Keys.Left: - // move or rotate view left - Offset3DView(view3D, new Vector2(-offsetDist, 0), arrowKeyOpperation); + if (keyEvent.Control + && !printerTabPage.sceneContext.ViewState.ModelView) + { + // Decrement slider + printerTabPage.LayerFeaturesIndex -= 1; + } + else + { + // move or rotate view left + Offset3DView(view3D, new Vector2(-offsetDist, 0), arrowKeyOpperation); + } + keyEvent.Handled = true; keyEvent.SuppressKeyPress = true; break; case Keys.Right: - Offset3DView(view3D, new Vector2(offsetDist, 0), arrowKeyOpperation); + if (keyEvent.Control + && !printerTabPage.sceneContext.ViewState.ModelView) + { + // Increment slider + printerTabPage.LayerFeaturesIndex += 1; + } + else + { + // move or rotate view right + Offset3DView(view3D, new Vector2(offsetDist, 0), arrowKeyOpperation); + } + keyEvent.Handled = true; keyEvent.SuppressKeyPress = true; break; diff --git a/MatterControlLib/PartPreviewWindow/PrinterTabPage.cs b/MatterControlLib/PartPreviewWindow/PrinterTabPage.cs index 474993943..0d9f685c8 100644 --- a/MatterControlLib/PartPreviewWindow/PrinterTabPage.cs +++ b/MatterControlLib/PartPreviewWindow/PrinterTabPage.cs @@ -229,6 +229,30 @@ namespace MatterHackers.MatterControl.PartPreviewWindow sceneContext.LoadedGCodeChanged += BedPlate_LoadedGCodeChanged; } + public int LayerFeaturesIndex + { + get + { + var renderInfo = sceneContext.RenderInfo; + int layerIndex = renderInfo.EndLayerIndex - 1; + int featuresOnLayer = sceneContext.GCodeRenderer.GetNumFeatures(layerIndex); + int featureIndex = (int)(featuresOnLayer * renderInfo.FeatureToEndOnRatio0To1 + .5); + + return Math.Max(0, Math.Min(featureIndex, featuresOnLayer)); + } + + set + { + var renderInfo = sceneContext.RenderInfo; + int layerIndex = renderInfo.EndLayerIndex - 1; + int featuresOnLayer = sceneContext.GCodeRenderer.GetNumFeatures(layerIndex); + + var factor = (double)value / featuresOnLayer; + + layerRenderRatioSlider.SecondValue = renderInfo.FeatureToEndOnRatio0To1 = Math.Max(0, Math.Min(factor, 1)); + } + } + string pauseCaption = "Printer Paused".Localize(); private void ResumePrint(bool clickedOk)