From 83e083fcd6d79c8fcdd2e2a1eecffed1eac22ba7 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Fri, 10 Sep 2021 17:51:46 -0700 Subject: [PATCH] Improving travel retractions rendering --- .../GCodeRenderer/GCodeRenderer.cs | 21 ++++++++++++++++--- .../RenderFeatures/RenderFeatureExtrusion.cs | 2 +- .../RenderFeatures/RenderFeatureRetract.cs | 2 +- .../RenderFeatures/RenderFeatureTravel.cs | 13 +++++++++--- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs b/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs index 7bce49a22..3dd1f31e8 100644 --- a/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs +++ b/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs @@ -55,6 +55,7 @@ namespace MatterHackers.GCodeVisualizer public static double ExtruderWidth { get; set; } = .4; public static Color TravelColor = Color.Green; + public static Color RetractionColor = Color.FireEngineRed; internal class Layer { @@ -149,6 +150,9 @@ namespace MatterHackers.GCodeVisualizer } else { + var extrusionAmount = currentInstruction.EPosition - previousInstruction.EPosition; + var filamentDiameterMm = gCodeFileToDraw.GetFilamentDiameter(); + if (gCodeFileToDraw.IsExtruding(instructionIndex)) { double layerThickness = gCodeFileToDraw.GetLayerHeight(layerToCreate); @@ -161,21 +165,32 @@ namespace MatterHackers.GCodeVisualizer currentInstruction.Position, currentInstruction.ToolIndex, currentInstruction.FeedRate, - currentInstruction.EPosition - previousInstruction.EPosition, - gCodeFileToDraw.GetFilamentDiameter(), + extrusionAmount, + filamentDiameterMm, layerThickness, extrusionColor, this.Gray)); } else { + if (extrusionAmount < 0) + { + double moveLength = (currentInstruction.Position - previousInstruction.Position).Length; + double filamentRadius = filamentDiameterMm / 2; + double areaSquareMm = (filamentRadius * filamentRadius) * Math.PI; + + var extrusionVolumeMm3 = (float)(areaSquareMm * extrusionAmount); + var area = extrusionVolumeMm3 / moveLength; + } + renderFeaturesForLayer.Add( new RenderFeatureTravel( instructionIndex, previousInstruction.Position, currentInstruction.Position, currentInstruction.ToolIndex, - currentInstruction.FeedRate)); + currentInstruction.FeedRate, + extrusionAmount < 0)); } } } diff --git a/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureExtrusion.cs b/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureExtrusion.cs index 0be7663f5..5c88210fa 100644 --- a/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureExtrusion.cs +++ b/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureExtrusion.cs @@ -43,7 +43,7 @@ namespace MatterHackers.GCodeVisualizer private Color gray; public RenderFeatureExtrusion(int instructionIndex, Vector3 start, Vector3 end, int toolIndex, double travelSpeed, double totalExtrusionMm, double filamentDiameterMm, double layerHeight, Color color, Color gray) - : base(instructionIndex, start, end, toolIndex, travelSpeed) + : base(instructionIndex, start, end, toolIndex, travelSpeed, false) { this.color = color; this.gray = gray; diff --git a/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureRetract.cs b/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureRetract.cs index 0ac0e0e90..bc47c7063 100644 --- a/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureRetract.cs +++ b/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureRetract.cs @@ -111,7 +111,7 @@ namespace MatterHackers.GCodeVisualizer else if (extrusionAmount > 0) { // unretraction - retractionColor = new Color(Color.Blue, 200); + retractionColor = Color.Blue.WithAlpha(120); } if (graphics2D is Graphics2DOpenGL graphics2DGl) diff --git a/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureTravel.cs b/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureTravel.cs index c90587515..34516c282 100644 --- a/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureTravel.cs +++ b/MatterControl.OpenGL/GCodeRenderer/RenderFeatures/RenderFeatureTravel.cs @@ -40,25 +40,27 @@ namespace MatterHackers.GCodeVisualizer protected Vector3Float end; protected float travelSpeed; + private bool retractionTravel; public Vector3Float Start => start; public Vector3Float End => end; - public RenderFeatureTravel(int instructionIndex, Vector3 start, Vector3 end, int toolIndex, double travelSpeed) + public RenderFeatureTravel(int instructionIndex, Vector3 start, Vector3 end, int toolIndex, double travelSpeed, bool retractionTravel) : base(instructionIndex, toolIndex) { this.toolIndex = toolIndex; this.start = new Vector3Float(start); this.end = new Vector3Float(end); this.travelSpeed = (float)travelSpeed; + this.retractionTravel = retractionTravel; } public override void CreateRender3DData(VectorPOD colorVertexData, VectorPOD indexData, GCodeRenderInfo renderInfo) { if ((renderInfo.CurrentRenderType & RenderType.Moves) == RenderType.Moves) { - CreateCylinder(colorVertexData, indexData, new Vector3(start), new Vector3(end), .1, 6, GCodeRenderer.TravelColor, .2); + CreateCylinder(colorVertexData, indexData, new Vector3(start), new Vector3(end), .1, 6, retractionTravel ? GCodeRenderer.RetractionColor : GCodeRenderer.TravelColor, .2); } } @@ -84,9 +86,14 @@ namespace MatterHackers.GCodeVisualizer var endPoint = new Vector2(end.X, end.Y); renderInfo.Transform.transform(ref endPoint); + if (retractionTravel) + { + movementColor = GCodeRenderer.RetractionColor; + } + if (renderInfo.CurrentRenderType.HasFlag(RenderType.TransparentExtrusion)) { - movementColor = new Color(movementColor, 200); + movementColor = movementColor.WithAlpha(120); } graphics2DGl.DrawAALineRounded(startPoint, endPoint, movementLineWidth, movementColor);