mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Remove metadata exporting to ufp
CURA-8610
This commit is contained in:
parent
ec60325a3f
commit
ca9955c730
1 changed files with 19 additions and 50 deletions
|
@ -16,14 +16,13 @@ from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
|
||||||
from UM.PluginRegistry import PluginRegistry # To get the g-code writer.
|
from UM.PluginRegistry import PluginRegistry # To get the g-code writer.
|
||||||
|
|
||||||
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
||||||
|
from UM.Scene.SceneNode import SceneNode
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
from cura.CuraPackageManager import CuraPackageManager
|
|
||||||
from cura.Utils.Threading import call_on_qt_thread
|
from cura.Utils.Threading import call_on_qt_thread
|
||||||
|
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
|
|
||||||
METADATA_OBJECTS_PATH = "metadata/objects"
|
METADATA_OBJECTS_PATH = "metadata/objects"
|
||||||
METADATA_MATERIALS_PATH = "metadata/packages"
|
|
||||||
|
|
||||||
catalog = i18nCatalog("cura")
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
@ -50,7 +49,7 @@ class UFPWriter(MeshWriter):
|
||||||
archive.openStream(stream, "application/x-ufp", OpenMode.WriteOnly)
|
archive.openStream(stream, "application/x-ufp", OpenMode.WriteOnly)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self._writeMetadata(archive)
|
self._writeObjectList(archive)
|
||||||
|
|
||||||
# Store the g-code from the scene.
|
# Store the g-code from the scene.
|
||||||
archive.addContentType(extension = "gcode", mime_type = "text/x-gcode")
|
archive.addContentType(extension = "gcode", mime_type = "text/x-gcode")
|
||||||
|
@ -164,60 +163,30 @@ class UFPWriter(MeshWriter):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _writeMetadata(archive: VirtualFile):
|
def _writeObjectList(archive):
|
||||||
material_metadata = UFPWriter._getMaterialPackageMetadata()
|
"""Write a json list of object names to the METADATA_OBJECTS_PATH metadata field
|
||||||
object_metadata = UFPWriter._getObjectMetadata()
|
|
||||||
|
|
||||||
data = {METADATA_MATERIALS_PATH: material_metadata,
|
To retrieve, use: `archive.getMetadata(METADATA_OBJECTS_PATH)`
|
||||||
METADATA_OBJECTS_PATH: object_metadata}
|
"""
|
||||||
|
|
||||||
|
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)
|
archive.setMetadata(data)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _getObjectMetadata() -> List[Dict[str, str]]:
|
def _getObjectMetadata(node: SceneNode) -> List[Dict[str, str]]:
|
||||||
"""Get object metadata to write for a Node.
|
"""Get object metadata to write for a Node.
|
||||||
|
|
||||||
:return: List of object 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 = []
|
|
||||||
|
|
||||||
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")]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue