protected virtual List <LayerInfo <TFeatureInfo> > PerLayerInfoFromGCodeFile(GCodeFile gcode) { featureInfoFactory.Initialize(); var layers = new List <LayerInfo <TFeatureInfo> >(); LayerInfo <TFeatureInfo> currentLayer = null; FillTypeFlags fillType = FillTypeFlags.Unknown; foreach (var line in gcode.AllLines()) { if (LineIsNewLayer(line)) { if (currentLayer != null) { currentLayer.AddFeatureInfo(featureInfoFactory.SwitchFeature(fillType)); layers.Add(currentLayer); } currentLayer = new LayerInfo <TFeatureInfo>(); continue; } if (LineIsNewFeatureType(line, fillType, out var newFillType)) { currentLayer?.AddFeatureInfo(featureInfoFactory.SwitchFeature(newFillType)); } featureInfoFactory.ObserveGcodeLine(line); } currentLayer?.AddFeatureInfo(featureInfoFactory.SwitchFeature(fillType)); layers.Add(currentLayer); return(layers); }