diff --git a/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs b/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs index a05844ae9..d8e9fc068 100644 --- a/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs +++ b/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs @@ -56,15 +56,24 @@ namespace MatterHackers.GCodeVisualizer public static Color TravelColor = Color.Green; - private static readonly bool Is32Bit = IntPtr.Size == 4; + internal class Layer + { + internal List startIndices = new List(); + internal List endIndices = new List(); + internal List features = new List(); + } - private List> featureStartIndex = new List>(); - private List> featureEndIndex = new List>(); - private List> renderFeatures = new List>(); + internal class FeatureSet + { + internal List> startIndices = new List>(); + internal List> endIndices = new List>(); + internal List> features = new List>(); + } + + private FeatureSet all = new FeatureSet(); private List layerVertexBuffer; private RenderType lastRenderType = RenderType.None; - private GCodeRenderInfo renderInfo; private GCodeFile gCodeFileToDraw; public GCodeRenderer(GCodeFile gCodeFileToDraw) @@ -80,7 +89,7 @@ namespace MatterHackers.GCodeVisualizer for (int i = 0; i < gCodeFileToDraw.LayerCount; i++) { - renderFeatures.Add(new List()); + all.features.Add(new List()); } } } @@ -93,13 +102,13 @@ namespace MatterHackers.GCodeVisualizer public void CreateFeaturesForLayerIfRequired(int layerToCreate) { - if (renderFeatures.Count == 0 - || renderFeatures[layerToCreate].Count > 0) + if (all.features.Count == 0 + || all.features[layerToCreate].Count > 0) { return; } - List renderFeaturesForLayer = renderFeatures[layerToCreate]; + List renderFeaturesForLayer = all.features[layerToCreate]; int startRenderIndex = gCodeFileToDraw.GetFirstLayerInstruction(layerToCreate); int endRenderIndex = gCodeFileToDraw.LineCount - 1; @@ -177,7 +186,7 @@ namespace MatterHackers.GCodeVisualizer public int GetNumFeatures(int layerToCountFeaturesOn) { CreateFeaturesForLayerIfRequired(layerToCountFeaturesOn); - return renderFeatures[layerToCountFeaturesOn].Count; + return all.features[layerToCountFeaturesOn].Count; } public RenderFeatureBase this[int layerIndex, int featureIndex] @@ -186,7 +195,7 @@ namespace MatterHackers.GCodeVisualizer { try { - var layer = renderFeatures[layerIndex]; + var layer = all.features[layerIndex]; if (featureIndex < layer.Count) { @@ -206,11 +215,11 @@ namespace MatterHackers.GCodeVisualizer public void Render(Graphics2D graphics2D, GCodeRenderInfo renderInfo) { - if (renderFeatures.Count > 0) + if (all.features.Count > 0) { CreateFeaturesForLayerIfRequired(renderInfo.EndLayerIndex); - int featuresOnLayer = renderFeatures[renderInfo.EndLayerIndex].Count; + int featuresOnLayer = all.features[renderInfo.EndLayerIndex].Count; int endFeature = (int)(featuresOnLayer * renderInfo.FeatureToEndOnRatio0To1 + .5); endFeature = Math.Max(0, Math.Min(endFeature, featuresOnLayer)); @@ -229,7 +238,7 @@ namespace MatterHackers.GCodeVisualizer startFeature = Math.Max(endFeature - 1, 0); } - Graphics2DOpenGL graphics2DGl = graphics2D as Graphics2DOpenGL; + var graphics2DGl = graphics2D as Graphics2DOpenGL; if (graphics2DGl != null) { graphics2DGl.PreRender(Color.White); @@ -238,7 +247,7 @@ namespace MatterHackers.GCodeVisualizer int lastFeature = endFeature - 1; for (int i = startFeature; i < endFeature; i++) { - RenderFeatureBase feature = renderFeatures[renderInfo.EndLayerIndex][i]; + RenderFeatureBase feature = all.features[renderInfo.EndLayerIndex][i]; if (feature != null) { feature.Render(graphics2DGl, renderInfo, highlightFeature: this.GCodeInspector && i == lastFeature); @@ -251,7 +260,7 @@ namespace MatterHackers.GCodeVisualizer { for (int i = startFeature; i < endFeature; i++) { - RenderFeatureBase feature = renderFeatures[renderInfo.EndLayerIndex][i]; + RenderFeatureBase feature = all.features[renderInfo.EndLayerIndex][i]; if (feature != null) { feature.Render(graphics2D, renderInfo); @@ -266,14 +275,14 @@ namespace MatterHackers.GCodeVisualizer var colorVertexData = new VectorPOD(); var vertexIndexArray = new VectorPOD(); - featureStartIndex[layerIndex].Clear(); - featureEndIndex[layerIndex].Clear(); + all.startIndices[layerIndex].Clear(); + all.endIndices[layerIndex].Clear(); - for (int i = 0; i < renderFeatures[layerIndex].Count; i++) + for (int i = 0; i < all.features[layerIndex].Count; i++) { - featureStartIndex[layerIndex].Add(vertexIndexArray.Count); + all.startIndices[layerIndex].Add(vertexIndexArray.Count); - RenderFeatureBase feature = renderFeatures[layerIndex][i]; + RenderFeatureBase feature = all.features[layerIndex][i]; if (feature != null) { @@ -281,7 +290,7 @@ namespace MatterHackers.GCodeVisualizer feature.CreateRender3DData(colorVertexData, vertexIndexArray, renderInfo); } - featureEndIndex[layerIndex].Add(vertexIndexArray.Count); + all.endIndices[layerIndex].Add(vertexIndexArray.Count); } // Construct and return the new VertexBuffer object with all color/index data @@ -308,7 +317,6 @@ namespace MatterHackers.GCodeVisualizer } } - public void Render3D(GCodeRenderInfo renderInfo, DrawEventArgs e) { if (renderInfo == null) @@ -322,8 +330,8 @@ namespace MatterHackers.GCodeVisualizer for (int layerIndex = 0; layerIndex < gCodeFileToDraw.LayerCount; layerIndex++) { layerVertexBuffer.Add(null); - featureStartIndex.Add(new List()); - featureEndIndex.Add(new List()); + all.startIndices.Add(new List()); + all.endIndices.Add(new List()); } } @@ -338,7 +346,7 @@ namespace MatterHackers.GCodeVisualizer lastRenderType = renderInfo.CurrentRenderType; } - if (renderFeatures.Count > 0) + if (all.features.Count > 0) { for (int i = renderInfo.EndLayerIndex - 1; i >= renderInfo.StartLayerIndex; i--) { @@ -359,11 +367,11 @@ namespace MatterHackers.GCodeVisualizer { for (int i = renderInfo.StartLayerIndex; i < renderInfo.EndLayerIndex - 1; i++) { - int featuresOnLayer = renderFeatures[i].Count; + int featuresOnLayer = all.features[i].Count; if (featuresOnLayer > 1 && layerVertexBuffer[i] != null) { - layerVertexBuffer[i].RenderRange(0, featureEndIndex[i][featuresOnLayer - 1]); + layerVertexBuffer[i].RenderRange(0, all.endIndices[i][featuresOnLayer - 1]); } } } @@ -371,7 +379,7 @@ namespace MatterHackers.GCodeVisualizer // draw the partial layer of end-1 from startRatio to endRatio { int layerIndex = renderInfo.EndLayerIndex - 1; - int featuresOnLayer = renderFeatures[layerIndex].Count; + int featuresOnLayer = all.features[layerIndex].Count; int startFeature = (int)(featuresOnLayer * renderInfo.FeatureToStartOnRatio0To1 + .5); startFeature = Math.Max(0, Math.Min(startFeature, featuresOnLayer)); @@ -394,9 +402,9 @@ namespace MatterHackers.GCodeVisualizer if (endFeature > startFeature && layerVertexBuffer[layerIndex] != null) { - int ellementCount = featureEndIndex[layerIndex][endFeature - 1] - featureStartIndex[layerIndex][startFeature]; + int ellementCount = all.endIndices[layerIndex][endFeature - 1] - all.startIndices[layerIndex][startFeature]; - layerVertexBuffer[layerIndex].RenderRange(featureStartIndex[layerIndex][startFeature], ellementCount); + layerVertexBuffer[layerIndex].RenderRange(all.startIndices[layerIndex][startFeature], ellementCount); } } GL.PopAttrib(); diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index a8cc12c39..15c1f5485 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit a8cc12c399a5ee4ae4a972135068380f44a4a9be +Subproject commit 15c1f548527485efad9b20ca4abaa58ce661ffde