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
|
||||
|
||||
|
||||
class CameraImageProvider(QQuickImageProvider):
|
||||
def __init__(self):
|
||||
QQuickImageProvider.__init__(self, QQuickImageProvider.Image)
|
||||
super().__init__(QQuickImageProvider.Image)
|
||||
|
||||
## Request a new image.
|
||||
def requestImage(self, id, size):
|
||||
for output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices():
|
||||
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:
|
||||
pass
|
||||
return QImage(), QSize(15, 15)
|
@ -226,6 +226,8 @@ class CuraApplication(QtApplication):
|
||||
|
||||
self._need_to_show_user_agreement = True
|
||||
|
||||
self._plugins_loaded = False
|
||||
|
||||
# Backups
|
||||
self._auto_save = None
|
||||
self._save_data_enabled = True
|
||||
|
@ -120,7 +120,7 @@ class PrinterOutputModel(QObject):
|
||||
|
||||
@pyqtProperty(QVariant, notify = headPositionChanged)
|
||||
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):
|
||||
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:
|
||||
Logger.log("e", "Could not set quality group [%s] because it has no node_for_global", str(quality_group))
|
||||
return
|
||||
# This is not changing the quality for the active machine !!!!!!!!
|
||||
global_stack.quality = quality_group.node_for_global.getContainer()
|
||||
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
|
||||
|
||||
self.blurSettings.emit()
|
||||
|
@ -25,6 +25,9 @@ except ImportError:
|
||||
import zipfile
|
||||
import UM.Application
|
||||
|
||||
from UM.i18n import i18nCatalog
|
||||
catalog = i18nCatalog("cura")
|
||||
|
||||
|
||||
class ThreeMFWriter(MeshWriter):
|
||||
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))
|
||||
except Exception as e:
|
||||
Logger.logException("e", "Error writing zip file")
|
||||
self.setInformation(catalog.i18nc("@error:zip", "Error writing 3mf file."))
|
||||
return False
|
||||
finally:
|
||||
if not self._store_archive:
|
||||
|
@ -1,6 +1,7 @@
|
||||
# Copyright (c) 2018 Ultimaker B.V.
|
||||
# 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
|
||||
import os
|
||||
from PyQt5.QtCore import QObject, QTimer, pyqtSlot
|
||||
@ -179,7 +180,15 @@ class CuraEngineBackend(QObject, Backend):
|
||||
# \return list of commands and args / parameters.
|
||||
def getEngineCommand(self) -> List[str]:
|
||||
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.
|
||||
# This also implies the slicing has finished.
|
||||
@ -541,6 +550,9 @@ class CuraEngineBackend(QObject, Backend):
|
||||
|
||||
## Remove old layer data (if any)
|
||||
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.
|
||||
if node.callDecoration("getLayerData"):
|
||||
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
|
||||
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),
|
||||
# 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.Scene.SceneNode import SceneNode #For typing.
|
||||
|
||||
from UM.i18n import i18nCatalog
|
||||
catalog = i18nCatalog("cura")
|
||||
|
||||
## A file writer that writes gzipped g-code.
|
||||
#
|
||||
# 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:
|
||||
if mode != MeshWriter.OutputMode.BinaryMode:
|
||||
Logger.log("e", "GCodeGzWriter does not support text mode.")
|
||||
self.setInformation(catalog.i18nc("@error:not supported", "GCodeGzWriter does not support text mode."))
|
||||
return False
|
||||
|
||||
#Get the g-code from the g-code writer.
|
||||
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.
|
||||
self.setInformation(gcode_writer.getInformation())
|
||||
return False
|
||||
|
||||
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 UM.i18n import i18nCatalog
|
||||
catalog = i18nCatalog("cura")
|
||||
|
||||
## Writes g-code to a file.
|
||||
#
|
||||
@ -62,11 +64,13 @@ class GCodeWriter(MeshWriter):
|
||||
def write(self, stream, nodes, mode = MeshWriter.OutputMode.TextMode):
|
||||
if mode != MeshWriter.OutputMode.TextMode:
|
||||
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
|
||||
|
||||
active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate
|
||||
scene = Application.getInstance().getController().getScene()
|
||||
if not hasattr(scene, "gcode_dict"):
|
||||
self.setInformation(catalog.i18nc("@warning:status", "Please generate G-code before saving."))
|
||||
return False
|
||||
gcode_dict = getattr(scene, "gcode_dict")
|
||||
gcode_list = gcode_dict.get(active_build_plate, None)
|
||||
@ -82,6 +86,7 @@ class GCodeWriter(MeshWriter):
|
||||
stream.write(settings)
|
||||
return True
|
||||
|
||||
self.setInformation(catalog.i18nc("@warning:status", "Please generate G-code before saving."))
|
||||
return False
|
||||
|
||||
## Create a new container with container 2 as base and container 1 written over it.
|
||||
|
@ -40,33 +40,37 @@ Item {
|
||||
|
||||
property bool layersVisible: true
|
||||
|
||||
function getUpperValueFromSliderHandle () {
|
||||
function getUpperValueFromSliderHandle() {
|
||||
return upperHandle.getValue()
|
||||
}
|
||||
|
||||
function setUpperValue (value) {
|
||||
function setUpperValue(value) {
|
||||
upperHandle.setValue(value)
|
||||
updateRangeHandle()
|
||||
}
|
||||
|
||||
function getLowerValueFromSliderHandle () {
|
||||
function getLowerValueFromSliderHandle() {
|
||||
return lowerHandle.getValue()
|
||||
}
|
||||
|
||||
function setLowerValue (value) {
|
||||
function setLowerValue(value) {
|
||||
lowerHandle.setValue(value)
|
||||
updateRangeHandle()
|
||||
}
|
||||
|
||||
function updateRangeHandle () {
|
||||
function updateRangeHandle() {
|
||||
rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height)
|
||||
}
|
||||
|
||||
// set the active handle to show only one label at a time
|
||||
function setActiveHandle (handle) {
|
||||
function setActiveHandle(handle) {
|
||||
activeHandle = handle
|
||||
}
|
||||
|
||||
function normalizeValue(value) {
|
||||
return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue)
|
||||
}
|
||||
|
||||
// slider track
|
||||
Rectangle {
|
||||
id: track
|
||||
@ -188,6 +192,8 @@ Item {
|
||||
|
||||
// set the slider position based on the upper 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)
|
||||
|
||||
@ -274,6 +280,8 @@ Item {
|
||||
|
||||
// set the slider position based on the lower 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)
|
||||
|
||||
|
@ -29,6 +29,7 @@ Item {
|
||||
|
||||
// value properties
|
||||
property real maximumValue: 100
|
||||
property real minimumValue: 0
|
||||
property bool roundValues: true
|
||||
property real handleValue: maximumValue
|
||||
|
||||
@ -47,6 +48,10 @@ Item {
|
||||
rangeHandle.width = handle.x - sliderRoot.handleSize
|
||||
}
|
||||
|
||||
function normalizeValue(value) {
|
||||
return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue)
|
||||
}
|
||||
|
||||
// slider track
|
||||
Rectangle {
|
||||
id: track
|
||||
@ -110,6 +115,8 @@ Item {
|
||||
|
||||
// set the slider position based on the 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)
|
||||
|
||||
|
@ -25,10 +25,12 @@ from cura.Scene.BuildPlateDecorator import BuildPlateDecorator
|
||||
|
||||
from UM.Settings.SettingInstance import SettingInstance
|
||||
|
||||
import numpy
|
||||
|
||||
class SupportEraser(Tool):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._shortcut_key = Qt.Key_G
|
||||
self._shortcut_key = Qt.Key_E
|
||||
self._controller = self.getController()
|
||||
|
||||
self._selection_pass = None
|
||||
@ -96,8 +98,7 @@ class SupportEraser(Tool):
|
||||
|
||||
node.setName("Eraser")
|
||||
node.setSelectable(True)
|
||||
mesh = MeshBuilder()
|
||||
mesh.addCube(10,10,10)
|
||||
mesh = self._createCube(10)
|
||||
node.setMeshData(mesh.build())
|
||||
|
||||
active_build_plate = CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate
|
||||
@ -160,3 +161,28 @@ class SupportEraser(Tool):
|
||||
self._skip_press = False
|
||||
|
||||
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
|
||||
width: parent.width
|
||||
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
|
||||
model: packageData.supported_configs
|
||||
headerDelegate: Rectangle
|
||||
|
@ -114,7 +114,10 @@ Item
|
||||
else
|
||||
{
|
||||
toolbox.viewPage = "author"
|
||||
toolbox.filterModelByProp("packages", "author_id", model.id)
|
||||
toolbox.setFilters("packages", {
|
||||
"author_id": model.id,
|
||||
"type": "material"
|
||||
})
|
||||
}
|
||||
break
|
||||
default:
|
||||
|
@ -105,8 +105,21 @@ Rectangle
|
||||
switch(toolbox.viewCategory)
|
||||
{
|
||||
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
|
||||
default:
|
||||
toolbox.viewPage = "detail"
|
||||
|
@ -776,17 +776,25 @@ class Toolbox(QObject, Extension):
|
||||
# Filter Models:
|
||||
# --------------------------------------------------------------------------
|
||||
@pyqtSlot(str, str, str)
|
||||
def filterModelByProp(self, modelType: str, filterType: str, parameter: str):
|
||||
if not self._models[modelType]:
|
||||
Logger.log("w", "Toolbox: Couldn't filter %s model because it doesn't exist.", modelType)
|
||||
def filterModelByProp(self, model_type: str, filter_type: str, parameter: str) -> None:
|
||||
if not self._models[model_type]:
|
||||
Logger.log("w", "Toolbox: Couldn't filter %s model because it doesn't exist.", model_type)
|
||||
return
|
||||
self._models[modelType].setFilter({ filterType: parameter })
|
||||
self._models[model_type].setFilter({filter_type: parameter})
|
||||
self.filterChanged.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def removeFilters(self, modelType: str):
|
||||
if not self._models[modelType]:
|
||||
Logger.log("w", "Toolbox: Couldn't remove filters on %s model because it doesn't exist.", modelType)
|
||||
@pyqtSlot(str, "QVariantMap")
|
||||
def setFilters(self, model_type: str, filter_dict: dict) -> None:
|
||||
if not self._models[model_type]:
|
||||
Logger.log("w", "Toolbox: Couldn't filter %s model because it doesn't exist.", model_type)
|
||||
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()
|
||||
|
@ -1,5 +1,6 @@
|
||||
#Copyright (c) 2018 Ultimaker B.V.
|
||||
#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.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 UM.i18n import i18nCatalog
|
||||
catalog = i18nCatalog("cura")
|
||||
|
||||
|
||||
class UFPWriter(MeshWriter):
|
||||
def __init__(self):
|
||||
@ -32,7 +36,11 @@ class UFPWriter(MeshWriter):
|
||||
#Store the g-code from the scene.
|
||||
archive.addContentType(extension = "gcode", mime_type = "text/x-gcode")
|
||||
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.write(gcode_textio.getvalue().encode("UTF-8"))
|
||||
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.topMargin: UM.Theme.getSize("default_margin").height
|
||||
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
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
Rectangle
|
||||
|
@ -9,6 +9,7 @@ Component
|
||||
{
|
||||
Rectangle
|
||||
{
|
||||
id: monitorFrame
|
||||
width: maximumWidth
|
||||
height: maximumHeight
|
||||
color: UM.Theme.getColor("viewport_background")
|
||||
@ -103,5 +104,15 @@ Component
|
||||
visible: OutputDevice.activePrinter != null
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
onAccepted:
|
||||
{
|
||||
manager.setManualDevice(printerKey, addressText)
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.fill: parent
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
@ -393,7 +388,7 @@ Cura.MachineAction
|
||||
text: catalog.i18nc("@action:button", "OK")
|
||||
onClicked:
|
||||
{
|
||||
manualPrinterDialog.accept()
|
||||
manager.setManualDevice(manualPrinterDialog.printerKey, manualPrinterDialog.addressText)
|
||||
manualPrinterDialog.hide()
|
||||
}
|
||||
enabled: manualPrinterDialog.addressText.trim() != ""
|
||||
|
@ -89,9 +89,11 @@ Item
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: cameraImage
|
||||
onClicked: { /* no-op */ }
|
||||
z: 1
|
||||
anchors.fill: cameraImage
|
||||
onClicked:
|
||||
{
|
||||
OutputDevice.setActivePrinter(null)
|
||||
}
|
||||
z: 1
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -39,12 +39,12 @@ class SendMaterialJob(Job):
|
||||
try:
|
||||
remote_materials_list = json.loads(remote_materials_list)
|
||||
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
|
||||
try:
|
||||
remote_materials_by_guid = {material["guid"]: material for material in remote_materials_list} #Index by GUID.
|
||||
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
|
||||
|
||||
container_registry = ContainerRegistry.getInstance()
|
||||
|
@ -198,7 +198,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin):
|
||||
has_cluster_capable_firmware = Version(system_info["firmware"]) > self._min_cluster_version
|
||||
instance_name = "manual:%s" % address
|
||||
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"firmware_version": system_info["firmware"].encode("utf-8"),
|
||||
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.
|
||||
|
||||
from UM.Job import Job
|
||||
@ -21,7 +21,6 @@ class AutoDetectBaudJob(Job):
|
||||
|
||||
def run(self):
|
||||
Logger.log("d", "Auto detect baud rate started.")
|
||||
timeout = 3
|
||||
wait_response_timeouts = [3, 15, 30]
|
||||
wait_bootloader_times = [1.5, 5, 15]
|
||||
write_timeout = 3
|
||||
@ -52,7 +51,7 @@ class AutoDetectBaudJob(Job):
|
||||
if serial is None:
|
||||
try:
|
||||
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")
|
||||
continue
|
||||
else:
|
||||
|
@ -15,7 +15,7 @@ from cura.PrinterOutput.GenericOutputController import GenericOutputController
|
||||
from .AutoDetectBaudJob import AutoDetectBaudJob
|
||||
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 threading import Thread, Event
|
||||
@ -146,8 +146,11 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
||||
|
||||
@pyqtSlot(str)
|
||||
def updateFirmware(self, file):
|
||||
# the file path is qurl encoded.
|
||||
self._firmware_location = file.replace("file://", "")
|
||||
# the file path could be url-encoded.
|
||||
if file.startswith("file://"):
|
||||
self._firmware_location = QUrl(file).toLocalFile()
|
||||
else:
|
||||
self._firmware_location = file
|
||||
self.showFirmwareInterface()
|
||||
self.setFirmwareUpdateState(FirmwareUpdateState.updating)
|
||||
self._update_firmware_thread.start()
|
||||
|
@ -3026,7 +3026,7 @@
|
||||
{
|
||||
"label": "Initial Layer Print Acceleration",
|
||||
"description": "The acceleration during the printing of the initial layer.",
|
||||
"unit": "mm/s",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_layer_0",
|
||||
@ -3040,7 +3040,7 @@
|
||||
{
|
||||
"label": "Initial Layer Travel Acceleration",
|
||||
"description": "The acceleration for travel moves in the initial layer.",
|
||||
"unit": "mm/s",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"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.",
|
||||
"unit": "mm³",
|
||||
"type": "float",
|
||||
"default_value": 5,
|
||||
"default_value": 6,
|
||||
"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",
|
||||
"enabled": "resolveOrValue('prime_tower_enable')",
|
||||
|
@ -9,6 +9,7 @@
|
||||
"manufacturer": "TiZYX",
|
||||
"file_formats": "text/x-gcode",
|
||||
"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" ],
|
||||
"preferred_material": "tizyx_pla",
|
||||
"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
|
||||
msgctxt "@title:menu"
|
||||
msgid "&Settings"
|
||||
msgstr "&Einstellungen"
|
||||
msgstr "&Konfiguration"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186
|
||||
msgctxt "@title:menu menubar:toplevel"
|
||||
|
@ -26,7 +26,6 @@ Column
|
||||
|
||||
OutputDeviceHeader
|
||||
{
|
||||
width: parent.width
|
||||
outputDevice: connectedDevice
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ Item
|
||||
|
||||
Rectangle
|
||||
{
|
||||
anchors.fill: parent
|
||||
height: childrenRect.height
|
||||
color: UM.Theme.getColor("setting_category")
|
||||
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.
|
||||
|
||||
import QtQuick 2.2
|
||||
@ -21,8 +21,8 @@ Item
|
||||
{
|
||||
id: buttons;
|
||||
|
||||
anchors.bottom: parent.bottom;
|
||||
anchors.left: parent.left;
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.left: parent.left
|
||||
spacing: UM.Theme.getSize("button_lining").width
|
||||
|
||||
Repeater
|
||||
@ -34,20 +34,22 @@ Item
|
||||
height: childrenRect.height
|
||||
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
|
||||
checkable: true
|
||||
checked: model.active
|
||||
enabled: model.enabled && UM.Selection.hasSelection && UM.Controller.toolsEnabled
|
||||
style: UM.Theme.styles.tool_button
|
||||
|
||||
onCheckedChanged: {
|
||||
if (checked) {
|
||||
base.activeY = y
|
||||
onCheckedChanged:
|
||||
{
|
||||
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.
|
||||
MouseArea
|
||||
{
|
||||
@ -57,7 +59,7 @@ Item
|
||||
forceActiveFocus() //First grab focus, so all the text fields are updated
|
||||
if(parent.checked)
|
||||
{
|
||||
UM.Controller.setActiveTool(null)
|
||||
UM.Controller.setActiveTool(null);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -96,11 +98,13 @@ Item
|
||||
|
||||
width:
|
||||
{
|
||||
if (panel.item && panel.width > 0){
|
||||
return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width)
|
||||
if (panel.item && panel.width > 0)
|
||||
{
|
||||
return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width);
|
||||
}
|
||||
else {
|
||||
return 0
|
||||
else
|
||||
{
|
||||
return 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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -148,6 +152,6 @@ Item
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
|
||||
visible: toolHint.text != "";
|
||||
visible: toolHint.text != ""
|
||||
}
|
||||
}
|
||||
|
@ -15,8 +15,6 @@ variant = AA 0.25
|
||||
cool_fan_speed = 40
|
||||
infill_overlap = 15
|
||||
material_final_print_temperature = =material_print_temperature - 5
|
||||
prime_tower_size = 12
|
||||
prime_tower_min_volume = 2
|
||||
retraction_prime_speed = 25
|
||||
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
||||
wall_thickness = 0.92
|
||||
|
@ -12,8 +12,6 @@ material = generic_cpe
|
||||
variant = AA 0.25
|
||||
|
||||
[values]
|
||||
prime_tower_size = 12
|
||||
prime_tower_min_volume = 2
|
||||
retraction_extrusion_window = 0.5
|
||||
speed_infill = =math.ceil(speed_print * 40 / 55)
|
||||
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
||||
|
@ -34,7 +34,6 @@ material_standby_temperature = 100
|
||||
multiple_mesh_overlap = 0.2
|
||||
prime_tower_enable = True
|
||||
prime_tower_flow = 100
|
||||
prime_tower_min_volume = 10
|
||||
retract_at_layer_change = False
|
||||
retraction_count_max = 12
|
||||
retraction_extra_prime_amount = 0.5
|
||||
|
@ -35,7 +35,6 @@ material_standby_temperature = 100
|
||||
multiple_mesh_overlap = 0.2
|
||||
prime_tower_enable = True
|
||||
prime_tower_flow = 100
|
||||
prime_tower_min_volume = 15
|
||||
retract_at_layer_change = False
|
||||
retraction_count_max = 12
|
||||
retraction_extra_prime_amount = 0.5
|
||||
|
@ -34,7 +34,6 @@ material_standby_temperature = 100
|
||||
multiple_mesh_overlap = 0.2
|
||||
prime_tower_enable = True
|
||||
prime_tower_flow = 100
|
||||
prime_tower_min_volume = 20
|
||||
retract_at_layer_change = False
|
||||
retraction_count_max = 12
|
||||
retraction_extra_prime_amount = 0.5
|
||||
|
@ -15,8 +15,6 @@ variant = AA 0.25
|
||||
cool_fan_speed = 40
|
||||
infill_overlap = 15
|
||||
material_final_print_temperature = =material_print_temperature - 5
|
||||
prime_tower_size = 12
|
||||
prime_tower_min_volume = 2
|
||||
retraction_prime_speed = 25
|
||||
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
||||
wall_thickness = 0.92
|
||||
|
@ -12,8 +12,6 @@ material = generic_cpe
|
||||
variant = AA 0.25
|
||||
|
||||
[values]
|
||||
prime_tower_size = 12
|
||||
prime_tower_min_volume = 2
|
||||
retraction_extrusion_window = 0.5
|
||||
speed_infill = =math.ceil(speed_print * 40 / 55)
|
||||
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
||||
|
@ -32,7 +32,6 @@ material_standby_temperature = 100
|
||||
multiple_mesh_overlap = 0.2
|
||||
prime_tower_enable = True
|
||||
prime_tower_flow = 100
|
||||
prime_tower_min_volume = 10
|
||||
retract_at_layer_change = False
|
||||
retraction_count_max = 12
|
||||
retraction_extra_prime_amount = 0.5
|
||||
|
@ -33,7 +33,6 @@ material_standby_temperature = 100
|
||||
multiple_mesh_overlap = 0.2
|
||||
prime_tower_enable = True
|
||||
prime_tower_flow = 100
|
||||
prime_tower_min_volume = 20
|
||||
retract_at_layer_change = False
|
||||
retraction_count_max = 12
|
||||
retraction_extra_prime_amount = 0.5
|
||||
|
@ -32,7 +32,6 @@ material_standby_temperature = 100
|
||||
multiple_mesh_overlap = 0.2
|
||||
prime_tower_enable = True
|
||||
prime_tower_flow = 100
|
||||
prime_tower_min_volume = 15
|
||||
retract_at_layer_change = False
|
||||
retraction_count_max = 12
|
||||
retraction_extra_prime_amount = 0.5
|
||||
|
@ -40,7 +40,6 @@ material_print_temperature = =default_material_print_temperature + 10
|
||||
material_standby_temperature = 100
|
||||
multiple_mesh_overlap = 0
|
||||
prime_tower_enable = False
|
||||
prime_tower_min_volume = 20
|
||||
prime_tower_wipe_enabled = True
|
||||
raft_acceleration = =acceleration_layer_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_id = BB 0.4
|
||||
machine_nozzle_tip_outer_diameter = 1.0
|
||||
prime_tower_min_volume = 15
|
||||
raft_base_speed = 20
|
||||
raft_interface_speed = 20
|
||||
raft_speed = 25
|
||||
|
@ -40,7 +40,6 @@ material_print_temperature = =default_material_print_temperature + 10
|
||||
material_standby_temperature = 100
|
||||
multiple_mesh_overlap = 0
|
||||
prime_tower_enable = False
|
||||
prime_tower_min_volume = 20
|
||||
prime_tower_wipe_enabled = True
|
||||
raft_acceleration = =acceleration_layer_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_id = BB 0.4
|
||||
machine_nozzle_tip_outer_diameter = 1.0
|
||||
prime_tower_min_volume = 15
|
||||
raft_base_speed = 20
|
||||
raft_interface_speed = 20
|
||||
raft_speed = 25
|
||||
|
@ -40,7 +40,6 @@ material_print_temperature = =default_material_print_temperature + 10
|
||||
material_standby_temperature = 100
|
||||
multiple_mesh_overlap = 0
|
||||
prime_tower_enable = False
|
||||
prime_tower_min_volume = 20
|
||||
prime_tower_wipe_enabled = True
|
||||
raft_acceleration = =acceleration_layer_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_id = BB 0.4
|
||||
machine_nozzle_tip_outer_diameter = 1.0
|
||||
prime_tower_min_volume = 20
|
||||
raft_base_speed = 20
|
||||
raft_interface_speed = 20
|
||||
raft_speed = 25
|
||||
|
Loading…
x
Reference in New Issue
Block a user