Merge branch 'master' of github.com:Ultimaker/Cura

This commit is contained in:
Jaime van Kessel 2016-09-13 14:49:09 +02:00
commit db512d3b05
4 changed files with 57 additions and 30 deletions

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"),

View File

@ -2495,7 +2495,7 @@
"description": "Generate a dense interface between the model and the support. This will create a skin at the top of the support on which the model is printed and at the bottom of the support, where it rests on the model.", "description": "Generate a dense interface between the model and the support. This will create a skin at the top of the support on which the model is printed and at the bottom of the support, where it rests on the model.",
"type": "bool", "type": "bool",
"default_value": false, "default_value": false,
"global_inherits_stack": "support_extruder_nr", "global_inherits_stack": "support_interface_extruder_nr",
"enabled": "support_enable", "enabled": "support_enable",
"settable_per_mesh": true "settable_per_mesh": true
}, },
@ -2705,6 +2705,7 @@
"raft": "Raft" "raft": "Raft"
}, },
"default_value": "brim", "default_value": "brim",
"resolve": "'raft' if 'raft' in extruderValues('adhesion_type') else ('brim' if 'brim' in extruderValues('adhesion_type') else 'skirt')",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": false "settable_per_extruder": false
}, },
@ -3283,7 +3284,7 @@
"type": "extruder", "type": "extruder",
"default_value": "0", "default_value": "0",
"value": "support_extruder_nr", "value": "support_extruder_nr",
"enabled": "support_enable and machine_extruder_count > 1 and extruderValue(support_interface_extruder_nr, 'support_interface_enable')", "enabled": "support_enable and machine_extruder_count > 1",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": false "settable_per_extruder": false
} }
@ -3296,6 +3297,7 @@
"type": "bool", "type": "bool",
"enabled": "machine_extruder_count > 1", "enabled": "machine_extruder_count > 1",
"default_value": false, "default_value": false,
"resolve": "max(extruderValues('prime_tower_enable'))",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": false "settable_per_extruder": false
}, },

View File

@ -20,18 +20,40 @@ SettingItem
property bool checked: property bool checked:
{ {
switch(propertyProvider.properties.value) // FIXME this needs to go away once 'resolve' is combined with 'value' in our data model.
// Stacklevels
// 0: user -> unsaved change
// 1: quality changes -> saved change
// 2: quality
// 3: material -> user changed material in materials page
// 4: variant
// 5: machine
var value;
if ((propertyProvider.properties.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) {
// We have a resolve function. Indicates that the setting is not settable per extruder and that
// we have to choose between the resolved value (default) and the global value
// (if user has explicitly set this).
value = propertyProvider.properties.resolve;
} else {
value = propertyProvider.properties.value;
}
switch(value)
{ {
case "True": case "True":
return true return true;
case "False": case "False":
return false return false;
default: default:
return propertyProvider.properties.value return value;
} }
} }
onClicked: { forceActiveFocus(); propertyProvider.setPropertyValue("value", !checked) } onClicked:
{
forceActiveFocus();
propertyProvider.setPropertyValue("value", !checked);
}
Rectangle Rectangle
{ {

View File

@ -96,8 +96,19 @@ SettingItem
} }
function updateCurrentIndex() { function updateCurrentIndex() {
// FIXME this needs to go away once 'resolve' is combined with 'value' in our data model.
var value;
if ((propertyProvider.properties.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) {
// We have a resolve function. Indicates that the setting is not settable per extruder and that
// we have to choose between the resolved value (default) and the global value
// (if user has explicitly set this).
value = propertyProvider.properties.resolve;
} else {
value = propertyProvider.properties.value;
}
for(var i = 0; i < definition.options.length; ++i) { for(var i = 0; i < definition.options.length; ++i) {
if(definition.options[i].key == propertyProvider.properties.value) { if(definition.options[i].key == value) {
currentIndex = i; currentIndex = i;
return; return;
} }