mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-30 15:54:32 +08:00
Merge branch 'master' into CURA-5570_beyond_comprehension
This commit is contained in:
commit
de1b8edb72
@ -4,15 +4,20 @@ from PyQt5.QtCore import QSize
|
|||||||
|
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
|
|
||||||
|
|
||||||
class CameraImageProvider(QQuickImageProvider):
|
class CameraImageProvider(QQuickImageProvider):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
QQuickImageProvider.__init__(self, QQuickImageProvider.Image)
|
super().__init__(QQuickImageProvider.Image)
|
||||||
|
|
||||||
## Request a new image.
|
## Request a new image.
|
||||||
def requestImage(self, id, size):
|
def requestImage(self, id, size):
|
||||||
for output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices():
|
for output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices():
|
||||||
try:
|
try:
|
||||||
return output_device.activePrinter.camera.getImage(), QSize(15, 15)
|
image = output_device.activePrinter.camera.getImage()
|
||||||
|
if image.isNull():
|
||||||
|
image = QImage()
|
||||||
|
|
||||||
|
return image, QSize(15, 15)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
return QImage(), QSize(15, 15)
|
return QImage(), QSize(15, 15)
|
||||||
|
@ -226,6 +226,8 @@ class CuraApplication(QtApplication):
|
|||||||
|
|
||||||
self._need_to_show_user_agreement = True
|
self._need_to_show_user_agreement = True
|
||||||
|
|
||||||
|
self._plugins_loaded = False
|
||||||
|
|
||||||
# Backups
|
# Backups
|
||||||
self._auto_save = None
|
self._auto_save = None
|
||||||
self._save_data_enabled = True
|
self._save_data_enabled = True
|
||||||
|
@ -120,7 +120,7 @@ class PrinterOutputModel(QObject):
|
|||||||
|
|
||||||
@pyqtProperty(QVariant, notify = headPositionChanged)
|
@pyqtProperty(QVariant, notify = headPositionChanged)
|
||||||
def headPosition(self):
|
def headPosition(self):
|
||||||
return {"x": self._head_position.x, "y": self._head_position.y, "z": self.head_position_z}
|
return {"x": self._head_position.x, "y": self._head_position.y, "z": self.head_position.z}
|
||||||
|
|
||||||
def updateHeadPosition(self, x, y, z):
|
def updateHeadPosition(self, x, y, z):
|
||||||
if self._head_position.x != x or self._head_position.y != y or self._head_position.z != z:
|
if self._head_position.x != x or self._head_position.y != y or self._head_position.z != z:
|
||||||
|
@ -1470,9 +1470,14 @@ class MachineManager(QObject):
|
|||||||
if quality_group.node_for_global is None:
|
if quality_group.node_for_global is None:
|
||||||
Logger.log("e", "Could not set quality group [%s] because it has no node_for_global", str(quality_group))
|
Logger.log("e", "Could not set quality group [%s] because it has no node_for_global", str(quality_group))
|
||||||
return
|
return
|
||||||
|
# This is not changing the quality for the active machine !!!!!!!!
|
||||||
global_stack.quality = quality_group.node_for_global.getContainer()
|
global_stack.quality = quality_group.node_for_global.getContainer()
|
||||||
for extruder_nr, extruder_stack in global_stack.extruders.items():
|
for extruder_nr, extruder_stack in global_stack.extruders.items():
|
||||||
extruder_stack.quality = quality_group.nodes_for_extruders[extruder_nr].getContainer()
|
quality_container = self._empty_quality_container
|
||||||
|
if extruder_nr in quality_group.nodes_for_extruders:
|
||||||
|
container = quality_group.nodes_for_extruders[extruder_nr].getContainer()
|
||||||
|
quality_container = container if container is not None else quality_container
|
||||||
|
extruder_stack.quality = quality_container
|
||||||
return
|
return
|
||||||
|
|
||||||
self.blurSettings.emit()
|
self.blurSettings.emit()
|
||||||
|
@ -25,6 +25,9 @@ except ImportError:
|
|||||||
import zipfile
|
import zipfile
|
||||||
import UM.Application
|
import UM.Application
|
||||||
|
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
|
||||||
class ThreeMFWriter(MeshWriter):
|
class ThreeMFWriter(MeshWriter):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -173,6 +176,7 @@ class ThreeMFWriter(MeshWriter):
|
|||||||
archive.writestr(relations_file, b'<?xml version="1.0" encoding="UTF-8"?> \n' + ET.tostring(relations_element))
|
archive.writestr(relations_file, b'<?xml version="1.0" encoding="UTF-8"?> \n' + ET.tostring(relations_element))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
Logger.logException("e", "Error writing zip file")
|
Logger.logException("e", "Error writing zip file")
|
||||||
|
self.setInformation(catalog.i18nc("@error:zip", "Error writing 3mf file."))
|
||||||
return False
|
return False
|
||||||
finally:
|
finally:
|
||||||
if not self._store_archive:
|
if not self._store_archive:
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# Copyright (c) 2018 Ultimaker B.V.
|
# Copyright (c) 2018 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
|
import argparse #To run the engine in debug mode if the front-end is in debug mode.
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
import os
|
import os
|
||||||
from PyQt5.QtCore import QObject, QTimer, pyqtSlot
|
from PyQt5.QtCore import QObject, QTimer, pyqtSlot
|
||||||
@ -179,7 +180,15 @@ class CuraEngineBackend(QObject, Backend):
|
|||||||
# \return list of commands and args / parameters.
|
# \return list of commands and args / parameters.
|
||||||
def getEngineCommand(self) -> List[str]:
|
def getEngineCommand(self) -> List[str]:
|
||||||
json_path = Resources.getPath(Resources.DefinitionContainers, "fdmprinter.def.json")
|
json_path = Resources.getPath(Resources.DefinitionContainers, "fdmprinter.def.json")
|
||||||
return [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, ""]
|
command = [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, ""]
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(prog = "cura", add_help = False)
|
||||||
|
parser.add_argument("--debug", action = "store_true", default = False, help = "Turn on the debug mode by setting this option.")
|
||||||
|
known_args = vars(parser.parse_known_args()[0])
|
||||||
|
if known_args["debug"]:
|
||||||
|
command.append("-vvv")
|
||||||
|
|
||||||
|
return command
|
||||||
|
|
||||||
## Emitted when we get a message containing print duration and material amount.
|
## Emitted when we get a message containing print duration and material amount.
|
||||||
# This also implies the slicing has finished.
|
# This also implies the slicing has finished.
|
||||||
@ -541,6 +550,9 @@ class CuraEngineBackend(QObject, Backend):
|
|||||||
|
|
||||||
## Remove old layer data (if any)
|
## Remove old layer data (if any)
|
||||||
def _clearLayerData(self, build_plate_numbers: Set = None) -> None:
|
def _clearLayerData(self, build_plate_numbers: Set = None) -> None:
|
||||||
|
# Clear out any old gcode
|
||||||
|
self._scene.gcode_dict = {} # type: ignore
|
||||||
|
|
||||||
for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax.
|
for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax.
|
||||||
if node.callDecoration("getLayerData"):
|
if node.callDecoration("getLayerData"):
|
||||||
if not build_plate_numbers or node.callDecoration("getBuildPlateNumber") in build_plate_numbers:
|
if not build_plate_numbers or node.callDecoration("getBuildPlateNumber") in build_plate_numbers:
|
||||||
|
@ -41,7 +41,7 @@ class StartJobResult(IntEnum):
|
|||||||
|
|
||||||
## Formatter class that handles token expansion in start/end gcode
|
## Formatter class that handles token expansion in start/end gcode
|
||||||
class GcodeStartEndFormatter(Formatter):
|
class GcodeStartEndFormatter(Formatter):
|
||||||
def get_value(self, key: str, *args: str, default_extruder_nr: str = "-1", **kwargs) -> str: #type: ignore # [CodeStyle: get_value is an overridden function from the Formatter class]
|
def get_value(self, key: str, args: str, kwargs: dict, default_extruder_nr: str = "-1") -> str: #type: ignore # [CodeStyle: get_value is an overridden function from the Formatter class]
|
||||||
# The kwargs dictionary contains a dictionary for each stack (with a string of the extruder_nr as their key),
|
# The kwargs dictionary contains a dictionary for each stack (with a string of the extruder_nr as their key),
|
||||||
# and a default_extruder_nr to use when no extruder_nr is specified
|
# and a default_extruder_nr to use when no extruder_nr is specified
|
||||||
|
|
||||||
|
@ -10,6 +10,9 @@ from UM.Mesh.MeshWriter import MeshWriter #The class we're extending/implementin
|
|||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.Scene.SceneNode import SceneNode #For typing.
|
from UM.Scene.SceneNode import SceneNode #For typing.
|
||||||
|
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
## A file writer that writes gzipped g-code.
|
## A file writer that writes gzipped g-code.
|
||||||
#
|
#
|
||||||
# If you're zipping g-code, you might as well use gzip!
|
# If you're zipping g-code, you might as well use gzip!
|
||||||
@ -28,12 +31,15 @@ class GCodeGzWriter(MeshWriter):
|
|||||||
def write(self, stream: BufferedIOBase, nodes: List[SceneNode], mode = MeshWriter.OutputMode.BinaryMode) -> bool:
|
def write(self, stream: BufferedIOBase, nodes: List[SceneNode], mode = MeshWriter.OutputMode.BinaryMode) -> bool:
|
||||||
if mode != MeshWriter.OutputMode.BinaryMode:
|
if mode != MeshWriter.OutputMode.BinaryMode:
|
||||||
Logger.log("e", "GCodeGzWriter does not support text mode.")
|
Logger.log("e", "GCodeGzWriter does not support text mode.")
|
||||||
|
self.setInformation(catalog.i18nc("@error:not supported", "GCodeGzWriter does not support text mode."))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
#Get the g-code from the g-code writer.
|
#Get the g-code from the g-code writer.
|
||||||
gcode_textio = StringIO() #We have to convert the g-code into bytes.
|
gcode_textio = StringIO() #We have to convert the g-code into bytes.
|
||||||
success = cast(MeshWriter, PluginRegistry.getInstance().getPluginObject("GCodeWriter")).write(gcode_textio, None)
|
gcode_writer = cast(MeshWriter, PluginRegistry.getInstance().getPluginObject("GCodeWriter"))
|
||||||
|
success = gcode_writer.write(gcode_textio, None)
|
||||||
if not success: #Writing the g-code failed. Then I can also not write the gzipped g-code.
|
if not success: #Writing the g-code failed. Then I can also not write the gzipped g-code.
|
||||||
|
self.setInformation(gcode_writer.getInformation())
|
||||||
return False
|
return False
|
||||||
|
|
||||||
result = gzip.compress(gcode_textio.getvalue().encode("utf-8"))
|
result = gzip.compress(gcode_textio.getvalue().encode("utf-8"))
|
||||||
|
@ -12,6 +12,8 @@ from UM.Settings.InstanceContainer import InstanceContainer
|
|||||||
|
|
||||||
from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
|
from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
|
||||||
|
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
## Writes g-code to a file.
|
## Writes g-code to a file.
|
||||||
#
|
#
|
||||||
@ -62,11 +64,13 @@ class GCodeWriter(MeshWriter):
|
|||||||
def write(self, stream, nodes, mode = MeshWriter.OutputMode.TextMode):
|
def write(self, stream, nodes, mode = MeshWriter.OutputMode.TextMode):
|
||||||
if mode != MeshWriter.OutputMode.TextMode:
|
if mode != MeshWriter.OutputMode.TextMode:
|
||||||
Logger.log("e", "GCodeWriter does not support non-text mode.")
|
Logger.log("e", "GCodeWriter does not support non-text mode.")
|
||||||
|
self.setInformation(catalog.i18nc("@error:not supported", "GCodeWriter does not support non-text mode."))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate
|
active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate
|
||||||
scene = Application.getInstance().getController().getScene()
|
scene = Application.getInstance().getController().getScene()
|
||||||
if not hasattr(scene, "gcode_dict"):
|
if not hasattr(scene, "gcode_dict"):
|
||||||
|
self.setInformation(catalog.i18nc("@warning:status", "Please generate G-code before saving."))
|
||||||
return False
|
return False
|
||||||
gcode_dict = getattr(scene, "gcode_dict")
|
gcode_dict = getattr(scene, "gcode_dict")
|
||||||
gcode_list = gcode_dict.get(active_build_plate, None)
|
gcode_list = gcode_dict.get(active_build_plate, None)
|
||||||
@ -82,6 +86,7 @@ class GCodeWriter(MeshWriter):
|
|||||||
stream.write(settings)
|
stream.write(settings)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
self.setInformation(catalog.i18nc("@warning:status", "Please generate G-code before saving."))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
## Create a new container with container 2 as base and container 1 written over it.
|
## Create a new container with container 2 as base and container 1 written over it.
|
||||||
|
@ -40,33 +40,37 @@ Item {
|
|||||||
|
|
||||||
property bool layersVisible: true
|
property bool layersVisible: true
|
||||||
|
|
||||||
function getUpperValueFromSliderHandle () {
|
function getUpperValueFromSliderHandle() {
|
||||||
return upperHandle.getValue()
|
return upperHandle.getValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
function setUpperValue (value) {
|
function setUpperValue(value) {
|
||||||
upperHandle.setValue(value)
|
upperHandle.setValue(value)
|
||||||
updateRangeHandle()
|
updateRangeHandle()
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLowerValueFromSliderHandle () {
|
function getLowerValueFromSliderHandle() {
|
||||||
return lowerHandle.getValue()
|
return lowerHandle.getValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
function setLowerValue (value) {
|
function setLowerValue(value) {
|
||||||
lowerHandle.setValue(value)
|
lowerHandle.setValue(value)
|
||||||
updateRangeHandle()
|
updateRangeHandle()
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRangeHandle () {
|
function updateRangeHandle() {
|
||||||
rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height)
|
rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height)
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the active handle to show only one label at a time
|
// set the active handle to show only one label at a time
|
||||||
function setActiveHandle (handle) {
|
function setActiveHandle(handle) {
|
||||||
activeHandle = handle
|
activeHandle = handle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeValue(value) {
|
||||||
|
return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue)
|
||||||
|
}
|
||||||
|
|
||||||
// slider track
|
// slider track
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: track
|
id: track
|
||||||
@ -188,6 +192,8 @@ Item {
|
|||||||
|
|
||||||
// set the slider position based on the upper value
|
// set the slider position based on the upper value
|
||||||
function setValue (value) {
|
function setValue (value) {
|
||||||
|
// Normalize values between range, since using arrow keys will create out-of-the-range values
|
||||||
|
value = sliderRoot.normalizeValue(value)
|
||||||
|
|
||||||
UM.SimulationView.setCurrentLayer(value)
|
UM.SimulationView.setCurrentLayer(value)
|
||||||
|
|
||||||
@ -274,6 +280,8 @@ Item {
|
|||||||
|
|
||||||
// set the slider position based on the lower value
|
// set the slider position based on the lower value
|
||||||
function setValue (value) {
|
function setValue (value) {
|
||||||
|
// Normalize values between range, since using arrow keys will create out-of-the-range values
|
||||||
|
value = sliderRoot.normalizeValue(value)
|
||||||
|
|
||||||
UM.SimulationView.setMinimumLayer(value)
|
UM.SimulationView.setMinimumLayer(value)
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ Item {
|
|||||||
|
|
||||||
// value properties
|
// value properties
|
||||||
property real maximumValue: 100
|
property real maximumValue: 100
|
||||||
|
property real minimumValue: 0
|
||||||
property bool roundValues: true
|
property bool roundValues: true
|
||||||
property real handleValue: maximumValue
|
property real handleValue: maximumValue
|
||||||
|
|
||||||
@ -47,6 +48,10 @@ Item {
|
|||||||
rangeHandle.width = handle.x - sliderRoot.handleSize
|
rangeHandle.width = handle.x - sliderRoot.handleSize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeValue(value) {
|
||||||
|
return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue)
|
||||||
|
}
|
||||||
|
|
||||||
// slider track
|
// slider track
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: track
|
id: track
|
||||||
@ -110,6 +115,8 @@ Item {
|
|||||||
|
|
||||||
// set the slider position based on the value
|
// set the slider position based on the value
|
||||||
function setValue (value) {
|
function setValue (value) {
|
||||||
|
// Normalize values between range, since using arrow keys will create out-of-the-range values
|
||||||
|
value = sliderRoot.normalizeValue(value)
|
||||||
|
|
||||||
UM.SimulationView.setCurrentPath(value)
|
UM.SimulationView.setCurrentPath(value)
|
||||||
|
|
||||||
|
@ -25,10 +25,12 @@ from cura.Scene.BuildPlateDecorator import BuildPlateDecorator
|
|||||||
|
|
||||||
from UM.Settings.SettingInstance import SettingInstance
|
from UM.Settings.SettingInstance import SettingInstance
|
||||||
|
|
||||||
|
import numpy
|
||||||
|
|
||||||
class SupportEraser(Tool):
|
class SupportEraser(Tool):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._shortcut_key = Qt.Key_G
|
self._shortcut_key = Qt.Key_E
|
||||||
self._controller = self.getController()
|
self._controller = self.getController()
|
||||||
|
|
||||||
self._selection_pass = None
|
self._selection_pass = None
|
||||||
@ -96,8 +98,7 @@ class SupportEraser(Tool):
|
|||||||
|
|
||||||
node.setName("Eraser")
|
node.setName("Eraser")
|
||||||
node.setSelectable(True)
|
node.setSelectable(True)
|
||||||
mesh = MeshBuilder()
|
mesh = self._createCube(10)
|
||||||
mesh.addCube(10,10,10)
|
|
||||||
node.setMeshData(mesh.build())
|
node.setMeshData(mesh.build())
|
||||||
|
|
||||||
active_build_plate = CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate
|
active_build_plate = CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate
|
||||||
@ -160,3 +161,28 @@ class SupportEraser(Tool):
|
|||||||
self._skip_press = False
|
self._skip_press = False
|
||||||
|
|
||||||
self._had_selection = has_selection
|
self._had_selection = has_selection
|
||||||
|
|
||||||
|
def _createCube(self, size):
|
||||||
|
mesh = MeshBuilder()
|
||||||
|
|
||||||
|
# Can't use MeshBuilder.addCube() because that does not get per-vertex normals
|
||||||
|
# Per-vertex normals require duplication of vertices
|
||||||
|
s = size / 2
|
||||||
|
verts = [ # 6 faces with 4 corners each
|
||||||
|
[-s, -s, s], [-s, s, s], [ s, s, s], [ s, -s, s],
|
||||||
|
[-s, s, -s], [-s, -s, -s], [ s, -s, -s], [ s, s, -s],
|
||||||
|
[ s, -s, -s], [-s, -s, -s], [-s, -s, s], [ s, -s, s],
|
||||||
|
[-s, s, -s], [ s, s, -s], [ s, s, s], [-s, s, s],
|
||||||
|
[-s, -s, s], [-s, -s, -s], [-s, s, -s], [-s, s, s],
|
||||||
|
[ s, -s, -s], [ s, -s, s], [ s, s, s], [ s, s, -s]
|
||||||
|
]
|
||||||
|
mesh.setVertices(numpy.asarray(verts, dtype=numpy.float32))
|
||||||
|
|
||||||
|
indices = []
|
||||||
|
for i in range(0, 24, 4): # All 6 quads (12 triangles)
|
||||||
|
indices.append([i, i+2, i+1])
|
||||||
|
indices.append([i, i+3, i+2])
|
||||||
|
mesh.setIndices(numpy.asarray(indices, dtype=numpy.int32))
|
||||||
|
|
||||||
|
mesh.calculateNormals()
|
||||||
|
return mesh
|
||||||
|
@ -29,6 +29,16 @@ Item
|
|||||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||||
width: parent.width
|
width: parent.width
|
||||||
frameVisible: false
|
frameVisible: false
|
||||||
|
|
||||||
|
// Workaround for scroll issues (QTBUG-49652)
|
||||||
|
flickableItem.interactive: false
|
||||||
|
Component.onCompleted:
|
||||||
|
{
|
||||||
|
for (var i = 0; i < flickableItem.children.length; ++i)
|
||||||
|
{
|
||||||
|
flickableItem.children[i].enabled = false
|
||||||
|
}
|
||||||
|
}
|
||||||
selectionMode: 0
|
selectionMode: 0
|
||||||
model: packageData.supported_configs
|
model: packageData.supported_configs
|
||||||
headerDelegate: Rectangle
|
headerDelegate: Rectangle
|
||||||
|
@ -114,7 +114,10 @@ Item
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
toolbox.viewPage = "author"
|
toolbox.viewPage = "author"
|
||||||
toolbox.filterModelByProp("packages", "author_id", model.id)
|
toolbox.setFilters("packages", {
|
||||||
|
"author_id": model.id,
|
||||||
|
"type": "material"
|
||||||
|
})
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
|
@ -105,8 +105,21 @@ Rectangle
|
|||||||
switch(toolbox.viewCategory)
|
switch(toolbox.viewCategory)
|
||||||
{
|
{
|
||||||
case "material":
|
case "material":
|
||||||
toolbox.viewPage = "author"
|
|
||||||
toolbox.filterModelByProp("packages", "author_name", model.name)
|
// If model has a type, it must be a package
|
||||||
|
if (model.type !== undefined)
|
||||||
|
{
|
||||||
|
toolbox.viewPage = "detail"
|
||||||
|
toolbox.filterModelByProp("packages", "id", model.id)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
toolbox.viewPage = "author"
|
||||||
|
toolbox.setFilters("packages", {
|
||||||
|
"author_id": model.id,
|
||||||
|
"type": "material"
|
||||||
|
})
|
||||||
|
}
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
toolbox.viewPage = "detail"
|
toolbox.viewPage = "detail"
|
||||||
|
@ -776,17 +776,25 @@ class Toolbox(QObject, Extension):
|
|||||||
# Filter Models:
|
# Filter Models:
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
@pyqtSlot(str, str, str)
|
@pyqtSlot(str, str, str)
|
||||||
def filterModelByProp(self, modelType: str, filterType: str, parameter: str):
|
def filterModelByProp(self, model_type: str, filter_type: str, parameter: str) -> None:
|
||||||
if not self._models[modelType]:
|
if not self._models[model_type]:
|
||||||
Logger.log("w", "Toolbox: Couldn't filter %s model because it doesn't exist.", modelType)
|
Logger.log("w", "Toolbox: Couldn't filter %s model because it doesn't exist.", model_type)
|
||||||
return
|
return
|
||||||
self._models[modelType].setFilter({ filterType: parameter })
|
self._models[model_type].setFilter({filter_type: parameter})
|
||||||
self.filterChanged.emit()
|
self.filterChanged.emit()
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot(str, "QVariantMap")
|
||||||
def removeFilters(self, modelType: str):
|
def setFilters(self, model_type: str, filter_dict: dict) -> None:
|
||||||
if not self._models[modelType]:
|
if not self._models[model_type]:
|
||||||
Logger.log("w", "Toolbox: Couldn't remove filters on %s model because it doesn't exist.", modelType)
|
Logger.log("w", "Toolbox: Couldn't filter %s model because it doesn't exist.", model_type)
|
||||||
return
|
return
|
||||||
self._models[modelType].setFilter({})
|
self._models[model_type].setFilter(filter_dict)
|
||||||
|
self.filterChanged.emit()
|
||||||
|
|
||||||
|
@pyqtSlot(str)
|
||||||
|
def removeFilters(self, model_type: str) -> None:
|
||||||
|
if not self._models[model_type]:
|
||||||
|
Logger.log("w", "Toolbox: Couldn't remove filters on %s model because it doesn't exist.", model_type)
|
||||||
|
return
|
||||||
|
self._models[model_type].setFilter({})
|
||||||
self.filterChanged.emit()
|
self.filterChanged.emit()
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#Copyright (c) 2018 Ultimaker B.V.
|
#Copyright (c) 2018 Ultimaker B.V.
|
||||||
#Cura is released under the terms of the LGPLv3 or higher.
|
#Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
from typing import cast
|
||||||
|
|
||||||
from Charon.VirtualFile import VirtualFile #To open UFP files.
|
from Charon.VirtualFile import VirtualFile #To open UFP files.
|
||||||
from Charon.OpenMode import OpenMode #To indicate that we want to write to UFP files.
|
from Charon.OpenMode import OpenMode #To indicate that we want to write to UFP files.
|
||||||
@ -13,6 +14,9 @@ from PyQt5.QtCore import QBuffer
|
|||||||
|
|
||||||
from cura.Snapshot import Snapshot
|
from cura.Snapshot import Snapshot
|
||||||
|
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
|
||||||
class UFPWriter(MeshWriter):
|
class UFPWriter(MeshWriter):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -32,7 +36,11 @@ class UFPWriter(MeshWriter):
|
|||||||
#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")
|
||||||
gcode_textio = StringIO() #We have to convert the g-code into bytes.
|
gcode_textio = StringIO() #We have to convert the g-code into bytes.
|
||||||
PluginRegistry.getInstance().getPluginObject("GCodeWriter").write(gcode_textio, None)
|
gcode_writer = cast(MeshWriter, PluginRegistry.getInstance().getPluginObject("GCodeWriter"))
|
||||||
|
success = gcode_writer.write(gcode_textio, None)
|
||||||
|
if not success: #Writing the g-code failed. Then I can also not write the gzipped g-code.
|
||||||
|
self.setInformation(gcode_writer.getInformation())
|
||||||
|
return False
|
||||||
gcode = archive.getStream("/3D/model.gcode")
|
gcode = archive.getStream("/3D/model.gcode")
|
||||||
gcode.write(gcode_textio.getvalue().encode("UTF-8"))
|
gcode.write(gcode_textio.getvalue().encode("UTF-8"))
|
||||||
archive.addRelation(virtual_path = "/3D/model.gcode", relation_type = "http://schemas.ultimaker.org/package/2018/relationships/gcode")
|
archive.addRelation(virtual_path = "/3D/model.gcode", relation_type = "http://schemas.ultimaker.org/package/2018/relationships/gcode")
|
||||||
|
@ -30,7 +30,12 @@ Component
|
|||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||||
|
anchors.right:parent.right
|
||||||
|
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
||||||
text: Cura.MachineManager.printerOutputDevices[0].name
|
text: Cura.MachineManager.printerOutputDevices[0].name
|
||||||
|
elide: Text.ElideRight
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle
|
Rectangle
|
||||||
|
@ -9,6 +9,7 @@ Component
|
|||||||
{
|
{
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
|
id: monitorFrame
|
||||||
width: maximumWidth
|
width: maximumWidth
|
||||||
height: maximumHeight
|
height: maximumHeight
|
||||||
color: UM.Theme.getColor("viewport_background")
|
color: UM.Theme.getColor("viewport_background")
|
||||||
@ -103,5 +104,15 @@ Component
|
|||||||
visible: OutputDevice.activePrinter != null
|
visible: OutputDevice.activePrinter != null
|
||||||
anchors.fill:parent
|
anchors.fill:parent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onVisibleChanged:
|
||||||
|
{
|
||||||
|
if (!monitorFrame.visible)
|
||||||
|
{
|
||||||
|
// After switching the Tab ensure that active printer is Null, the video stream image
|
||||||
|
// might be active
|
||||||
|
OutputDevice.setActivePrinter(null)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -299,11 +299,11 @@ Cura.MachineAction
|
|||||||
}
|
}
|
||||||
else if (base.selectedDevice.clusterSize === 0)
|
else if (base.selectedDevice.clusterSize === 0)
|
||||||
{
|
{
|
||||||
return catalog.i18nc("@label", "This printer is not set up to host a group of Ultimaker 3 printers.");
|
return catalog.i18nc("@label", "This printer is not set up to host a group of printers.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return catalog.i18nc("@label", "This printer is the host for a group of %1 Ultimaker 3 printers.".arg(base.selectedDevice.clusterSize));
|
return catalog.i18nc("@label", "This printer is the host for a group of %1 printers.".arg(base.selectedDevice.clusterSize));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,11 +349,6 @@ Cura.MachineAction
|
|||||||
addressField.focus = true;
|
addressField.focus = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
onAccepted:
|
|
||||||
{
|
|
||||||
manager.setManualDevice(printerKey, addressText)
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
spacing: UM.Theme.getSize("default_margin").height
|
spacing: UM.Theme.getSize("default_margin").height
|
||||||
@ -393,7 +388,7 @@ Cura.MachineAction
|
|||||||
text: catalog.i18nc("@action:button", "OK")
|
text: catalog.i18nc("@action:button", "OK")
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
manualPrinterDialog.accept()
|
manager.setManualDevice(manualPrinterDialog.printerKey, manualPrinterDialog.addressText)
|
||||||
manualPrinterDialog.hide()
|
manualPrinterDialog.hide()
|
||||||
}
|
}
|
||||||
enabled: manualPrinterDialog.addressText.trim() != ""
|
enabled: manualPrinterDialog.addressText.trim() != ""
|
||||||
|
@ -89,9 +89,11 @@ Item
|
|||||||
|
|
||||||
MouseArea
|
MouseArea
|
||||||
{
|
{
|
||||||
anchors.fill: cameraImage
|
anchors.fill: cameraImage
|
||||||
onClicked: { /* no-op */ }
|
onClicked:
|
||||||
z: 1
|
{
|
||||||
|
OutputDevice.setActivePrinter(null)
|
||||||
|
}
|
||||||
|
z: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,12 +39,12 @@ class SendMaterialJob(Job):
|
|||||||
try:
|
try:
|
||||||
remote_materials_list = json.loads(remote_materials_list)
|
remote_materials_list = json.loads(remote_materials_list)
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
Logger.log("e", "Current material storage on printer was a corrupted reply.")
|
Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.")
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
remote_materials_by_guid = {material["guid"]: material for material in remote_materials_list} #Index by GUID.
|
remote_materials_by_guid = {material["guid"]: material for material in remote_materials_list} #Index by GUID.
|
||||||
except KeyError:
|
except KeyError:
|
||||||
Logger.log("e", "Current material storage on printer was an invalid reply (missing GUIDs).")
|
Logger.log("e", "Request material storage on printer: Printer's answer was missing GUIDs.")
|
||||||
return
|
return
|
||||||
|
|
||||||
container_registry = ContainerRegistry.getInstance()
|
container_registry = ContainerRegistry.getInstance()
|
||||||
|
@ -198,7 +198,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin):
|
|||||||
has_cluster_capable_firmware = Version(system_info["firmware"]) > self._min_cluster_version
|
has_cluster_capable_firmware = Version(system_info["firmware"]) > self._min_cluster_version
|
||||||
instance_name = "manual:%s" % address
|
instance_name = "manual:%s" % address
|
||||||
properties = {
|
properties = {
|
||||||
b"name": system_info["name"].encode("utf-8"),
|
b"name": (system_info["name"] + " (manual)").encode("utf-8"),
|
||||||
b"address": address.encode("utf-8"),
|
b"address": address.encode("utf-8"),
|
||||||
b"firmware_version": system_info["firmware"].encode("utf-8"),
|
b"firmware_version": system_info["firmware"].encode("utf-8"),
|
||||||
b"manual": b"true",
|
b"manual": b"true",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2017 Ultimaker B.V.
|
# Copyright (c) 2018 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from UM.Job import Job
|
from UM.Job import Job
|
||||||
@ -21,7 +21,6 @@ class AutoDetectBaudJob(Job):
|
|||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
Logger.log("d", "Auto detect baud rate started.")
|
Logger.log("d", "Auto detect baud rate started.")
|
||||||
timeout = 3
|
|
||||||
wait_response_timeouts = [3, 15, 30]
|
wait_response_timeouts = [3, 15, 30]
|
||||||
wait_bootloader_times = [1.5, 5, 15]
|
wait_bootloader_times = [1.5, 5, 15]
|
||||||
write_timeout = 3
|
write_timeout = 3
|
||||||
@ -52,7 +51,7 @@ class AutoDetectBaudJob(Job):
|
|||||||
if serial is None:
|
if serial is None:
|
||||||
try:
|
try:
|
||||||
serial = Serial(str(self._serial_port), baud_rate, timeout = read_timeout, writeTimeout = write_timeout)
|
serial = Serial(str(self._serial_port), baud_rate, timeout = read_timeout, writeTimeout = write_timeout)
|
||||||
except SerialException as e:
|
except SerialException:
|
||||||
Logger.logException("w", "Unable to create serial")
|
Logger.logException("w", "Unable to create serial")
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
|
@ -15,7 +15,7 @@ from cura.PrinterOutput.GenericOutputController import GenericOutputController
|
|||||||
from .AutoDetectBaudJob import AutoDetectBaudJob
|
from .AutoDetectBaudJob import AutoDetectBaudJob
|
||||||
from .avr_isp import stk500v2, intelHex
|
from .avr_isp import stk500v2, intelHex
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty
|
from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, QUrl
|
||||||
|
|
||||||
from serial import Serial, SerialException, SerialTimeoutException
|
from serial import Serial, SerialException, SerialTimeoutException
|
||||||
from threading import Thread, Event
|
from threading import Thread, Event
|
||||||
@ -146,8 +146,11 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
|||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def updateFirmware(self, file):
|
def updateFirmware(self, file):
|
||||||
# the file path is qurl encoded.
|
# the file path could be url-encoded.
|
||||||
self._firmware_location = file.replace("file://", "")
|
if file.startswith("file://"):
|
||||||
|
self._firmware_location = QUrl(file).toLocalFile()
|
||||||
|
else:
|
||||||
|
self._firmware_location = file
|
||||||
self.showFirmwareInterface()
|
self.showFirmwareInterface()
|
||||||
self.setFirmwareUpdateState(FirmwareUpdateState.updating)
|
self.setFirmwareUpdateState(FirmwareUpdateState.updating)
|
||||||
self._update_firmware_thread.start()
|
self._update_firmware_thread.start()
|
||||||
|
@ -3026,7 +3026,7 @@
|
|||||||
{
|
{
|
||||||
"label": "Initial Layer Print Acceleration",
|
"label": "Initial Layer Print Acceleration",
|
||||||
"description": "The acceleration during the printing of the initial layer.",
|
"description": "The acceleration during the printing of the initial layer.",
|
||||||
"unit": "mm/s",
|
"unit": "mm/s²",
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"default_value": 3000,
|
"default_value": 3000,
|
||||||
"value": "acceleration_layer_0",
|
"value": "acceleration_layer_0",
|
||||||
@ -3040,7 +3040,7 @@
|
|||||||
{
|
{
|
||||||
"label": "Initial Layer Travel Acceleration",
|
"label": "Initial Layer Travel Acceleration",
|
||||||
"description": "The acceleration for travel moves in the initial layer.",
|
"description": "The acceleration for travel moves in the initial layer.",
|
||||||
"unit": "mm/s",
|
"unit": "mm/s²",
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"default_value": 3000,
|
"default_value": 3000,
|
||||||
"value": "acceleration_layer_0 * acceleration_travel / acceleration_print",
|
"value": "acceleration_layer_0 * acceleration_travel / acceleration_print",
|
||||||
@ -5058,7 +5058,7 @@
|
|||||||
"description": "The minimum volume for each layer of the prime tower in order to purge enough material.",
|
"description": "The minimum volume for each layer of the prime tower in order to purge enough material.",
|
||||||
"unit": "mm³",
|
"unit": "mm³",
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"default_value": 5,
|
"default_value": 6,
|
||||||
"minimum_value": "0",
|
"minimum_value": "0",
|
||||||
"maximum_value_warning": "((resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height') if prime_tower_circular else resolveOrValue('prime_tower_size') ** 2 * resolveOrValue('layer_height')) - sum(extruderValues('prime_tower_min_volume')) + prime_tower_min_volume",
|
"maximum_value_warning": "((resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height') if prime_tower_circular else resolveOrValue('prime_tower_size') ** 2 * resolveOrValue('layer_height')) - sum(extruderValues('prime_tower_min_volume')) + prime_tower_min_volume",
|
||||||
"enabled": "resolveOrValue('prime_tower_enable')",
|
"enabled": "resolveOrValue('prime_tower_enable')",
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
"manufacturer": "TiZYX",
|
"manufacturer": "TiZYX",
|
||||||
"file_formats": "text/x-gcode",
|
"file_formats": "text/x-gcode",
|
||||||
"platform": "tizyx_k25_platform.stl",
|
"platform": "tizyx_k25_platform.stl",
|
||||||
|
"platform_offset": [0, -4, 0],
|
||||||
"exclude_materials": ["chromatik_pla", "dsm_arnitel2045_175", "dsm_novamid1070_175", "fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu", "fiberlogy_hd_pla", "filo3d_pla", "filo3d_pla_green", "filo3d_pla_red", "generic_abs", "generic_abs_175", "generic_bam", "generic_cpe", "generic_cpe_175", "generic_cpe_plus", "generic_hips", "generic_hips_175", "generic_nylon", "generic_nylon_175", "generic_pc", "generic_pc_175", "generic_petg", "generic_petg_175", "generic_pla", "generic_pla_175", "generic_pp", "generic_pva", "generic_pva_175", "generic_tough_pla", "generic_tpu", "imade3d_petg_green", "imade3d_petg_pink", "imade3d_pla_green", "imade3d_pla_pink", "innofill_innoflex60_175", "octofiber_pla", "polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla", "ultimaker_abs_black", "ultimaker_abs_blue", "ultimaker_abs_green", "ultimaker_abs_grey", "ultimaker_abs_orange", "ultimaker_abs_pearl-gold", "ultimaker_abs_red", "ultimaker_abs_silver-metallic", "ultimaker_abs_white", "ultimaker_abs_yellow", "ultimaker_bam", "ultimaker_cpe_black", "ultimaker_cpe_blue", "ultimaker_cpe_dark-grey", "ultimaker_cpe_green", "ultimaker_cpe_light-grey", "ultimaker_cpe_plus_black", "ultimaker_cpe_plus_transparent", "ultimaker_cpe_plus_white", "ultimaker_cpe_red", "ultimaker_cpe_transparent", "ultimaker_cpe_white", "ultimaker_cpe_yellow", "ultimaker_nylon_black", "ultimaker_nylon_transparent", "ultimaker_pc_black", "ultimaker_pc_transparent", "ultimaker_pc_white", "ultimaker_pla_black", "ultimaker_pla_blue", "ultimaker_pla_green", "ultimaker_pla_magenta", "ultimaker_pla_orange", "ultimaker_pla_pearl-white", "ultimaker_pla_red", "ultimaker_pla_silver-metallic", "ultimaker_pla_transparent", "ultimaker_pla_white", "ultimaker_pla_yellow", "ultimaker_pp_transparent", "ultimaker_pva", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white", "ultimaker_tpu_black", "ultimaker_tpu_blue", "ultimaker_tpu_red", "ultimaker_tpu_white", "verbatim_bvoh_175", "Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_TPU", "zyyx_pro_flex", "zyyx_pro_pla" ],
|
"exclude_materials": ["chromatik_pla", "dsm_arnitel2045_175", "dsm_novamid1070_175", "fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu", "fiberlogy_hd_pla", "filo3d_pla", "filo3d_pla_green", "filo3d_pla_red", "generic_abs", "generic_abs_175", "generic_bam", "generic_cpe", "generic_cpe_175", "generic_cpe_plus", "generic_hips", "generic_hips_175", "generic_nylon", "generic_nylon_175", "generic_pc", "generic_pc_175", "generic_petg", "generic_petg_175", "generic_pla", "generic_pla_175", "generic_pp", "generic_pva", "generic_pva_175", "generic_tough_pla", "generic_tpu", "imade3d_petg_green", "imade3d_petg_pink", "imade3d_pla_green", "imade3d_pla_pink", "innofill_innoflex60_175", "octofiber_pla", "polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla", "ultimaker_abs_black", "ultimaker_abs_blue", "ultimaker_abs_green", "ultimaker_abs_grey", "ultimaker_abs_orange", "ultimaker_abs_pearl-gold", "ultimaker_abs_red", "ultimaker_abs_silver-metallic", "ultimaker_abs_white", "ultimaker_abs_yellow", "ultimaker_bam", "ultimaker_cpe_black", "ultimaker_cpe_blue", "ultimaker_cpe_dark-grey", "ultimaker_cpe_green", "ultimaker_cpe_light-grey", "ultimaker_cpe_plus_black", "ultimaker_cpe_plus_transparent", "ultimaker_cpe_plus_white", "ultimaker_cpe_red", "ultimaker_cpe_transparent", "ultimaker_cpe_white", "ultimaker_cpe_yellow", "ultimaker_nylon_black", "ultimaker_nylon_transparent", "ultimaker_pc_black", "ultimaker_pc_transparent", "ultimaker_pc_white", "ultimaker_pla_black", "ultimaker_pla_blue", "ultimaker_pla_green", "ultimaker_pla_magenta", "ultimaker_pla_orange", "ultimaker_pla_pearl-white", "ultimaker_pla_red", "ultimaker_pla_silver-metallic", "ultimaker_pla_transparent", "ultimaker_pla_white", "ultimaker_pla_yellow", "ultimaker_pp_transparent", "ultimaker_pva", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white", "ultimaker_tpu_black", "ultimaker_tpu_blue", "ultimaker_tpu_red", "ultimaker_tpu_white", "verbatim_bvoh_175", "Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_TPU", "zyyx_pro_flex", "zyyx_pro_pla" ],
|
||||||
"preferred_material": "tizyx_pla",
|
"preferred_material": "tizyx_pla",
|
||||||
"has_machine_quality": true,
|
"has_machine_quality": true,
|
||||||
|
137
resources/definitions/winbo_dragonl4.def.json
Normal file
137
resources/definitions/winbo_dragonl4.def.json
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"name": "Winbo Dragon(L)4",
|
||||||
|
"inherits": "fdmprinter",
|
||||||
|
"metadata": {
|
||||||
|
"author": "Winbo",
|
||||||
|
"manufacturer": "Winbo Smart Tech Co., Ltd.",
|
||||||
|
"category": "Other",
|
||||||
|
"visible": true,
|
||||||
|
"file_formats": "text/x-gcode",
|
||||||
|
"supports_usb_connection": false,
|
||||||
|
"machine_extruder_trains":
|
||||||
|
{
|
||||||
|
"0": "winbo_dragonl4_extruder"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"overrides": {
|
||||||
|
"machine_name": { "default_value": "Winbo Dragon(L)4" },
|
||||||
|
"machine_width": { "default_value": 615 },
|
||||||
|
"machine_depth": { "default_value": 463 },
|
||||||
|
"machine_height": { "default_value": 615 },
|
||||||
|
"machine_heated_bed": { "default_value": true },
|
||||||
|
"material_bed_temp_wait": { "default_value": false },
|
||||||
|
"machine_filament_park_distance": { "value": "machine_heat_zone_length" },
|
||||||
|
"machine_nozzle_heat_up_speed": { "default_value": 1.4 },
|
||||||
|
"machine_nozzle_cool_down_speed": { "default_value": 0.8 },
|
||||||
|
"machine_head_with_fans_polygon":
|
||||||
|
{
|
||||||
|
"default_value":
|
||||||
|
[
|
||||||
|
[ -50, 90 ],[ -50, -60 ],[ 50, -60 ],[ 50, 90 ]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"machine_gcode_flavor": { "default_value": "Marlin" },
|
||||||
|
"machine_max_feedrate_x": { "default_value": 300 },
|
||||||
|
"machine_max_feedrate_y": { "default_value": 300 },
|
||||||
|
"machine_max_feedrate_z": { "default_value": 40 },
|
||||||
|
"machine_acceleration": { "default_value": 2000 },
|
||||||
|
"gantry_height": { "default_value": 80 },
|
||||||
|
"machine_extruder_count": { "default_value": 1 },
|
||||||
|
"machine_start_gcode": { "default_value": "G21\nG90\nM82\nM107\nM9998\nG28 X0 Y0\nG28 Z0\nG1 F6000 Z0.3\nG92 E0\nG1 F800 X585 E12\nG92 E0" },
|
||||||
|
"machine_end_gcode": { "default_value": "M104 S0\nM140 S0\nG92 E2\nG1 E0 F200\nG28 X0 Y0\nM84 X Y E" },
|
||||||
|
"prime_blob_enable": { "enabled": true },
|
||||||
|
"acceleration_enabled": { "value": "True" },
|
||||||
|
"acceleration_layer_0": { "value": "acceleration_topbottom" },
|
||||||
|
"acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
|
||||||
|
"acceleration_print": { "value": "1800" },
|
||||||
|
"acceleration_travel": { "value": "2000" },
|
||||||
|
"acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
|
||||||
|
"acceleration_support_interface": { "value": "acceleration_topbottom" },
|
||||||
|
"acceleration_topbottom": { "value": "math.ceil(acceleration_print * 500 / 4000)" },
|
||||||
|
"acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 4000)" },
|
||||||
|
"acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 500 / 1000)" },
|
||||||
|
"brim_width": { "value": "4" },
|
||||||
|
"cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
|
||||||
|
"cool_fan_speed": { "value": "100" },
|
||||||
|
"cool_fan_speed_max": { "value": "100" },
|
||||||
|
"cool_min_speed": { "value": "5" },
|
||||||
|
"fill_outline_gaps": { "value": "True" },
|
||||||
|
"infill_overlap": { "value": "0" },
|
||||||
|
"min_infill_area": { "value": "1" },
|
||||||
|
"min_skin_width_for_expansion": { "value": "2" },
|
||||||
|
"jerk_enabled": { "value": "True" },
|
||||||
|
"jerk_layer_0": { "value": "jerk_topbottom" },
|
||||||
|
"jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" },
|
||||||
|
"jerk_print": { "value": "25" },
|
||||||
|
"jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" },
|
||||||
|
"jerk_support_interface": { "value": "jerk_topbottom" },
|
||||||
|
"jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" },
|
||||||
|
"jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" },
|
||||||
|
"jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" },
|
||||||
|
"wall_thickness": { "value": "2.4"},
|
||||||
|
"line_width": { "value": "extruderValue(-1,'machine_nozzle_size')" },
|
||||||
|
"wall_0_inset": { "value": "0.05" },
|
||||||
|
"wall_line_width_x": { "value": "line_width" },
|
||||||
|
"wall_line_width_0": { "value": "line_width-0.05" },
|
||||||
|
"support_line_width": { "value": "max(min(line_width,0.4),line_width/2)" },
|
||||||
|
"support_interface_line_width": { "value": "support_line_width" },
|
||||||
|
"machine_min_cool_heat_time_window": { "value": "15" },
|
||||||
|
"default_material_print_temperature": { "value": "200" },
|
||||||
|
"material_print_temperature_layer_0": { "value": "material_print_temperature - 5" },
|
||||||
|
"material_bed_temperature": { "maximum_value": "100" },
|
||||||
|
"material_bed_temperature_layer_0": { "maximum_value": "100" },
|
||||||
|
"raft_airgap": { "value": "0" },
|
||||||
|
"raft_base_thickness": { "value": "0.3" },
|
||||||
|
"raft_interface_line_spacing": { "value": "0.5" },
|
||||||
|
"raft_interface_line_width": { "value": "0.5" },
|
||||||
|
"raft_interface_thickness": { "value": "0.2" },
|
||||||
|
"raft_jerk": { "value": "jerk_layer_0" },
|
||||||
|
"raft_margin": { "value": "5" },
|
||||||
|
"raft_surface_layers": { "value": "2" },
|
||||||
|
"retraction_amount": { "value": "4" },
|
||||||
|
"retraction_count_max": { "value": "10" },
|
||||||
|
"retraction_extrusion_window": { "value": "1" },
|
||||||
|
"retraction_hop": { "value": "0.5" },
|
||||||
|
"retraction_hop_enabled": { "value": "True" },
|
||||||
|
"retraction_hop_only_when_collides": { "value": "True" },
|
||||||
|
"retraction_min_travel": { "value": "5" },
|
||||||
|
"retraction_prime_speed": { "value": "25" },
|
||||||
|
"skin_overlap": { "value": "10" },
|
||||||
|
"speed_layer_0": { "value": "25" },
|
||||||
|
"speed_print": { "value": "70" },
|
||||||
|
"speed_support": { "value": "speed_print*line_width/support_line_width" },
|
||||||
|
"speed_support_interface": { "value": "speed_print*line_width/support_interface_line_width" },
|
||||||
|
"speed_topbottom": { "value": "speed_print*line_width/skin_line_width" },
|
||||||
|
"speed_travel": { "value": "100" },
|
||||||
|
"speed_infill": { "value": "speed_print*line_width/infill_line_width" },
|
||||||
|
"speed_wall": { "value": "speed_print*wall_line_width_0/line_width" },
|
||||||
|
"speed_wall_0": { "value": "math.ceil(speed_wall * 0.6)" },
|
||||||
|
"speed_wall_x": { "value": "speed_wall" },
|
||||||
|
"speed_equalize_flow_enabled": { "value": "False" },
|
||||||
|
"support_angle": { "value": "50" },
|
||||||
|
"support_xy_distance": { "value": "1" },
|
||||||
|
"support_z_distance": { "value": "max((0.2 if(0.2%layer_height==0) else layer_height*int((0.2+layer_height)/layer_height)),layer_height)" },
|
||||||
|
"support_bottom_distance": { "value": "max(support_z_distance,layer_height*int(0.45/layer_height))" },
|
||||||
|
"top_bottom_thickness": { "value": "max(1.2,layer_height*6)" },
|
||||||
|
"travel_avoid_distance": { "value": "3" },
|
||||||
|
"gradual_support_infill_step_height": { "value": "0.2" },
|
||||||
|
"gradual_support_infill_steps": { "value": "1" },
|
||||||
|
"infill_sparse_density": { "value": "20" },
|
||||||
|
"gradual_infill_step_height": { "value": "1" },
|
||||||
|
"initial_layer_line_width_factor": { "value": "120" },
|
||||||
|
"jerk_travel": { "value": "25" },
|
||||||
|
"support_bottom_enable": { "value": "True" },
|
||||||
|
"support_bottom_height": { "value": "max((0.15 if(0.15%layer_height==0) else layer_height*int((0.15+layer_height)/layer_height)),layer_height)" },
|
||||||
|
"support_bottom_pattern": { "value": "'zigzag'" },
|
||||||
|
"support_connect_zigzags": { "value": "False" },
|
||||||
|
"support_infill_rate": { "value": "8" },
|
||||||
|
"support_interface_density": { "value": "80" },
|
||||||
|
"support_interface_enable": { "value": "True" },
|
||||||
|
"support_interface_height": { "value": "0.5" },
|
||||||
|
"support_roof_pattern": { "value": "'concentric'" },
|
||||||
|
"z_seam_type": { "value": "'shortest'" },
|
||||||
|
"speed_equalize_flow_max": { "value": "65" }
|
||||||
|
}
|
||||||
|
}
|
137
resources/definitions/winbo_mini2.def.json
Normal file
137
resources/definitions/winbo_mini2.def.json
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"name": "Winbo Mini2",
|
||||||
|
"inherits": "fdmprinter",
|
||||||
|
"metadata": {
|
||||||
|
"author": "Winbo",
|
||||||
|
"manufacturer": "Winbo Smart Tech Co., Ltd.",
|
||||||
|
"category": "Other",
|
||||||
|
"visible": true,
|
||||||
|
"file_formats": "text/x-gcode",
|
||||||
|
"supports_usb_connection": true,
|
||||||
|
"machine_extruder_trains":
|
||||||
|
{
|
||||||
|
"0": "winbo_mini2_extruder"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"overrides": {
|
||||||
|
"machine_name": { "default_value": "Winbo Mini2" },
|
||||||
|
"machine_width": { "default_value": 205 },
|
||||||
|
"machine_depth": { "default_value": 155 },
|
||||||
|
"machine_height": { "default_value": 205 },
|
||||||
|
"machine_heated_bed": { "default_value": false },
|
||||||
|
"material_bed_temp_wait": { "default_value": false },
|
||||||
|
"machine_filament_park_distance": { "value": "machine_heat_zone_length" },
|
||||||
|
"machine_nozzle_heat_up_speed": { "default_value": 1.4 },
|
||||||
|
"machine_nozzle_cool_down_speed": { "default_value": 0.8 },
|
||||||
|
"machine_head_with_fans_polygon":
|
||||||
|
{
|
||||||
|
"default_value":
|
||||||
|
[
|
||||||
|
[ -52, 30 ],[ -52, -40 ],[ 13, -40 ],[ 13, 30 ]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"machine_gcode_flavor": { "default_value": "Marlin" },
|
||||||
|
"machine_max_feedrate_x": { "default_value": 250 },
|
||||||
|
"machine_max_feedrate_y": { "default_value": 200 },
|
||||||
|
"machine_max_feedrate_z": { "default_value": 40 },
|
||||||
|
"machine_acceleration": { "default_value": 3000 },
|
||||||
|
"gantry_height": { "default_value": 75 },
|
||||||
|
"machine_extruder_count": { "default_value": 1 },
|
||||||
|
"machine_start_gcode": { "default_value": "G21\nG90\nM82\nM107\nG28 X0 Y0\nG28 Z0\nG1 F1000 Z3\nG1 F4000 X0\nG1 F4000 Y0\nG1 F1000 Z0.2\nG92 E0\nG1 F1000 X30 E8\nG92 E0\nM117 Printing." },
|
||||||
|
"machine_end_gcode": { "default_value": "M104 S0\nM140 S0\nG92 E2\nG1 E0 F200\nG28 X0 Y0\nM84 X Y E" },
|
||||||
|
"prime_blob_enable": { "enabled": true },
|
||||||
|
"acceleration_enabled": { "value": "True" },
|
||||||
|
"acceleration_layer_0": { "value": "acceleration_topbottom" },
|
||||||
|
"acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
|
||||||
|
"acceleration_print": { "value": "2000" },
|
||||||
|
"acceleration_travel": { "value": "2500" },
|
||||||
|
"acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
|
||||||
|
"acceleration_support_interface": { "value": "acceleration_topbottom" },
|
||||||
|
"acceleration_topbottom": { "value": "math.ceil(acceleration_print * 500 / 4000)" },
|
||||||
|
"acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 4000)" },
|
||||||
|
"acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 500 / 1000)" },
|
||||||
|
"brim_width": { "value": "3" },
|
||||||
|
"cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
|
||||||
|
"cool_fan_speed": { "value": "100" },
|
||||||
|
"cool_fan_speed_max": { "value": "100" },
|
||||||
|
"cool_min_speed": { "value": "5" },
|
||||||
|
"fill_outline_gaps": { "value": "True" },
|
||||||
|
"infill_overlap": { "value": "0" },
|
||||||
|
"min_infill_area": { "value": "1" },
|
||||||
|
"min_skin_width_for_expansion": { "value": "2" },
|
||||||
|
"jerk_enabled": { "value": "True" },
|
||||||
|
"jerk_layer_0": { "value": "jerk_topbottom" },
|
||||||
|
"jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" },
|
||||||
|
"jerk_print": { "value": "25" },
|
||||||
|
"jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" },
|
||||||
|
"jerk_support_interface": { "value": "jerk_topbottom" },
|
||||||
|
"jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" },
|
||||||
|
"jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" },
|
||||||
|
"jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" },
|
||||||
|
"wall_thickness": { "value": "1.2"},
|
||||||
|
"line_width": { "value": "extruderValue(-1,'machine_nozzle_size')" },
|
||||||
|
"wall_0_inset": { "value": "0.05" },
|
||||||
|
"wall_line_width_x": { "value": "line_width" },
|
||||||
|
"wall_line_width_0": { "value": "line_width-0.05" },
|
||||||
|
"support_line_width": { "value": "max(min(line_width,0.4),line_width/2)" },
|
||||||
|
"support_interface_line_width": { "value": "support_line_width" },
|
||||||
|
"machine_min_cool_heat_time_window": { "value": "15" },
|
||||||
|
"default_material_print_temperature": { "value": "200" },
|
||||||
|
"material_print_temperature_layer_0": { "value": "material_print_temperature - 5" },
|
||||||
|
"material_bed_temperature": { "maximum_value": "115" },
|
||||||
|
"material_bed_temperature_layer_0": { "maximum_value": "115" },
|
||||||
|
"raft_airgap": { "value": "0" },
|
||||||
|
"raft_base_thickness": { "value": "0.3" },
|
||||||
|
"raft_interface_line_spacing": { "value": "0.5" },
|
||||||
|
"raft_interface_line_width": { "value": "0.5" },
|
||||||
|
"raft_interface_thickness": { "value": "0.2" },
|
||||||
|
"raft_jerk": { "value": "jerk_layer_0" },
|
||||||
|
"raft_margin": { "value": "10" },
|
||||||
|
"raft_surface_layers": { "value": "1" },
|
||||||
|
"retraction_amount": { "value": "4" },
|
||||||
|
"retraction_count_max": { "value": "10" },
|
||||||
|
"retraction_extrusion_window": { "value": "1" },
|
||||||
|
"retraction_hop": { "value": "0.5" },
|
||||||
|
"retraction_hop_enabled": { "value": "True" },
|
||||||
|
"retraction_hop_only_when_collides": { "value": "True" },
|
||||||
|
"retraction_min_travel": { "value": "5" },
|
||||||
|
"retraction_prime_speed": { "value": "25" },
|
||||||
|
"skin_overlap": { "value": "10" },
|
||||||
|
"speed_layer_0": { "value": "20" },
|
||||||
|
"speed_print": { "value": "50" },
|
||||||
|
"speed_support": { "value": "speed_print*line_width/support_line_width" },
|
||||||
|
"speed_support_interface": { "value": "speed_print*line_width/support_interface_line_width" },
|
||||||
|
"speed_topbottom": { "value": "speed_print*line_width/skin_line_width" },
|
||||||
|
"speed_travel": { "value": "90" },
|
||||||
|
"speed_infill": { "value": "speed_print*line_width/infill_line_width" },
|
||||||
|
"speed_wall": { "value": "speed_print*wall_line_width_0/line_width" },
|
||||||
|
"speed_wall_0": { "value": "math.ceil(speed_wall * 0.6)" },
|
||||||
|
"speed_wall_x": { "value": "speed_wall" },
|
||||||
|
"speed_equalize_flow_enabled": { "value": "False" },
|
||||||
|
"support_angle": { "value": "50" },
|
||||||
|
"support_xy_distance": { "value": "1" },
|
||||||
|
"support_z_distance": { "value": "max((0.2 if(0.2%layer_height==0) else layer_height*int((0.2+layer_height)/layer_height)),layer_height)" },
|
||||||
|
"support_bottom_distance": { "value": "max(support_z_distance,layer_height*int(0.45/layer_height))" },
|
||||||
|
"top_bottom_thickness": { "value": "max(1.2,layer_height*6)" },
|
||||||
|
"travel_avoid_distance": { "value": "3" },
|
||||||
|
"gradual_support_infill_step_height": { "value": "0.2" },
|
||||||
|
"gradual_support_infill_steps": { "value": "1" },
|
||||||
|
"infill_sparse_density": { "value": "20" },
|
||||||
|
"gradual_infill_step_height": { "value": "1" },
|
||||||
|
"initial_layer_line_width_factor": { "value": "120" },
|
||||||
|
"jerk_travel": { "value": "25" },
|
||||||
|
"support_bottom_enable": { "value": "True" },
|
||||||
|
"support_bottom_height": { "value": "max((0.15 if(0.15%layer_height==0) else layer_height*int((0.15+layer_height)/layer_height)),layer_height)" },
|
||||||
|
"support_bottom_pattern": { "value": "'zigzag'" },
|
||||||
|
"support_connect_zigzags": { "value": "False" },
|
||||||
|
"support_infill_rate": { "value": "8" },
|
||||||
|
"support_interface_density": { "value": "80" },
|
||||||
|
"support_interface_enable": { "value": "True" },
|
||||||
|
"support_interface_height": { "value": "0.5" },
|
||||||
|
"support_roof_pattern": { "value": "'concentric'" },
|
||||||
|
"z_seam_type": { "value": "'shortest'" },
|
||||||
|
"speed_equalize_flow_max": { "value": "65" }
|
||||||
|
}
|
||||||
|
}
|
20
resources/extruders/winbo_dragonl4_extruder.def.json
Normal file
20
resources/extruders/winbo_dragonl4_extruder.def.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"name": "Extruder 1",
|
||||||
|
"inherits": "fdmextruder",
|
||||||
|
"metadata": {
|
||||||
|
"machine": "winbo_dragonl4",
|
||||||
|
"position": "0"
|
||||||
|
},
|
||||||
|
|
||||||
|
"overrides": {
|
||||||
|
"extruder_nr": {
|
||||||
|
"default_value": 0,
|
||||||
|
"maximum_value": "2"
|
||||||
|
},
|
||||||
|
"material_diameter": { "default_value": 3.0 },
|
||||||
|
"machine_nozzle_size": { "default_value": 0.8 },
|
||||||
|
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
||||||
|
"machine_nozzle_offset_y": { "default_value": 0.0 }
|
||||||
|
}
|
||||||
|
}
|
20
resources/extruders/winbo_mini2_extruder.def.json
Normal file
20
resources/extruders/winbo_mini2_extruder.def.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"name": "Extruder 1",
|
||||||
|
"inherits": "fdmextruder",
|
||||||
|
"metadata": {
|
||||||
|
"machine": "winbo_mini2",
|
||||||
|
"position": "0"
|
||||||
|
},
|
||||||
|
|
||||||
|
"overrides": {
|
||||||
|
"extruder_nr": {
|
||||||
|
"default_value": 0,
|
||||||
|
"maximum_value": "2"
|
||||||
|
},
|
||||||
|
"material_diameter": { "default_value": 1.75 },
|
||||||
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
|
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
||||||
|
"machine_nozzle_offset_y": { "default_value": 0.0 }
|
||||||
|
}
|
||||||
|
}
|
@ -4036,7 +4036,7 @@ msgstr "&Ansicht"
|
|||||||
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184
|
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184
|
||||||
msgctxt "@title:menu"
|
msgctxt "@title:menu"
|
||||||
msgid "&Settings"
|
msgid "&Settings"
|
||||||
msgstr "&Einstellungen"
|
msgstr "&Konfiguration"
|
||||||
|
|
||||||
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186
|
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186
|
||||||
msgctxt "@title:menu menubar:toplevel"
|
msgctxt "@title:menu menubar:toplevel"
|
||||||
|
@ -26,7 +26,6 @@ Column
|
|||||||
|
|
||||||
OutputDeviceHeader
|
OutputDeviceHeader
|
||||||
{
|
{
|
||||||
width: parent.width
|
|
||||||
outputDevice: connectedDevice
|
outputDevice: connectedDevice
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Item
|
|||||||
|
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
anchors.fill: parent
|
height: childrenRect.height
|
||||||
color: UM.Theme.getColor("setting_category")
|
color: UM.Theme.getColor("setting_category")
|
||||||
property var activePrinter: outputDevice != null ? outputDevice.activePrinter : null
|
property var activePrinter: outputDevice != null ? outputDevice.activePrinter : null
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) 2015 Ultimaker B.V.
|
// Copyright (c) 2018 Ultimaker B.V.
|
||||||
// Cura is released under the terms of the LGPLv3 or higher.
|
// Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
import QtQuick 2.2
|
import QtQuick 2.2
|
||||||
@ -21,8 +21,8 @@ Item
|
|||||||
{
|
{
|
||||||
id: buttons;
|
id: buttons;
|
||||||
|
|
||||||
anchors.bottom: parent.bottom;
|
anchors.bottom: parent.bottom
|
||||||
anchors.left: parent.left;
|
anchors.left: parent.left
|
||||||
spacing: UM.Theme.getSize("button_lining").width
|
spacing: UM.Theme.getSize("button_lining").width
|
||||||
|
|
||||||
Repeater
|
Repeater
|
||||||
@ -34,20 +34,22 @@ Item
|
|||||||
height: childrenRect.height
|
height: childrenRect.height
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
text: model.name
|
text: model.name + (model.shortcut ? (" (" + model.shortcut + ")") : "")
|
||||||
iconSource: (UM.Theme.getIcon(model.icon) != "") ? UM.Theme.getIcon(model.icon) : "file:///" + model.location + "/" + model.icon
|
iconSource: (UM.Theme.getIcon(model.icon) != "") ? UM.Theme.getIcon(model.icon) : "file:///" + model.location + "/" + model.icon
|
||||||
checkable: true
|
checkable: true
|
||||||
checked: model.active
|
checked: model.active
|
||||||
enabled: model.enabled && UM.Selection.hasSelection && UM.Controller.toolsEnabled
|
enabled: model.enabled && UM.Selection.hasSelection && UM.Controller.toolsEnabled
|
||||||
style: UM.Theme.styles.tool_button
|
style: UM.Theme.styles.tool_button
|
||||||
|
|
||||||
onCheckedChanged: {
|
onCheckedChanged:
|
||||||
if (checked) {
|
{
|
||||||
base.activeY = y
|
if (checked)
|
||||||
|
{
|
||||||
|
base.activeY = y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Workaround since using ToolButton"s onClicked would break the binding of the checked property, instead
|
//Workaround since using ToolButton's onClicked would break the binding of the checked property, instead
|
||||||
//just catch the click so we do not trigger that behaviour.
|
//just catch the click so we do not trigger that behaviour.
|
||||||
MouseArea
|
MouseArea
|
||||||
{
|
{
|
||||||
@ -57,7 +59,7 @@ Item
|
|||||||
forceActiveFocus() //First grab focus, so all the text fields are updated
|
forceActiveFocus() //First grab focus, so all the text fields are updated
|
||||||
if(parent.checked)
|
if(parent.checked)
|
||||||
{
|
{
|
||||||
UM.Controller.setActiveTool(null)
|
UM.Controller.setActiveTool(null);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -96,11 +98,13 @@ Item
|
|||||||
|
|
||||||
width:
|
width:
|
||||||
{
|
{
|
||||||
if (panel.item && panel.width > 0){
|
if (panel.item && panel.width > 0)
|
||||||
return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width)
|
{
|
||||||
|
return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
return 0
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
height: panel.item ? panel.height + 2 * UM.Theme.getSize("default_margin").height : 0;
|
height: panel.item ? panel.height + 2 * UM.Theme.getSize("default_margin").height : 0;
|
||||||
@ -124,7 +128,7 @@ Item
|
|||||||
x: UM.Theme.getSize("default_margin").width;
|
x: UM.Theme.getSize("default_margin").width;
|
||||||
y: UM.Theme.getSize("default_margin").height;
|
y: UM.Theme.getSize("default_margin").height;
|
||||||
|
|
||||||
source: UM.ActiveTool.valid ? UM.ActiveTool.activeToolPanel : "";
|
source: UM.ActiveTool.valid ? UM.ActiveTool.activeToolPanel : ""
|
||||||
enabled: UM.Controller.toolsEnabled;
|
enabled: UM.Controller.toolsEnabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,6 +152,6 @@ Item
|
|||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
visible: toolHint.text != "";
|
visible: toolHint.text != ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,8 +15,6 @@ variant = AA 0.25
|
|||||||
cool_fan_speed = 40
|
cool_fan_speed = 40
|
||||||
infill_overlap = 15
|
infill_overlap = 15
|
||||||
material_final_print_temperature = =material_print_temperature - 5
|
material_final_print_temperature = =material_print_temperature - 5
|
||||||
prime_tower_size = 12
|
|
||||||
prime_tower_min_volume = 2
|
|
||||||
retraction_prime_speed = 25
|
retraction_prime_speed = 25
|
||||||
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
||||||
wall_thickness = 0.92
|
wall_thickness = 0.92
|
||||||
|
@ -12,8 +12,6 @@ material = generic_cpe
|
|||||||
variant = AA 0.25
|
variant = AA 0.25
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
prime_tower_size = 12
|
|
||||||
prime_tower_min_volume = 2
|
|
||||||
retraction_extrusion_window = 0.5
|
retraction_extrusion_window = 0.5
|
||||||
speed_infill = =math.ceil(speed_print * 40 / 55)
|
speed_infill = =math.ceil(speed_print * 40 / 55)
|
||||||
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
||||||
|
@ -34,7 +34,6 @@ material_standby_temperature = 100
|
|||||||
multiple_mesh_overlap = 0.2
|
multiple_mesh_overlap = 0.2
|
||||||
prime_tower_enable = True
|
prime_tower_enable = True
|
||||||
prime_tower_flow = 100
|
prime_tower_flow = 100
|
||||||
prime_tower_min_volume = 10
|
|
||||||
retract_at_layer_change = False
|
retract_at_layer_change = False
|
||||||
retraction_count_max = 12
|
retraction_count_max = 12
|
||||||
retraction_extra_prime_amount = 0.5
|
retraction_extra_prime_amount = 0.5
|
||||||
|
@ -35,7 +35,6 @@ material_standby_temperature = 100
|
|||||||
multiple_mesh_overlap = 0.2
|
multiple_mesh_overlap = 0.2
|
||||||
prime_tower_enable = True
|
prime_tower_enable = True
|
||||||
prime_tower_flow = 100
|
prime_tower_flow = 100
|
||||||
prime_tower_min_volume = 15
|
|
||||||
retract_at_layer_change = False
|
retract_at_layer_change = False
|
||||||
retraction_count_max = 12
|
retraction_count_max = 12
|
||||||
retraction_extra_prime_amount = 0.5
|
retraction_extra_prime_amount = 0.5
|
||||||
|
@ -34,7 +34,6 @@ material_standby_temperature = 100
|
|||||||
multiple_mesh_overlap = 0.2
|
multiple_mesh_overlap = 0.2
|
||||||
prime_tower_enable = True
|
prime_tower_enable = True
|
||||||
prime_tower_flow = 100
|
prime_tower_flow = 100
|
||||||
prime_tower_min_volume = 20
|
|
||||||
retract_at_layer_change = False
|
retract_at_layer_change = False
|
||||||
retraction_count_max = 12
|
retraction_count_max = 12
|
||||||
retraction_extra_prime_amount = 0.5
|
retraction_extra_prime_amount = 0.5
|
||||||
|
@ -15,8 +15,6 @@ variant = AA 0.25
|
|||||||
cool_fan_speed = 40
|
cool_fan_speed = 40
|
||||||
infill_overlap = 15
|
infill_overlap = 15
|
||||||
material_final_print_temperature = =material_print_temperature - 5
|
material_final_print_temperature = =material_print_temperature - 5
|
||||||
prime_tower_size = 12
|
|
||||||
prime_tower_min_volume = 2
|
|
||||||
retraction_prime_speed = 25
|
retraction_prime_speed = 25
|
||||||
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
||||||
wall_thickness = 0.92
|
wall_thickness = 0.92
|
||||||
|
@ -12,8 +12,6 @@ material = generic_cpe
|
|||||||
variant = AA 0.25
|
variant = AA 0.25
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
prime_tower_size = 12
|
|
||||||
prime_tower_min_volume = 2
|
|
||||||
retraction_extrusion_window = 0.5
|
retraction_extrusion_window = 0.5
|
||||||
speed_infill = =math.ceil(speed_print * 40 / 55)
|
speed_infill = =math.ceil(speed_print * 40 / 55)
|
||||||
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
||||||
|
@ -32,7 +32,6 @@ material_standby_temperature = 100
|
|||||||
multiple_mesh_overlap = 0.2
|
multiple_mesh_overlap = 0.2
|
||||||
prime_tower_enable = True
|
prime_tower_enable = True
|
||||||
prime_tower_flow = 100
|
prime_tower_flow = 100
|
||||||
prime_tower_min_volume = 10
|
|
||||||
retract_at_layer_change = False
|
retract_at_layer_change = False
|
||||||
retraction_count_max = 12
|
retraction_count_max = 12
|
||||||
retraction_extra_prime_amount = 0.5
|
retraction_extra_prime_amount = 0.5
|
||||||
|
@ -33,7 +33,6 @@ material_standby_temperature = 100
|
|||||||
multiple_mesh_overlap = 0.2
|
multiple_mesh_overlap = 0.2
|
||||||
prime_tower_enable = True
|
prime_tower_enable = True
|
||||||
prime_tower_flow = 100
|
prime_tower_flow = 100
|
||||||
prime_tower_min_volume = 20
|
|
||||||
retract_at_layer_change = False
|
retract_at_layer_change = False
|
||||||
retraction_count_max = 12
|
retraction_count_max = 12
|
||||||
retraction_extra_prime_amount = 0.5
|
retraction_extra_prime_amount = 0.5
|
||||||
|
@ -32,7 +32,6 @@ material_standby_temperature = 100
|
|||||||
multiple_mesh_overlap = 0.2
|
multiple_mesh_overlap = 0.2
|
||||||
prime_tower_enable = True
|
prime_tower_enable = True
|
||||||
prime_tower_flow = 100
|
prime_tower_flow = 100
|
||||||
prime_tower_min_volume = 15
|
|
||||||
retract_at_layer_change = False
|
retract_at_layer_change = False
|
||||||
retraction_count_max = 12
|
retraction_count_max = 12
|
||||||
retraction_extra_prime_amount = 0.5
|
retraction_extra_prime_amount = 0.5
|
||||||
|
@ -40,7 +40,6 @@ material_print_temperature = =default_material_print_temperature + 10
|
|||||||
material_standby_temperature = 100
|
material_standby_temperature = 100
|
||||||
multiple_mesh_overlap = 0
|
multiple_mesh_overlap = 0
|
||||||
prime_tower_enable = False
|
prime_tower_enable = False
|
||||||
prime_tower_min_volume = 20
|
|
||||||
prime_tower_wipe_enabled = True
|
prime_tower_wipe_enabled = True
|
||||||
raft_acceleration = =acceleration_layer_0
|
raft_acceleration = =acceleration_layer_0
|
||||||
raft_airgap = 0
|
raft_airgap = 0
|
||||||
|
@ -22,7 +22,6 @@ jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10)
|
|||||||
machine_nozzle_heat_up_speed = 1.5
|
machine_nozzle_heat_up_speed = 1.5
|
||||||
machine_nozzle_id = BB 0.4
|
machine_nozzle_id = BB 0.4
|
||||||
machine_nozzle_tip_outer_diameter = 1.0
|
machine_nozzle_tip_outer_diameter = 1.0
|
||||||
prime_tower_min_volume = 15
|
|
||||||
raft_base_speed = 20
|
raft_base_speed = 20
|
||||||
raft_interface_speed = 20
|
raft_interface_speed = 20
|
||||||
raft_speed = 25
|
raft_speed = 25
|
||||||
|
@ -40,7 +40,6 @@ material_print_temperature = =default_material_print_temperature + 10
|
|||||||
material_standby_temperature = 100
|
material_standby_temperature = 100
|
||||||
multiple_mesh_overlap = 0
|
multiple_mesh_overlap = 0
|
||||||
prime_tower_enable = False
|
prime_tower_enable = False
|
||||||
prime_tower_min_volume = 20
|
|
||||||
prime_tower_wipe_enabled = True
|
prime_tower_wipe_enabled = True
|
||||||
raft_acceleration = =acceleration_layer_0
|
raft_acceleration = =acceleration_layer_0
|
||||||
raft_airgap = 0
|
raft_airgap = 0
|
||||||
|
@ -22,7 +22,6 @@ jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10)
|
|||||||
machine_nozzle_heat_up_speed = 1.5
|
machine_nozzle_heat_up_speed = 1.5
|
||||||
machine_nozzle_id = BB 0.4
|
machine_nozzle_id = BB 0.4
|
||||||
machine_nozzle_tip_outer_diameter = 1.0
|
machine_nozzle_tip_outer_diameter = 1.0
|
||||||
prime_tower_min_volume = 15
|
|
||||||
raft_base_speed = 20
|
raft_base_speed = 20
|
||||||
raft_interface_speed = 20
|
raft_interface_speed = 20
|
||||||
raft_speed = 25
|
raft_speed = 25
|
||||||
|
@ -40,7 +40,6 @@ material_print_temperature = =default_material_print_temperature + 10
|
|||||||
material_standby_temperature = 100
|
material_standby_temperature = 100
|
||||||
multiple_mesh_overlap = 0
|
multiple_mesh_overlap = 0
|
||||||
prime_tower_enable = False
|
prime_tower_enable = False
|
||||||
prime_tower_min_volume = 20
|
|
||||||
prime_tower_wipe_enabled = True
|
prime_tower_wipe_enabled = True
|
||||||
raft_acceleration = =acceleration_layer_0
|
raft_acceleration = =acceleration_layer_0
|
||||||
raft_airgap = 0
|
raft_airgap = 0
|
||||||
|
@ -22,7 +22,6 @@ jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10)
|
|||||||
machine_nozzle_heat_up_speed = 1.5
|
machine_nozzle_heat_up_speed = 1.5
|
||||||
machine_nozzle_id = BB 0.4
|
machine_nozzle_id = BB 0.4
|
||||||
machine_nozzle_tip_outer_diameter = 1.0
|
machine_nozzle_tip_outer_diameter = 1.0
|
||||||
prime_tower_min_volume = 20
|
|
||||||
raft_base_speed = 20
|
raft_base_speed = 20
|
||||||
raft_interface_speed = 20
|
raft_interface_speed = 20
|
||||||
raft_speed = 25
|
raft_speed = 25
|
||||||
|
Loading…
x
Reference in New Issue
Block a user