mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-21 05:09:37 +08:00

CURA-4875 When encoding is not provided, the behaviour is system dependent and it can break on OS X.
45 lines
1.8 KiB
Python
Executable File
45 lines
1.8 KiB
Python
Executable File
# Copyright (c) 2017 Aleph Objects, Inc.
|
|
# Cura is released under the terms of the LGPLv3 or higher.
|
|
|
|
from UM.FileHandler.FileReader import FileReader
|
|
from UM.Mesh.MeshReader import MeshReader
|
|
from UM.i18n import i18nCatalog
|
|
from UM.Preferences import Preferences
|
|
|
|
catalog = i18nCatalog("cura")
|
|
from . import MarlinFlavorParser, RepRapFlavorParser
|
|
|
|
# Class for loading and parsing G-code files
|
|
class GCodeReader(MeshReader):
|
|
|
|
_flavor_default = "Marlin"
|
|
_flavor_keyword = ";FLAVOR:"
|
|
_flavor_readers_dict = {"RepRap" : RepRapFlavorParser.RepRapFlavorParser(),
|
|
"Marlin" : MarlinFlavorParser.MarlinFlavorParser()}
|
|
|
|
def __init__(self):
|
|
super(GCodeReader, self).__init__()
|
|
self._supported_extensions = [".gcode", ".g"]
|
|
self._flavor_reader = None
|
|
|
|
Preferences.getInstance().addPreference("gcodereader/show_caution", True)
|
|
|
|
# PreRead is used to get the correct flavor. If not, Marlin is set by default
|
|
def preRead(self, file_name, *args, **kwargs):
|
|
with open(file_name, "r", encoding = "utf-8") as file:
|
|
for line in file:
|
|
if line[:len(self._flavor_keyword)] == self._flavor_keyword:
|
|
try:
|
|
self._flavor_reader = self._flavor_readers_dict[line[len(self._flavor_keyword):].rstrip()]
|
|
return FileReader.PreReadResult.accepted
|
|
except:
|
|
# If there is no entry in the dictionary for this flavor, just skip and select the by-default flavor
|
|
break
|
|
|
|
# If no flavor is found in the GCode, then we use the by-default
|
|
self._flavor_reader = self._flavor_readers_dict[self._flavor_default]
|
|
return FileReader.PreReadResult.accepted
|
|
|
|
def read(self, file_name):
|
|
return self._flavor_reader.processGCodeFile(file_name)
|