Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaime van Kessel <nallath@gmail.com>2016-11-10 13:27:25 +0300
committerJaime van Kessel <nallath@gmail.com>2016-11-10 13:27:25 +0300
commit61d1199abfb97b0187eeee02d5f0ae52524f05ad (patch)
tree29ec995cea78520b2ecfcc2553f9607549a494e0 /plugins/3MFWriter/ThreeMFWorkspaceWriter.py
parent54040d4c992aa2b1630b48ce111db93243fd0015 (diff)
The entire machine is now saved to 3mf file when saving workspace
CURA-1263
Diffstat (limited to 'plugins/3MFWriter/ThreeMFWorkspaceWriter.py')
-rw-r--r--plugins/3MFWriter/ThreeMFWorkspaceWriter.py54
1 files changed, 38 insertions, 16 deletions
diff --git a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py
index cfc3e18eb1..1b00451e92 100644
--- a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py
+++ b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py
@@ -1,6 +1,8 @@
from UM.Workspace.WorkspaceWriter import WorkspaceWriter
from UM.Application import Application
from UM.Preferences import Preferences
+from UM.Settings.ContainerRegistry import ContainerRegistry
+from cura.Settings.ExtruderManager import ExtruderManager
import zipfile
from io import StringIO
@@ -20,30 +22,50 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter):
mesh_writer.write(stream, nodes, mode)
archive = mesh_writer.getArchive()
- # Add global container stack data to the archive.
global_container_stack = Application.getInstance().getGlobalContainerStack()
- global_stack_file = zipfile.ZipInfo("Cura/%s.stack.cfg" % global_container_stack.getId())
- global_stack_file.compress_type = zipfile.ZIP_DEFLATED
- archive.writestr(global_stack_file, global_container_stack.serialize())
-
- # Write user changes to the archive.
- global_user_instance_container = global_container_stack.getTop()
- global_user_instance_file = zipfile.ZipInfo("Cura/%s.inst.cfg" % global_user_instance_container.getId())
- global_user_instance_container.compress_type = zipfile.ZIP_DEFLATED
- archive.writestr(global_user_instance_file, global_user_instance_container.serialize())
-
- # Write quality changes to the archive.
- global_quality_changes = global_container_stack.findContainer({"type": "quality_changes"})
- global_quality_changes_file = zipfile.ZipInfo("Cura/%s.inst.cfg" % global_quality_changes.getId())
- global_quality_changes.compress_type = zipfile.ZIP_DEFLATED
- archive.writestr(global_quality_changes_file, global_quality_changes.serialize())
+
+ # Add global container stack data to the archive.
+ self._writeContainerToArchive(global_container_stack, archive)
+
+ # Also write all containers in the stack to the file
+ for container in global_container_stack.getContainers():
+ self._writeContainerToArchive(container, archive)
+
+ # Check if the machine has extruders and save all that data as well.
+ for extruder_stack in ExtruderManager.getInstance().getMachineExtruders(global_container_stack.getId()):
+ self._writeContainerToArchive(extruder_stack, archive)
+ for container in extruder_stack.getContainers():
+ self._writeContainerToArchive(container, archive)
# Write preferences to archive
preferences_file = zipfile.ZipInfo("Cura/preferences.cfg")
preferences_string = StringIO()
Preferences.getInstance().writeToFile(preferences_string)
archive.writestr(preferences_file, preferences_string.getvalue())
+
# Close the archive & reset states.
archive.close()
mesh_writer.setStoreArchive(False)
return True
+
+ @staticmethod
+ def _writeContainerToArchive(container, archive):
+ if type(container) == type(ContainerRegistry.getInstance().getEmptyInstanceContainer()):
+ return # Empty file, do nothing.
+
+ file_suffix = ContainerRegistry.getMimeTypeForContainer(type(container)).suffixes[0]
+
+ # Some containers have a base file, which should then be the file to use.
+ base_file = container.getMetaDataEntry("base_file", None)
+ if base_file:
+ container = ContainerRegistry.getInstance().findContainers(id = base_file)[0]
+
+ file_name = "Cura/%s.%s" % (container.getId(), file_suffix)
+
+ if file_name in archive.namelist():
+ return # File was already saved, no need to do it again.
+
+ file_in_archive = zipfile.ZipInfo(file_name)
+ file_in_archive.compress_type = zipfile.ZIP_DEFLATED
+
+ archive.writestr(file_in_archive, container.serialize())