From ca9955c7305b433f31eb314099afcc6dd77fd7c8 Mon Sep 17 00:00:00 2001 From: "j.delarago" Date: Tue, 31 May 2022 12:43:52 +0200 Subject: [PATCH] Remove metadata exporting to ufp CURA-8610 --- plugins/UFPWriter/UFPWriter.py | 69 ++++++++++------------------------ 1 file changed, 19 insertions(+), 50 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 0ff476e26b..52dab1efc7 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -16,14 +16,13 @@ from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType from UM.PluginRegistry import PluginRegistry # To get the g-code writer. from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator +from UM.Scene.SceneNode import SceneNode from cura.CuraApplication import CuraApplication -from cura.CuraPackageManager import CuraPackageManager from cura.Utils.Threading import call_on_qt_thread from UM.i18n import i18nCatalog METADATA_OBJECTS_PATH = "metadata/objects" -METADATA_MATERIALS_PATH = "metadata/packages" catalog = i18nCatalog("cura") @@ -50,7 +49,7 @@ class UFPWriter(MeshWriter): archive.openStream(stream, "application/x-ufp", OpenMode.WriteOnly) try: - self._writeMetadata(archive) + self._writeObjectList(archive) # Store the g-code from the scene. archive.addContentType(extension = "gcode", mime_type = "text/x-gcode") @@ -164,60 +163,30 @@ class UFPWriter(MeshWriter): return True @staticmethod - def _writeMetadata(archive: VirtualFile): - material_metadata = UFPWriter._getMaterialPackageMetadata() - object_metadata = UFPWriter._getObjectMetadata() + def _writeObjectList(archive): + """Write a json list of object names to the METADATA_OBJECTS_PATH metadata field - data = {METADATA_MATERIALS_PATH: material_metadata, - METADATA_OBJECTS_PATH: object_metadata} + To retrieve, use: `archive.getMetadata(METADATA_OBJECTS_PATH)` + """ + objects_model = CuraApplication.getInstance().getObjectsModel() + object_metas = [] + + for item in objects_model.items: + object_metas.extend(UFPWriter._getObjectMetadata(item["node"])) + + data = {METADATA_OBJECTS_PATH: object_metas} archive.setMetadata(data) @staticmethod - def _getObjectMetadata() -> List[Dict[str, str]]: + def _getObjectMetadata(node: SceneNode) -> List[Dict[str, str]]: """Get object metadata to write for a Node. :return: List of object metadata dictionaries. + Might contain > 1 element in case of a group node. + Might be empty in case of nonPrintingMesh """ - metadata = [] - - objects_model = CuraApplication.getInstance().getObjectsModel() - - for item in objects_model.items: - for node in DepthFirstIterator(item["node"]): - if node.getMeshData() is not None and not node.callDecoration("isNonPrintingMesh"): - metadata.extend({"name": node.getName()}) - - return metadata - - @staticmethod - def _getMaterialPackageMetadata() -> List[Dict[str, str]]: - """Get metadata for installed materials in active extruder stack, this does not include bundled materials. - - :return: List of material metadata dictionaries. - """ - metadata = [] - - package_manager = cast(CuraPackageManager, CuraApplication.getInstance().getPackageManager()) - - for extruder in CuraApplication.getInstance().getExtruderManager().getActiveExtruderStacks(): - if not extruder.isEnabled: - # Don't export materials not in use - continue - - package_id = package_manager.getMaterialFilePackageId(extruder.material.getFileName(), extruder.material.getMetaDataEntry("GUID")) - package_data = package_manager.getInstalledPackageInfo(package_id) - - if not package_data or package_data.get("is_bundled"): - continue - - material_metadata = {"id": package_id, - "display_name": package_data.get("display_name"), - "website": package_data.get("website"), - "package_version": package_data.get("package_version"), - "sdk_version_semver": package_data.get("sdk_version_semver")} - - metadata.append(material_metadata) - - return metadata + return [{"name": item.getName()} + for item in DepthFirstIterator(node) + if item.getMeshData() is not None and not item.callDecoration("isNonPrintingMesh")]