mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-14 02:55:57 +08:00
Merge branch 'master' of github.com:Ultimaker/Cura
This commit is contained in:
commit
ab23637f3b
@ -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)
|
||||
|
@ -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 = {}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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":
|
||||
|
@ -6,7 +6,7 @@ definition = fdmprinter
|
||||
[metadata]
|
||||
type = quality
|
||||
quality_type = high
|
||||
weight = -3
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.06
|
||||
|
@ -6,6 +6,6 @@ definition = fdmprinter
|
||||
[metadata]
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -2
|
||||
weight = 0
|
||||
|
||||
[values]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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;}
|
||||
|
Loading…
x
Reference in New Issue
Block a user