diff --git a/GcodeFileSplitter.py b/GcodeFileSplitter.py index d2b8e4e..b3655be 100644 --- a/GcodeFileSplitter.py +++ b/GcodeFileSplitter.py @@ -6,7 +6,7 @@ import re from math import isclose logging.basicConfig(level=logging.DEBUG, - format='%(asctime)s - %(message)s') + format='%(asctime)s - %(levelname)s: %(message)s') FLOAT_OR_INT = r'\d+(\.\d*)?' @@ -59,6 +59,12 @@ class GcodeFileAnalyzer: layerCountMatch = RE_LAYER_COUNT.search(fullCode) self.layerCount = int(layerCountMatch.group(1)) layersList = RE_LAYER.findall(fullCode) + + if len(layersList) != self.layerCount: + logging.warning('Gcode states wrong layer count {}. But found {} layers.' + .format(layerCountMatch.group(0), len(layersList))) + self.layerCount = len(layersList) + layersIndices = [self.lines.index(layer) for layer in layersList] + [startOfFooterIndex] self.layers = [Layer(self.lines[i:j]) for i, j in zip(layersIndices[:-1], layersIndices[1:])] @@ -202,6 +208,8 @@ class Layer: if __name__ == '__main__': - GcodeFileAnalyzer.SplitFileAtLayers('test/BigL.gcode', ['2.8001mm', 300]) + # GcodeFileAnalyzer.SplitFileAtLayers('test/BigL.gcode', ['2.8001mm', 300]) # GcodeFileAnalyzer.SplitFileAtLayers(r"Q:\DIY\3Dprint\Models\Thingiverse\Murmelbahnen\The_Cyclone_triple_lift_triple_track_marble_machine\files\gcode\Marble_machine.gcode", - # [118, 160, 240, 360, 480]) + # ['97.3mm', 405, 480]) + GcodeFileAnalyzer.SplitFileAtLayers(r"Q:\DIY\3Dprint\Models\Thingiverse\Shuttle\Shuttle.gcode", + [334]) diff --git a/GcodeSplitterTest.py b/GcodeSplitterTest.py index 5b58b6b..e6d6e10 100644 --- a/GcodeSplitterTest.py +++ b/GcodeSplitterTest.py @@ -23,6 +23,7 @@ class GcodeTest(unittest.TestCase): self.assertEqual(gcode.layers[3].lines, [';LAYER:3', 'G0 Z0.9', 'G1 E33.33', ';TIME_ELAPSED:4.11',]) self.assertEqual(gcode.layerCount, 4) self.assertEqual(gcode.fanSpeedCode, 'M106 S255') + self.assertEqual(gcode.layerCount, len(gcode.layers)) def test_SplitInTwo(self): gcode = GcodeFileAnalyzer(dummyGcode)