Browse Source

Remove metadata exporting to ufp

CURA-8610
j.delarago 2 years ago
parent
commit
ca9955c730
1 changed files with 17 additions and 48 deletions
  1. 17 48
      plugins/UFPWriter/UFPWriter.py

+ 17 - 48
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}
-
-        archive.setMetadata(data)
-
-    @staticmethod
-    def _getObjectMetadata() -> List[Dict[str, str]]:
-        """Get object metadata to write for a Node.
-
-        :return: List of object metadata dictionaries.
+        To retrieve, use: `archive.getMetadata(METADATA_OBJECTS_PATH)`
         """
-        metadata = []
 
         objects_model = CuraApplication.getInstance().getObjectsModel()
+        object_metas = []
 
         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()})
+            object_metas.extend(UFPWriter._getObjectMetadata(item["node"]))
 
-        return metadata
+        data = {METADATA_OBJECTS_PATH: object_metas}
+        archive.setMetadata(data)
 
     @staticmethod
-    def _getMaterialPackageMetadata() -> List[Dict[str, str]]:
-        """Get metadata for installed materials in active extruder stack, this does not include bundled materials.
+    def _getObjectMetadata(node: SceneNode) -> List[Dict[str, str]]:
+        """Get object metadata to write for a Node.
 
-        :return: List of material metadata dictionaries.
+        :return: List of object metadata dictionaries.
+                 Might contain > 1 element in case of a group node.
+                 Might be empty in case of nonPrintingMesh
         """
-        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")]