mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
D5: Moved loading files code
This commit is contained in:
parent
cd7979e301
commit
c18b3149da
5 changed files with 24 additions and 79 deletions
|
@ -539,9 +539,6 @@ class CuraApplication(QtApplication):
|
||||||
|
|
||||||
qmlRegisterType(QUrl.fromLocalFile(path), "Cura", 1, 0, type_name)
|
qmlRegisterType(QUrl.fromLocalFile(path), "Cura", 1, 0, type_name)
|
||||||
|
|
||||||
loadingFiles = []
|
|
||||||
non_sliceable_extensions = [".gcode", ".g"]
|
|
||||||
|
|
||||||
changeLayerViewSignal = pyqtSignal()
|
changeLayerViewSignal = pyqtSignal()
|
||||||
|
|
||||||
def changeToLayerView(self):
|
def changeToLayerView(self):
|
||||||
|
@ -551,63 +548,6 @@ class CuraApplication(QtApplication):
|
||||||
view.setLayer(999999)
|
view.setLayer(999999)
|
||||||
view.calculateMaxLayers()
|
view.calculateMaxLayers()
|
||||||
|
|
||||||
@pyqtSlot(QUrl)
|
|
||||||
def loadFile(self, file):
|
|
||||||
scene = self.getController().getScene()
|
|
||||||
|
|
||||||
if not file.isValid():
|
|
||||||
return
|
|
||||||
|
|
||||||
for node in DepthFirstIterator(scene.getRoot()):
|
|
||||||
if hasattr(node, "gcode") and getattr(node, "gcode") is True:
|
|
||||||
self.deleteAll()
|
|
||||||
break
|
|
||||||
|
|
||||||
f = file.toLocalFile()
|
|
||||||
extension = os.path.splitext(f)[1]
|
|
||||||
filename = os.path.basename(f)
|
|
||||||
if len(self.loadingFiles) > 0:
|
|
||||||
# If a non-slicable file is already being loaded, we prevent loading of any further non-slicable files
|
|
||||||
if extension.lower() in self.non_sliceable_extensions:
|
|
||||||
message = Message(
|
|
||||||
catalog.i18nc("@info:status", "Only one G-code file can be loaded at a time. Skipped importing {0}",
|
|
||||||
filename))
|
|
||||||
message.show()
|
|
||||||
return
|
|
||||||
# If file being loaded is non-slicable file, then prevent loading of any other files
|
|
||||||
extension = os.path.splitext(self.loadingFiles[0])[1]
|
|
||||||
if extension.lower() in self.non_sliceable_extensions:
|
|
||||||
message = Message(
|
|
||||||
catalog.i18nc("@info:status",
|
|
||||||
"Can't open any other file if G-code is loading. Skipped importing {0}",
|
|
||||||
filename))
|
|
||||||
message.show()
|
|
||||||
return
|
|
||||||
|
|
||||||
self.loadingFiles.append(f)
|
|
||||||
|
|
||||||
job = ReadMeshJob(f)
|
|
||||||
job.finished.connect(self._readMeshFinished)
|
|
||||||
job.start()
|
|
||||||
|
|
||||||
def _readMeshFinished(self, job):
|
|
||||||
node = job.getResult()
|
|
||||||
filename = job.getFileName()
|
|
||||||
self.loadingFiles.remove(filename)
|
|
||||||
|
|
||||||
if node != None:
|
|
||||||
node.setSelectable(True)
|
|
||||||
node.setName(os.path.basename(filename))
|
|
||||||
|
|
||||||
extension = os.path.splitext(filename)[1]
|
|
||||||
if extension.lower() in self.non_sliceable_extensions:
|
|
||||||
self.changeLayerViewSignal.emit()
|
|
||||||
|
|
||||||
op = AddSceneNodeOperation(node, self.getController().getScene().getRoot())
|
|
||||||
op.push()
|
|
||||||
|
|
||||||
self.getController().getScene().sceneChanged.emit(node)
|
|
||||||
|
|
||||||
def onSelectionChanged(self):
|
def onSelectionChanged(self):
|
||||||
if Selection.hasSelection():
|
if Selection.hasSelection():
|
||||||
if self.getController().getActiveTool():
|
if self.getController().getActiveTool():
|
||||||
|
|
|
@ -188,6 +188,13 @@ class CuraEngineBackend(Backend):
|
||||||
self._start_slice_job.start()
|
self._start_slice_job.start()
|
||||||
self._start_slice_job.finished.connect(self._onStartSliceCompleted)
|
self._start_slice_job.finished.connect(self._onStartSliceCompleted)
|
||||||
|
|
||||||
|
def pauseSlicing(self):
|
||||||
|
self.close()
|
||||||
|
self.backendStateChange.emit(BackendState.SlicingDisabled)
|
||||||
|
|
||||||
|
def continueSlicing(self):
|
||||||
|
self.backendStateChange.emit(BackendState.NotStarted)
|
||||||
|
|
||||||
def _onBackendStateChanged(self, state):
|
def _onBackendStateChanged(self, state):
|
||||||
if state == BackendState.SlicingDisabled:
|
if state == BackendState.SlicingDisabled:
|
||||||
self._pause_slicing = True
|
self._pause_slicing = True
|
||||||
|
|
|
@ -22,6 +22,7 @@ from cura.LayerPolygon import LayerPolygon
|
||||||
|
|
||||||
import numpy
|
import numpy
|
||||||
import math
|
import math
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
class GCodeReader(MeshReader):
|
class GCodeReader(MeshReader):
|
||||||
|
@ -39,7 +40,9 @@ class GCodeReader(MeshReader):
|
||||||
n = line.find(code) + len(code)
|
n = line.find(code) + len(code)
|
||||||
if n < 1:
|
if n < 1:
|
||||||
return None
|
return None
|
||||||
m = line.find(' ', n)
|
pattern = re.compile("[;\s]")
|
||||||
|
match = pattern.search(line, n)
|
||||||
|
m = match.start() if math is not None else -1
|
||||||
try:
|
try:
|
||||||
if m < 0:
|
if m < 0:
|
||||||
return line[n:]
|
return line[n:]
|
||||||
|
@ -66,23 +69,18 @@ class GCodeReader(MeshReader):
|
||||||
self._cancelled = True
|
self._cancelled = True
|
||||||
|
|
||||||
def _onParentChanged(self, node):
|
def _onParentChanged(self, node):
|
||||||
backend = Application.getInstance().getBackend()
|
|
||||||
if self._scene_node is not None and self._scene_node.getParent() is None:
|
if self._scene_node is not None and self._scene_node.getParent() is None:
|
||||||
self._scene_node = None
|
self._scene_node = None
|
||||||
backend.backendStateChange.emit(BackendState.NotStarted)
|
Application.getInstance().getBackend().continueSlicing()
|
||||||
Application.getInstance().setHideSettings(False)
|
Application.getInstance().setHideSettings(False)
|
||||||
Application.getInstance().getPrintInformation().setPreSliced(False)
|
Application.getInstance().getPrintInformation().setPreSliced(False)
|
||||||
# else:
|
|
||||||
# backend.backendStateChange.emit(BackendState.SlicingDisabled)
|
|
||||||
# Application.getInstance().getPrintInformation().setPreSliced(True)
|
|
||||||
# Application.getInstance().setHideSettings(True)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _getNullBoundingBox():
|
def _getNullBoundingBox():
|
||||||
return AxisAlignedBox(minimum=Vector(0, 0, 0), maximum=Vector(10, 10, 10))
|
return AxisAlignedBox(minimum=Vector(0, 0, 0), maximum=Vector(10, 10, 10))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _createPolygon(layer_data, path, layer_id, extruder):
|
def _createPolygon(layer_data, path, layer_id, extruder, thickness):
|
||||||
countvalid = 0
|
countvalid = 0
|
||||||
for point in path:
|
for point in path:
|
||||||
if point[3] > 0:
|
if point[3] > 0:
|
||||||
|
@ -92,7 +90,7 @@ class GCodeReader(MeshReader):
|
||||||
try:
|
try:
|
||||||
layer_data.addLayer(layer_id)
|
layer_data.addLayer(layer_id)
|
||||||
layer_data.setLayerHeight(layer_id, path[0][1])
|
layer_data.setLayerHeight(layer_id, path[0][1])
|
||||||
layer_data.setLayerThickness(layer_id, 0.25)
|
layer_data.setLayerThickness(layer_id, thickness)
|
||||||
this_layer = layer_data.getLayer(layer_id)
|
this_layer = layer_data.getLayer(layer_id)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return False
|
return False
|
||||||
|
@ -128,9 +126,7 @@ class GCodeReader(MeshReader):
|
||||||
self._scene_node.gcode = True
|
self._scene_node.gcode = True
|
||||||
self._scene_node.parentChanged.connect(self._onParentChanged)
|
self._scene_node.parentChanged.connect(self._onParentChanged)
|
||||||
|
|
||||||
backend = Application.getInstance().getBackend()
|
Application.getInstance().getBackend().pauseSlicing()
|
||||||
backend.close()
|
|
||||||
backend.backendStateChange.emit(BackendState.SlicingDisabled)
|
|
||||||
|
|
||||||
glist = []
|
glist = []
|
||||||
Application.getInstance().getController().getScene().gcode_list = glist
|
Application.getInstance().getController().getScene().gcode_list = glist
|
||||||
|
@ -155,6 +151,7 @@ class GCodeReader(MeshReader):
|
||||||
current_z = 0
|
current_z = 0
|
||||||
current_e = 0
|
current_e = 0
|
||||||
current_layer = 0
|
current_layer = 0
|
||||||
|
prev_z = 0
|
||||||
|
|
||||||
self._message = Message(catalog.i18nc("@info:status", "Parsing GCODE"), lifetime=0)
|
self._message = Message(catalog.i18nc("@info:status", "Parsing GCODE"), lifetime=0)
|
||||||
self._message.setProgress(0)
|
self._message.setProgress(0)
|
||||||
|
@ -188,6 +185,7 @@ class GCodeReader(MeshReader):
|
||||||
if z is not None:
|
if z is not None:
|
||||||
if not current_z == z:
|
if not current_z == z:
|
||||||
z_changed = True
|
z_changed = True
|
||||||
|
prev_z = current_z
|
||||||
current_z = z
|
current_z = z
|
||||||
if e is not None:
|
if e is not None:
|
||||||
if e > current_e:
|
if e > current_e:
|
||||||
|
@ -196,10 +194,10 @@ class GCodeReader(MeshReader):
|
||||||
current_path.append([current_x, current_y, current_z, LayerPolygon.MoveRetractionType]) # retraction
|
current_path.append([current_x, current_y, current_z, LayerPolygon.MoveRetractionType]) # retraction
|
||||||
current_e = e
|
current_e = e
|
||||||
else:
|
else:
|
||||||
current_path.append([current_x, current_y, current_z, LayerPolygon.NoneType])
|
current_path.append([current_x, current_y, current_z, LayerPolygon.MoveCombingType])
|
||||||
if z_changed:
|
if z_changed:
|
||||||
if len(current_path) > 1 and current_z > 0:
|
if len(current_path) > 1 and current_z > 0:
|
||||||
if self._createPolygon(layer_data_builder, current_path, current_layer, current_extruder):
|
if self._createPolygon(layer_data_builder, current_path, current_layer, current_extruder, math.fabs(current_z - prev_z)):
|
||||||
current_layer += 1
|
current_layer += 1
|
||||||
current_path.clear()
|
current_path.clear()
|
||||||
else:
|
else:
|
||||||
|
@ -231,14 +229,14 @@ class GCodeReader(MeshReader):
|
||||||
if T is not None:
|
if T is not None:
|
||||||
current_extruder = T
|
current_extruder = T
|
||||||
if len(current_path) > 1 and current_z > 0:
|
if len(current_path) > 1 and current_z > 0:
|
||||||
if self._createPolygon(layer_data_builder, current_path, current_layer, current_extruder):
|
if self._createPolygon(layer_data_builder, current_path, current_layer, current_extruder, math.fabs(current_z - prev_z)):
|
||||||
current_layer += 1
|
current_layer += 1
|
||||||
current_path.clear()
|
current_path.clear()
|
||||||
else:
|
else:
|
||||||
current_path.clear()
|
current_path.clear()
|
||||||
|
|
||||||
if len(current_path) > 1 and current_z > 0:
|
if len(current_path) > 1 and current_z > 0:
|
||||||
if self._createPolygon(layer_data_builder, current_path, current_layer, current_extruder):
|
if self._createPolygon(layer_data_builder, current_path, current_layer, current_extruder, math.fabs(current_z - prev_z)):
|
||||||
current_layer += 1
|
current_layer += 1
|
||||||
current_path.clear()
|
current_path.clear()
|
||||||
|
|
||||||
|
|
|
@ -275,7 +275,7 @@ UM.MainWindow
|
||||||
// There is no endsWith in this version of JS...
|
// There is no endsWith in this version of JS...
|
||||||
if ((drop.urls[i].length <= 12) || (drop.urls[i].substring(drop.urls[i].length-12) !== ".curaprofile")) {
|
if ((drop.urls[i].length <= 12) || (drop.urls[i].substring(drop.urls[i].length-12) !== ".curaprofile")) {
|
||||||
// Drop an object
|
// Drop an object
|
||||||
Printer.loadFile(drop.urls[i]);
|
UM.MeshFileHandler.readLocalFile(drop.urls[i]);
|
||||||
if (imported_model == -1)
|
if (imported_model == -1)
|
||||||
{
|
{
|
||||||
imported_model = i;
|
imported_model = i;
|
||||||
|
@ -737,7 +737,7 @@ UM.MainWindow
|
||||||
|
|
||||||
for(var i in fileUrls)
|
for(var i in fileUrls)
|
||||||
{
|
{
|
||||||
Printer.loadFile(fileUrls[i])
|
UM.MeshFileHandler.readLocalFile(fileUrls[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
var meshName = backgroundItem.getMeshName(fileUrls[0].toString())
|
var meshName = backgroundItem.getMeshName(fileUrls[0].toString())
|
||||||
|
|
|
@ -26,7 +26,7 @@ Menu
|
||||||
return (index + 1) + ". " + path.slice(path.lastIndexOf("/") + 1);
|
return (index + 1) + ". " + path.slice(path.lastIndexOf("/") + 1);
|
||||||
}
|
}
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
Printer.loadFile(modelData);
|
UM.MeshFileHandler.readLocalFile(modelData);
|
||||||
var meshName = backgroundItem.getMeshName(modelData.toString())
|
var meshName = backgroundItem.getMeshName(modelData.toString())
|
||||||
backgroundItem.hasMesh(decodeURIComponent(meshName))
|
backgroundItem.hasMesh(decodeURIComponent(meshName))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue