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

This commit is contained in:
Jack Ha 2016-10-06 15:23:14 +02:00
commit ab23637f3b
37 changed files with 89 additions and 72 deletions

View File

@ -90,8 +90,8 @@ class QualityManager:
# Fall back to using generic materials and qualities if nothing could be found.
if not result and material_containers and len(material_containers) == 1:
basic_material = self._getBasicMaterial(material_containers[0])
result = self._getFilteredContainersForStack(machine_definition, [basic_material], **criteria)
basic_materials = self._getBasicMaterials(material_containers[0])
result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria)
return result[0] if result else None
## Find all suitable qualities for a combination of machine and material.
@ -103,8 +103,8 @@ class QualityManager:
criteria = {"type": "quality" }
result = self._getFilteredContainersForStack(machine_definition, [material_container], **criteria)
if not result:
basic_material = self._getBasicMaterial(material_container)
result = self._getFilteredContainersForStack(machine_definition, [basic_material], **criteria)
basic_materials = self._getBasicMaterials(material_container)
result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria)
return result
## Find all quality changes for a machine.
@ -154,16 +154,24 @@ class QualityManager:
#
# This tries to find a generic or basic version of the given material.
# \param material_container \type{InstanceContainer} the material
# \return \type{Option[InstanceContainer]} the basic material or None if one could not be found.
def _getBasicMaterial(self, material_container):
# \return \type{List[InstanceContainer]} the basic material or None if one could not be found.
def _getBasicMaterials(self, material_container):
base_material = material_container.getMetaDataEntry("material")
if material_container.getDefinition().getMetaDataEntry("has_machine_quality"):
definition_id = material_container.getDefinition().getMetaDataEntry("quality_definition", material_container.getDefinition().getId())
else:
definition_id = "fdmprinter"
if base_material:
# There is a basic material specified
criteria = { "type": "material", "name": base_material, "definition": "fdmprinter" }
criteria = { "type": "material", "name": base_material, "definition": definition_id }
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**criteria)
return containers[0] if containers else None
containers = [basic_material for basic_material in containers if
basic_material.getMetaDataEntry("variant") == material_container.getMetaDataEntry(
"variant")]
return containers
return None
return []
def _getFilteredContainers(self, **kwargs):
return self._getFilteredContainersForStack(None, None, **kwargs)

View File

@ -480,6 +480,7 @@ class ContainerManager(QObject):
new_changes = self._createQualityChanges(quality_container, unique_name,
UM.Application.getInstance().getGlobalContainerStack().getBottom(),
extruder_id)
self._performMerge(new_changes, quality_changes_container, clear_settings = False)
self._performMerge(new_changes, user_container)
self._container_registry.addContainer(new_changes)
@ -694,7 +695,7 @@ class ContainerManager(QObject):
def createContainerManager(engine, js_engine):
return ContainerManager.getInstance()
def _performMerge(self, merge_into, merge):
def _performMerge(self, merge_into, merge, clear_settings = True):
assert isinstance(merge, type(merge_into))
if merge == merge_into:
@ -703,7 +704,8 @@ class ContainerManager(QObject):
for key in merge.getAllKeys():
merge_into.setProperty(key, "value", merge.getProperty(key, "value"))
merge.clear()
if clear_settings:
merge.clear()
def _updateContainerNameFilters(self):
self._container_name_filters = {}

View File

@ -27,8 +27,8 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
self._extruder_id = None
self._extruder_definition_id = None
self._quality = None
self._material = None
self._quality_id = None
self._material_id = None
self.addRoleName(self.KeyRole, "key")
self.addRoleName(self.LabelRole, "label")
@ -61,29 +61,29 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
return self._extruder_definition_id
def setQuality(self, quality):
if quality != self._quality:
self._quality = quality
if quality != self._quality_id:
self._quality_id = quality
self._update()
self.qualityChanged.emit()
qualityChanged = pyqtSignal()
@pyqtProperty(str, fset = setQuality, notify = qualityChanged)
def quality(self):
return self._quality
return self._quality_id
def setMaterial(self, material):
if material != self._material:
self._material = material
if material != self._material_id:
self._material_id = material
self._update()
self.materialChanged.emit()
materialChanged = pyqtSignal()
@pyqtProperty(str, fset = setMaterial, notify = materialChanged)
def material(self):
return self._material
return self._material_id
def _update(self):
if not self._quality:
if not self._quality_id:
return
items = []
@ -91,9 +91,9 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
settings = collections.OrderedDict()
definition_container = UM.Application.getInstance().getGlobalContainerStack().getBottom()
containers = self._container_registry.findInstanceContainers(id = self._quality)
containers = self._container_registry.findInstanceContainers(id = self._quality_id)
if not containers:
UM.Logger.log("w", "Could not find a quality container with id %s", self._quality)
UM.Logger.log("w", "Could not find a quality container with id %s", self._quality_id)
return
quality_container = None
@ -110,8 +110,8 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
"definition": quality_changes_container.getDefinition().getId()
}
if self._material:
criteria["material"] = self._material
if self._material_id and self._material_id != "empty_material":
criteria["material"] = self._material_id
quality_container = self._container_registry.findInstanceContainers(**criteria)
if not quality_container:
@ -124,8 +124,8 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
criteria = {"type": "quality", "quality_type": quality_type, "definition": definition_id}
if self._material:
criteria["material"] = self._material
if self._material_id and self._material_id != "empty_material":
criteria["material"] = self._material_id
criteria["extruder"] = self._extruder_id

View File

@ -77,6 +77,7 @@ class ThreeMFReader(MeshReader):
mesh_data = mesh_builder.build().getTransformed(rotation)
if not len(mesh_data.getVertices()):
Logger.log("d", "One of the objects does not have vertices. Skipping it.")
continue # This object doesn't have data, so skip it.
node.setMeshData(mesh_data)
@ -114,6 +115,7 @@ class ThreeMFReader(MeshReader):
try:
node.getBoundingBox() # Selftest - There might be more functions that should fail
except:
Logger.log("w", "Bounding box test for object failed. Skipping this object")
continue
result.addChild(node)
@ -125,7 +127,10 @@ class ThreeMFReader(MeshReader):
group_decorator = GroupDecorator()
result.addDecorator(group_decorator)
elif len(objects) == 1:
result = result.getChildren()[0] # Only one object found, return that.
if result.getChildren():
result = result.getChildren()[0] # Only one object found, return that.
else: # we failed to load any data
return None
except Exception as e:
Logger.log("e", "exception occured in 3mf reader: %s", e)
try: # Selftest - There might be more functions that should fail

View File

@ -1211,7 +1211,7 @@
"minimum_value": "0",
"minimum_value_warning": "1",
"maximum_value": "machine_max_feedrate_e",
"maximum_value_warning": "25",
"maximum_value_warning": "70",
"enabled": "retraction_enable",
"settable_per_mesh": false,
"settable_per_extruder": true,
@ -1225,7 +1225,7 @@
"minimum_value": "0",
"maximum_value": "machine_max_feedrate_e",
"minimum_value_warning": "1",
"maximum_value_warning": "25",
"maximum_value_warning": "70",
"enabled": "retraction_enable",
"value": "retraction_speed",
"settable_per_mesh": false,
@ -1240,7 +1240,7 @@
"minimum_value": "0",
"maximum_value": "machine_max_feedrate_e",
"minimum_value_warning": "1",
"maximum_value_warning": "25",
"maximum_value_warning": "70",
"enabled": "retraction_enable",
"value": "retraction_speed",
"settable_per_mesh": false,
@ -1363,7 +1363,9 @@
"enabled": "retraction_enable",
"default_value": 20,
"minimum_value": "0.1",
"maximum_value_warning": "25",
"minimum_value_warning": "1",
"maximum_value": "machine_max_feedrate_e",
"maximum_value_warning": "70",
"settable_per_mesh": false,
"settable_per_extruder": true,
"children":
@ -1378,7 +1380,9 @@
"default_value": 20,
"value": "switch_extruder_retraction_speeds",
"minimum_value": "0.1",
"maximum_value_warning": "25",
"minimum_value_warning": "1",
"maximum_value": "machine_max_feedrate_e",
"maximum_value_warning": "70",
"settable_per_mesh": false,
"settable_per_extruder": true
},
@ -1392,7 +1396,9 @@
"default_value": 20,
"value": "switch_extruder_retraction_speeds",
"minimum_value": "0.1",
"maximum_value_warning": "25",
"minimum_value_warning": "1",
"maximum_value": "machine_max_feedrate_e",
"maximum_value_warning": "70",
"settable_per_mesh": false,
"settable_per_extruder": true
}
@ -2865,7 +2871,7 @@
"type": "float",
"default_value": 15,
"minimum_value_warning": "raft_interface_line_width",
"maximum_value_warning": "10",
"maximum_value_warning": "20",
"enabled": "resolveOrValue('adhesion_type') == 'raft'",
"limit_to_extruder": "adhesion_extruder_nr",
"settable_per_mesh": false,
@ -2893,7 +2899,7 @@
"default_value": 0.22,
"value": "raft_airgap / 2",
"minimum_value": "0",
"maximum_value_warning": "layer_height",
"maximum_value_warning": "raft_airgap",
"enabled": "resolveOrValue('adhesion_type') == 'raft'",
"settable_per_mesh": false,
"settable_per_extruder": true,
@ -2970,7 +2976,7 @@
"value": "layer_height * 1.5",
"minimum_value": "0.001",
"minimum_value_warning": "0.04",
"maximum_value_warning": "0.75 * extruderValue(adhesion_extruder_nr, 'machine_nozzle_size')",
"maximum_value_warning": "0.75 * extruderValue(adhesion_extruder_nr, 'raft_interface_line_width')",
"enabled": "resolveOrValue('adhesion_type') == 'raft'",
"settable_per_mesh": false,
"settable_per_extruder": true,
@ -3018,7 +3024,7 @@
"value": "resolveOrValue('layer_height_0') * 1.2",
"minimum_value": "0.001",
"minimum_value_warning": "0.04",
"maximum_value_warning": "0.75 * extruderValue(adhesion_extruder_nr, 'machine_nozzle_size')",
"maximum_value_warning": "0.75 * extruderValue(adhesion_extruder_nr, 'raft_base_line_width')",
"enabled": "resolveOrValue('adhesion_type') == 'raft'",
"settable_per_mesh": false,
"settable_per_extruder": true,

View File

@ -161,10 +161,6 @@ Rectangle
visible: showProgress;
indeterminate:
{
if(!showProgress)
{
return false; //Never be indeterminate when not visible, since that triggers a redraw of the screen.
}
switch(Cura.MachineManager.printerOutputDevices[0].jobState)
{
case "pausing":

View File

@ -6,7 +6,7 @@ definition = fdmprinter
[metadata]
type = quality
quality_type = high
weight = -3
weight = 1
[values]
layer_height = 0.06

View File

@ -6,6 +6,6 @@ definition = fdmprinter
[metadata]
type = quality
quality_type = normal
weight = -2
weight = 0
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_pla_ultimaker2_plus_0.25_mm
weight = -2
weight = 1
quality_type = high
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_pla_ultimaker2_plus_0.4_mm
weight = -3
weight = 1
quality_type = high
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_pla_ultimaker2_plus_0.4_mm
weight = -2
weight = 0
quality_type = normal
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
material = generic_pla_ultimaker2_plus_0.6_mm
type = quality
weight = -2
weight = 0
quality_type = normal
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
material = generic_pla_ultimaker2_plus_0.8_mm
type = quality
weight = -2
weight = -1
quality_type = fast
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_abs_ultimaker2_plus_0.25_mm
weight = -2
weight = 1
quality_type = high
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_abs_ultimaker2_plus_0.4_mm
weight = -3
weight = 1
quality_type = high
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_abs_ultimaker2_plus_0.4_mm
weight = -2
weight = 0
quality_type = normal
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_abs_ultimaker2_plus_0.6_mm
weight = -2
weight = 0
quality_type = normal
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_abs_ultimaker2_plus_0.8_mm
weight = -2
weight = -1
quality_type = fast
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_cpe_ultimaker2_plus_0.25_mm
weight = -2
weight = -1
quality_type = high
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_cpe_ultimaker2_plus_0.4_mm
weight = -3
weight = 1
quality_type = high
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_cpe_ultimaker2_plus_0.4_mm
weight = -2
weight = 0
quality_type = normal
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_cpe_ultimaker2_plus_0.6_mm
weight = -2
weight = 0
quality_type = normal
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_cpe_ultimaker2_plus_0.8_mm
weight = -2
weight = -1
quality_type = fast
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_cpe_plus_ultimaker2_plus_0.4_mm
weight = 0
weight = -2
quality_type = draft
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_cpe_plus_ultimaker2_plus_0.6_mm
weight = 0
weight = -2
quality_type = draft
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_cpe_plus_ultimaker2_plus_0.8_mm
weight = 0
weight = -2
quality_type = draft
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_nylon_ultimaker2_plus_0.25_mm
weight = 0
weight = 1
quality_type = high
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_nylon_ultimaker2_plus_0.4_mm
weight = 0
weight = -1
quality_type = fast
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_nylon_ultimaker2_plus_0.6_mm
weight = 0
weight = -1
quality_type = fast
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_nylon_ultimaker2_plus_0.8_mm
weight = 0
weight = -2
quality_type = draft
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_pc_ultimaker2_plus_0.25_mm
weight = 0
weight = 1
quality_type = high
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_pc_ultimaker2_plus_0.4_mm
weight = 0
weight = -1
quality_type = fast
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_pc_ultimaker2_plus_0.6_mm
weight = 0
weight = -1
quality_type = fast
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_pc_ultimaker2_plus_0.8_mm
weight = 0
weight = -2
quality_type = draft
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_tpu_ultimaker2_plus_0.25_mm
weight = 0
weight = 1
quality_type = high
[values]

View File

@ -6,7 +6,7 @@ definition = ultimaker2_plus
[metadata]
type = quality
material = generic_tpu_ultimaker2_plus_0.6_mm
weight = 0
weight = -1
quality_type = fast
[values]

View File

@ -237,7 +237,7 @@ QtObject {
SequentialAnimation on x {
id: xAnim
property int animEndPoint: Theme.getSize("message").width - (Theme.getSize("default_margin").width * 2) - Theme.getSize("progressbar_control").width
running: control.indeterminate
running: control.indeterminate && control.visible
loops: Animation.Infinite
NumberAnimation { from: 0; to: xAnim.animEndPoint; duration: 2000;}
NumberAnimation { from: xAnim.animEndPoint; to: 0; duration: 2000;}