Merge pull request #967 from thopiekar/master-CURA-1445

[CURA-1445] Adding hashes
This commit is contained in:
jack 2016-09-13 12:55:01 +02:00 committed by GitHub
commit 7d5eb493c7

View File

@ -1,6 +1,8 @@
# Copyright (c) 2015 Ultimaker B.V. # Copyright (c) 2015 Ultimaker B.V.
# Cura is released under the terms of the AGPLv3 or higher. # Cura is released under the terms of the AGPLv3 or higher.
from cura.CuraApplication import CuraApplication
from UM.Extension import Extension from UM.Extension import Extension
from UM.Application import Application from UM.Application import Application
from UM.Preferences import Preferences from UM.Preferences import Preferences
@ -18,6 +20,7 @@ import math
import urllib.request import urllib.request
import urllib.parse import urllib.parse
import ssl import ssl
import hashlib
catalog = i18nCatalog("cura") catalog = i18nCatalog("cura")
@ -80,6 +83,16 @@ class SliceInfo(Extension):
Logger.log("d", "'info/send_slice_info' is turned off.") Logger.log("d", "'info/send_slice_info' is turned off.")
return # Do nothing, user does not want to send data return # Do nothing, user does not want to send data
# Listing all files placed on the buildplate
modelhashes = []
for node in DepthFirstIterator(CuraApplication.getInstance().getController().getScene().getRoot()):
if type(node) is not SceneNode or not node.getMeshData():
continue
modelhashes.append(node.getMeshData().getHash())
# Creating md5sums and formatting them as discussed on JIRA
modelhash_formatted = ",".join(modelhashes)
global_container_stack = Application.getInstance().getGlobalContainerStack() global_container_stack = Application.getInstance().getGlobalContainerStack()
# Get total material used (in mm^3) # Get total material used (in mm^3)
@ -89,27 +102,6 @@ class SliceInfo(Extension):
# TODO: Send material per extruder instead of mashing it on a pile # TODO: Send material per extruder instead of mashing it on a pile
material_used = math.pi * material_radius * material_radius * sum(print_information.materialLengths) #Volume of all materials used material_used = math.pi * material_radius * material_radius * sum(print_information.materialLengths) #Volume of all materials used
# Get model information (bounding boxes, hashes and transformation matrix)
models_info = []
for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()):
if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None:
if not getattr(node, "_outside_buildarea", False):
model_info = {}
model_info["hash"] = node.getMeshData().getHash()
model_info["bounding_box"] = {}
model_info["bounding_box"]["minimum"] = {}
model_info["bounding_box"]["minimum"]["x"] = node.getBoundingBox().minimum.x
model_info["bounding_box"]["minimum"]["y"] = node.getBoundingBox().minimum.y
model_info["bounding_box"]["minimum"]["z"] = node.getBoundingBox().minimum.z
model_info["bounding_box"]["maximum"] = {}
model_info["bounding_box"]["maximum"]["x"] = node.getBoundingBox().maximum.x
model_info["bounding_box"]["maximum"]["y"] = node.getBoundingBox().maximum.y
model_info["bounding_box"]["maximum"]["z"] = node.getBoundingBox().maximum.z
model_info["transformation"] = str(node.getWorldTransformation().getData())
models_info.append(model_info)
# Bundle the collected data # Bundle the collected data
submitted_data = { submitted_data = {
"processor": platform.processor(), "processor": platform.processor(),
@ -117,7 +109,7 @@ class SliceInfo(Extension):
"platform": platform.platform(), "platform": platform.platform(),
"settings": global_container_stack.serialize(), # global_container with references on used containers "settings": global_container_stack.serialize(), # global_container with references on used containers
"version": Application.getInstance().getVersion(), "version": Application.getInstance().getVersion(),
"modelhash": "None", "modelhash": modelhash_formatted,
"printtime": print_information.currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601), "printtime": print_information.currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601),
"filament": material_used, "filament": material_used,
"language": Preferences.getInstance().getValue("general/language"), "language": Preferences.getInstance().getValue("general/language"),