mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-25 15:44:04 -06:00
Merge branch 'master' into CURA-6127_settings_lost_when_sync_to_diff_printer_type
This commit is contained in:
commit
f77832315a
1238 changed files with 1721 additions and 1421 deletions
13
.github/workflows/cicd.yml
vendored
Normal file
13
.github/workflows/cicd.yml
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
name: CI/CD
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
build:
|
||||
name: Build and test
|
||||
runs-on: ubuntu-latest
|
||||
container: ultimaker/cura-build-environment
|
||||
steps:
|
||||
- name: Checkout master
|
||||
uses: actions/checkout@v1.2.0
|
||||
- name: Build and test
|
||||
run: docker/build.sh
|
|
@ -1,16 +0,0 @@
|
|||
image: registry.gitlab.com/ultimaker/cura/cura-build-environment:centos7
|
||||
|
||||
stages:
|
||||
- build
|
||||
|
||||
build and test linux:
|
||||
stage: build
|
||||
tags:
|
||||
- cura
|
||||
- docker
|
||||
- linux
|
||||
script:
|
||||
- docker/build.sh
|
||||
artifacts:
|
||||
paths:
|
||||
- build
|
|
@ -22,13 +22,6 @@ try:
|
|||
except ImportError:
|
||||
CuraAppName = DEFAULT_CURA_APP_NAME
|
||||
|
||||
try:
|
||||
from cura.CuraVersion import CuraAppDisplayName # type: ignore
|
||||
if CuraAppDisplayName == "":
|
||||
CuraAppDisplayName = DEFAULT_CURA_DISPLAY_NAME
|
||||
except ImportError:
|
||||
CuraAppDisplayName = DEFAULT_CURA_DISPLAY_NAME
|
||||
|
||||
try:
|
||||
from cura.CuraVersion import CuraVersion # type: ignore
|
||||
if CuraVersion == "":
|
||||
|
@ -53,3 +46,13 @@ except ImportError:
|
|||
# Various convenience flags indicating what kind of Cura build it is.
|
||||
__ENTERPRISE_VERSION_TYPE = "enterprise"
|
||||
IsEnterpriseVersion = CuraBuildType.lower() == __ENTERPRISE_VERSION_TYPE
|
||||
|
||||
try:
|
||||
from cura.CuraVersion import CuraAppDisplayName # type: ignore
|
||||
if CuraAppDisplayName == "":
|
||||
CuraAppDisplayName = DEFAULT_CURA_DISPLAY_NAME
|
||||
if IsEnterpriseVersion:
|
||||
CuraAppDisplayName = CuraAppDisplayName + " Enterprise"
|
||||
|
||||
except ImportError:
|
||||
CuraAppDisplayName = DEFAULT_CURA_DISPLAY_NAME
|
||||
|
|
|
@ -1102,7 +1102,7 @@ class BuildVolume(SceneNode):
|
|||
|
||||
# If we are printing one at a time, we need to add the bed adhesion size to the disallowed areas of the objects
|
||||
if container_stack.getProperty("print_sequence", "value") == "one_at_a_time":
|
||||
return 0.1 # Return a very small value, so we do draw disallowed area's near the edges.
|
||||
return 0.1
|
||||
|
||||
bed_adhesion_size = self._calculateBedAdhesionSize(used_extruders)
|
||||
support_expansion = self._calculateSupportExpansion(self._global_container_stack)
|
||||
|
|
|
@ -67,11 +67,9 @@ from cura.Scene.BuildPlateDecorator import BuildPlateDecorator
|
|||
from cura.Scene.ConvexHullDecorator import ConvexHullDecorator
|
||||
from cura.Scene.CuraSceneController import CuraSceneController
|
||||
from cura.Scene.CuraSceneNode import CuraSceneNode
|
||||
from cura.Scene.GCodeListDecorator import GCodeListDecorator
|
||||
|
||||
from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator
|
||||
from cura.Scene import ZOffsetDecorator
|
||||
|
||||
from cura.Machines.ContainerTree import ContainerTree
|
||||
from cura.Machines.MachineErrorChecker import MachineErrorChecker
|
||||
|
||||
from cura.Machines.Models.BuildPlateModel import BuildPlateModel
|
||||
|
@ -145,7 +143,7 @@ class CuraApplication(QtApplication):
|
|||
# SettingVersion represents the set of settings available in the machine/extruder definitions.
|
||||
# You need to make sure that this version number needs to be increased if there is any non-backwards-compatible
|
||||
# changes of the settings.
|
||||
SettingVersion = 10
|
||||
SettingVersion = 11
|
||||
|
||||
Created = False
|
||||
|
||||
|
@ -170,7 +168,7 @@ class CuraApplication(QtApplication):
|
|||
app_display_name = ApplicationMetadata.CuraAppDisplayName,
|
||||
version = ApplicationMetadata.CuraVersion,
|
||||
api_version = ApplicationMetadata.CuraSDKVersion,
|
||||
buildtype = ApplicationMetadata.CuraBuildType,
|
||||
build_type = ApplicationMetadata.CuraBuildType,
|
||||
is_debug_mode = ApplicationMetadata.CuraDebugMode,
|
||||
tray_icon_name = "cura-icon-32.png",
|
||||
**kwargs)
|
||||
|
|
|
@ -162,6 +162,7 @@ class MachineNode(ContainerNode):
|
|||
container_registry = ContainerRegistry.getInstance()
|
||||
if not self.has_variants:
|
||||
self.variants["empty"] = VariantNode("empty_variant", machine = self)
|
||||
self.variants["empty"].materialsChanged.connect(self.materialsChanged)
|
||||
else:
|
||||
# Find all the variants for this definition ID.
|
||||
variants = container_registry.findInstanceContainersMetadata(type = "variant", definition = self.container_id, hardware_type = "nozzle")
|
||||
|
|
|
@ -167,13 +167,19 @@ class VariantNode(ContainerNode):
|
|||
# Search for any submaterials from that base file that are still left.
|
||||
materials_same_base_file = ContainerRegistry.getInstance().findContainersMetadata(base_file = base_file)
|
||||
if materials_same_base_file:
|
||||
most_specific_submaterial = materials_same_base_file[0]
|
||||
most_specific_submaterial = None
|
||||
for submaterial in materials_same_base_file:
|
||||
if submaterial["definition"] == self.machine.container_id:
|
||||
if most_specific_submaterial["definition"] == "fdmprinter":
|
||||
if submaterial.get("variant_name", "empty") == self.variant_name:
|
||||
most_specific_submaterial = submaterial
|
||||
if most_specific_submaterial.get("variant_name", "empty") == "empty" and submaterial.get("variant_name", "empty") == self.variant_name:
|
||||
break # most specific match possible
|
||||
if submaterial.get("variant_name", "empty") == "empty":
|
||||
most_specific_submaterial = submaterial
|
||||
|
||||
if most_specific_submaterial is None:
|
||||
Logger.log("w", "Material %s removed, but no suitable replacement found", base_file)
|
||||
else:
|
||||
Logger.log("i", "Material %s (%s) overridden by %s", base_file, self.variant_name, most_specific_submaterial.get("id"))
|
||||
self.materials[base_file] = MaterialNode(most_specific_submaterial["id"], variant = self)
|
||||
self.materialsChanged.emit(self.materials[base_file])
|
||||
|
||||
|
|
|
@ -88,28 +88,35 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
|
||||
return self._add2DAdhesionMargin(hull)
|
||||
|
||||
## Get the unmodified 2D projected convex hull with 2D adhesion area of the node (if any)
|
||||
## Get the unmodified 2D projected convex hull of the node (if any)
|
||||
# In case of one-at-a-time, this includes adhesion and head+fans clearance
|
||||
def getConvexHull(self) -> Optional[Polygon]:
|
||||
if self._node is None:
|
||||
return None
|
||||
if self._node.callDecoration("isNonPrintingMesh"):
|
||||
return None
|
||||
hull = self._compute2DConvexHull()
|
||||
|
||||
if self._global_stack and self._node is not None and hull is not None:
|
||||
# Parent can be None if node is just loaded.
|
||||
if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node):
|
||||
hull = hull.getMinkowskiHull(Polygon(numpy.array(self._global_stack.getProperty("machine_head_polygon", "value"), numpy.float32)))
|
||||
if self._isSingularOneAtATimeNode():
|
||||
hull = self.getConvexHullHeadFull()
|
||||
if hull is None:
|
||||
return None
|
||||
hull = self._add2DAdhesionMargin(hull)
|
||||
return hull
|
||||
|
||||
## Get the convex hull of the node with the full head size
|
||||
return self._compute2DConvexHull()
|
||||
|
||||
## For one at the time this is the convex hull of the node with the full head size
|
||||
# In case of printing all at once this is None.
|
||||
def getConvexHullHeadFull(self) -> Optional[Polygon]:
|
||||
if self._node is None:
|
||||
return None
|
||||
|
||||
if self._isSingularOneAtATimeNode():
|
||||
return self._compute2DConvexHeadFull()
|
||||
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def hasGroupAsParent(node: "SceneNode") -> bool:
|
||||
parent = node.getParent()
|
||||
|
@ -118,15 +125,14 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
return bool(parent.callDecoration("isGroup"))
|
||||
|
||||
## Get convex hull of the object + head size
|
||||
# In case of printing all at once this is the same as the convex hull.
|
||||
# In case of printing all at once this is None.
|
||||
# For one at the time this is area with intersection of mirrored head
|
||||
def getConvexHullHead(self) -> Optional[Polygon]:
|
||||
if self._node is None:
|
||||
return None
|
||||
if self._node.callDecoration("isNonPrintingMesh"):
|
||||
return None
|
||||
if self._global_stack:
|
||||
if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node):
|
||||
if self._isSingularOneAtATimeNode():
|
||||
head_with_fans = self._compute2DConvexHeadMin()
|
||||
if head_with_fans is None:
|
||||
return None
|
||||
|
@ -135,7 +141,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
return None
|
||||
|
||||
## Get convex hull of the node
|
||||
# In case of printing all at once this is the same as the convex hull.
|
||||
# In case of printing all at once this None??
|
||||
# For one at the time this is the area without the head.
|
||||
def getConvexHullBoundary(self) -> Optional[Polygon]:
|
||||
if self._node is None:
|
||||
|
@ -144,12 +150,22 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
if self._node.callDecoration("isNonPrintingMesh"):
|
||||
return None
|
||||
|
||||
if self._global_stack:
|
||||
if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node):
|
||||
if self._isSingularOneAtATimeNode():
|
||||
# Printing one at a time and it's not an object in a group
|
||||
return self._compute2DConvexHull()
|
||||
return None
|
||||
|
||||
## Get the buildplate polygon where will be printed
|
||||
# In case of printing all at once this is the same as convex hull (no individual adhesion)
|
||||
# For one at the time this includes the adhesion area
|
||||
def getPrintingArea(self) -> Optional[Polygon]:
|
||||
if self._isSingularOneAtATimeNode():
|
||||
# In one-at-a-time mode, every printed object gets it's own adhesion
|
||||
printing_area = self.getAdhesionArea()
|
||||
else:
|
||||
printing_area = self.getConvexHull()
|
||||
return printing_area
|
||||
|
||||
## The same as recomputeConvexHull, but using a timer if it was set.
|
||||
def recomputeConvexHullDelayed(self) -> None:
|
||||
if self._recompute_convex_hull_timer is not None:
|
||||
|
@ -172,10 +188,9 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
self._convex_hull_node = None
|
||||
return
|
||||
|
||||
convex_hull = self.getConvexHull()
|
||||
if self._convex_hull_node:
|
||||
self._convex_hull_node.setParent(None)
|
||||
hull_node = ConvexHullNode.ConvexHullNode(self._node, convex_hull, self._raft_thickness, root)
|
||||
hull_node = ConvexHullNode.ConvexHullNode(self._node, self.getPrintingArea(), self._raft_thickness, root)
|
||||
self._convex_hull_node = hull_node
|
||||
|
||||
def _onSettingValueChanged(self, key: str, property_name: str) -> None:
|
||||
|
@ -416,6 +431,14 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
return True
|
||||
return self.__isDescendant(root, node.getParent())
|
||||
|
||||
## True if print_sequence is one_at_a_time and _node is not part of a group
|
||||
def _isSingularOneAtATimeNode(self) -> bool:
|
||||
if self._node is None:
|
||||
return False
|
||||
return self._global_stack is not None \
|
||||
and self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" \
|
||||
and not self.hasGroupAsParent(self._node)
|
||||
|
||||
_affected_settings = [
|
||||
"adhesion_type", "raft_margin", "print_sequence",
|
||||
"skirt_gap", "skirt_line_count", "skirt_brim_line_width", "skirt_distance", "brim_line_count"]
|
||||
|
|
|
@ -46,6 +46,7 @@ class ConvexHullNode(SceneNode):
|
|||
|
||||
# The node this mesh is "watching"
|
||||
self._node = node
|
||||
# Area of the head + fans for display as a shadow on the buildplate
|
||||
self._convex_hull_head_mesh = None # type: Optional[MeshData]
|
||||
|
||||
self._node.decoratorsChanged.connect(self._onNodeDecoratorsChanged)
|
||||
|
@ -79,14 +80,17 @@ class ConvexHullNode(SceneNode):
|
|||
|
||||
if self.getParent():
|
||||
if self.getMeshData() and isinstance(self._node, SceneNode) and self._node.callDecoration("getBuildPlateNumber") == Application.getInstance().getMultiBuildPlateModel().activeBuildPlate:
|
||||
# The object itself (+ adhesion in one-at-a-time mode)
|
||||
renderer.queueNode(self, transparent = True, shader = ConvexHullNode.shader, backface_cull = True, sort = -8)
|
||||
if self._convex_hull_head_mesh:
|
||||
# The full head. Rendered as a hint to the user: If this area overlaps another object A; this object
|
||||
# cannot be printed after A, because the head would hit A while printing the current object
|
||||
renderer.queueNode(self, shader = ConvexHullNode.shader, transparent = True, mesh = self._convex_hull_head_mesh, backface_cull = True, sort = -8)
|
||||
|
||||
return True
|
||||
|
||||
def _onNodeDecoratorsChanged(self, node: SceneNode) -> None:
|
||||
convex_hull_head = self._node.callDecoration("getConvexHullHead")
|
||||
convex_hull_head = self._node.callDecoration("getConvexHullHeadFull")
|
||||
if convex_hull_head:
|
||||
convex_hull_head_builder = MeshBuilder()
|
||||
convex_hull_head_builder.addConvexPolygon(convex_hull_head.getPoints(), self._mesh_height - self._thickness)
|
||||
|
|
|
@ -88,7 +88,7 @@ class CuraSceneNode(SceneNode):
|
|||
|
||||
## Return if any area collides with the convex hull of this scene node
|
||||
def collidesWithAreas(self, areas: List[Polygon]) -> bool:
|
||||
convex_hull = self.callDecoration("getConvexHull")
|
||||
convex_hull = self.callDecoration("getPrintingArea")
|
||||
if convex_hull:
|
||||
if not convex_hull.isValid():
|
||||
return False
|
||||
|
|
|
@ -1008,9 +1008,9 @@ class MachineManager(QObject):
|
|||
|
||||
# Set quality and quality_changes for each ExtruderStack
|
||||
for position, node in quality_group.nodes_for_extruders.items():
|
||||
self._global_container_stack.extruders[str(position)].quality = node.container
|
||||
self._global_container_stack.extruderList[position].quality = node.container
|
||||
if empty_quality_changes:
|
||||
self._global_container_stack.extruders[str(position)].qualityChanges = empty_quality_changes_container
|
||||
self._global_container_stack.extruderList[position].qualityChanges = empty_quality_changes_container
|
||||
|
||||
self.activeQualityGroupChanged.emit()
|
||||
self.activeQualityChangesGroupChanged.emit()
|
||||
|
|
|
@ -7,14 +7,21 @@ from PyQt5.QtWidgets import QSplashScreen
|
|||
|
||||
from UM.Resources import Resources
|
||||
from UM.Application import Application
|
||||
from cura import ApplicationMetadata
|
||||
|
||||
|
||||
class CuraSplashScreen(QSplashScreen):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._scale = 0.7
|
||||
self._version_y_offset = 0 # when extra visual elements are in the background image, move version text down
|
||||
|
||||
if ApplicationMetadata.IsEnterpriseVersion:
|
||||
splash_image = QPixmap(Resources.getPath(Resources.Images, "cura_enterprise.png"))
|
||||
self._version_y_offset = 26
|
||||
else:
|
||||
splash_image = QPixmap(Resources.getPath(Resources.Images, "cura.png"))
|
||||
|
||||
self.setPixmap(splash_image)
|
||||
|
||||
self._current_message = ""
|
||||
|
@ -52,20 +59,17 @@ class CuraSplashScreen(QSplashScreen):
|
|||
painter.setRenderHint(QPainter.Antialiasing, True)
|
||||
|
||||
version = Application.getInstance().getVersion().split("-")
|
||||
buildtype = Application.getInstance().getBuildType()
|
||||
if buildtype:
|
||||
version[0] += " (%s)" % buildtype
|
||||
|
||||
# Draw version text
|
||||
font = QFont() # Using system-default font here
|
||||
font.setPixelSize(37)
|
||||
font.setPixelSize(18)
|
||||
painter.setFont(font)
|
||||
painter.drawText(60, 66, 330 * self._scale, 230 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[0])
|
||||
painter.drawText(60, 70 + self._version_y_offset, 330 * self._scale, 230 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[0])
|
||||
if len(version) > 1:
|
||||
font.setPixelSize(16)
|
||||
painter.setFont(font)
|
||||
painter.setPen(QColor(200, 200, 200, 255))
|
||||
painter.drawText(247, 105, 330 * self._scale, 255 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[1])
|
||||
painter.drawText(247, 105 + self._version_y_offset, 330 * self._scale, 255 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[1])
|
||||
painter.setPen(QColor(255, 255, 255, 255))
|
||||
|
||||
# Draw the loading image
|
||||
|
|
|
@ -298,9 +298,7 @@ class PrintInformation(QObject):
|
|||
|
||||
# Only update the job name when it's not user-specified.
|
||||
if not self._is_user_specified_job_name:
|
||||
if self._pre_sliced:
|
||||
self._job_name = catalog.i18nc("@label", "Pre-sliced file {0}", base_name)
|
||||
elif self._application.getInstance().getPreferences().getValue("cura/jobname_prefix"):
|
||||
if self._application.getInstance().getPreferences().getValue("cura/jobname_prefix") and not self._pre_sliced:
|
||||
# Don't add abbreviation if it already has the exact same abbreviation.
|
||||
if base_name.startswith(self._abbr_machine + "_"):
|
||||
self._job_name = base_name
|
||||
|
|
190
plugins/PostProcessingPlugin/scripts/ColorMix.py
Normal file
190
plugins/PostProcessingPlugin/scripts/ColorMix.py
Normal file
|
@ -0,0 +1,190 @@
|
|||
# ColorMix script - 2-1 extruder color mix and blending
|
||||
# This script is specific for the Geeetech A10M dual extruder but should work with other Marlin printers.
|
||||
# It runs with the PostProcessingPlugin which is released under the terms of the AGPLv3 or higher.
|
||||
# This script is licensed under the Creative Commons - Attribution - Share Alike (CC BY-SA) terms
|
||||
|
||||
#Authors of the 2-1 ColorMix plug-in / script:
|
||||
# Written by John Hryb - john.hryb.4@gmail.com
|
||||
|
||||
##history / change-log:
|
||||
##V1.0.0
|
||||
|
||||
## Uses -
|
||||
## M163 - Set Mix Factor
|
||||
## M164 - Save Mix - saves to T3 as a unique mix
|
||||
|
||||
import re #To perform the search and replace.
|
||||
from ..Script import Script
|
||||
|
||||
class ColorMix(Script):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def getSettingDataString(self):
|
||||
return """{
|
||||
"name":"ColorMix 2-1",
|
||||
"key":"ColorMix 2-1",
|
||||
"metadata": {},
|
||||
"version": 2,
|
||||
"settings":
|
||||
{
|
||||
"measurement_units":
|
||||
{
|
||||
"label": "Units of measurement",
|
||||
"description": "Input value as mm or layer number.",
|
||||
"type": "enum",
|
||||
"options": {"mm":"mm","layer":"Layer"},
|
||||
"default_value": "layer"
|
||||
},
|
||||
"start_height":
|
||||
{
|
||||
"label": "Start Height",
|
||||
"description": "Value to start at (mm or layer)",
|
||||
"type": "float",
|
||||
"default_value": 0,
|
||||
"minimum_value": "0"
|
||||
},
|
||||
"behavior":
|
||||
{
|
||||
"label": "Fixed or blend",
|
||||
"description": "Select Fixed (set new mixture) or Blend mode (dynamic mix)",
|
||||
"type": "enum",
|
||||
"options": {"fixed_value":"Fixed","blend_value":"Blend"},
|
||||
"default_value": "fixed_value"
|
||||
},
|
||||
"finish_height":
|
||||
{
|
||||
"label": "Finish Height",
|
||||
"description": "Value to stop at (mm or layer)",
|
||||
"type": "float",
|
||||
"default_value": 0,
|
||||
"minimum_value": "0",
|
||||
"minimum_value_warning": "0.1",
|
||||
"enabled": "c_behavior == 'blend_value'"
|
||||
},
|
||||
"mix_start_ratio":
|
||||
{
|
||||
"label": "Start mix ratio",
|
||||
"description": "First extruder percentage 0-100",
|
||||
"type": "float",
|
||||
"default_value": 100,
|
||||
"minimum_value": "0",
|
||||
"minimum_value_warning": "0",
|
||||
"maximum_value_warning": "100"
|
||||
},
|
||||
"mix_finish_ratio":
|
||||
{
|
||||
"label": "End mix ratio",
|
||||
"description": "First extruder percentage 0-100 to finish blend",
|
||||
"type": "float",
|
||||
"default_value": 0,
|
||||
"minimum_value": "0",
|
||||
"minimum_value_warning": "0",
|
||||
"maximum_value_warning": "100",
|
||||
"enabled": "c_behavior == 'blend_value'"
|
||||
},
|
||||
"notes":
|
||||
{
|
||||
"label": "Notes",
|
||||
"description": "A spot to put a note",
|
||||
"type": "str",
|
||||
"default_value": ""
|
||||
}
|
||||
}
|
||||
}"""
|
||||
def getValue(self, line, key, default = None): #replace default getvalue due to comment-reading feature
|
||||
if not key in line or (";" in line and line.find(key) > line.find(";") and
|
||||
not ";ChangeAtZ" in key and not ";LAYER:" in key):
|
||||
return default
|
||||
subPart = line[line.find(key) + len(key):] #allows for string lengths larger than 1
|
||||
if ";ChangeAtZ" in key:
|
||||
m = re.search("^[0-4]", subPart)
|
||||
elif ";LAYER:" in key:
|
||||
m = re.search("^[+-]?[0-9]*", subPart)
|
||||
else:
|
||||
#the minus at the beginning allows for negative values, e.g. for delta printers
|
||||
m = re.search("^[-]?[0-9]*\.?[0-9]*", subPart)
|
||||
if m == None:
|
||||
return default
|
||||
try:
|
||||
return float(m.group(0))
|
||||
except:
|
||||
return default
|
||||
|
||||
def execute(self, data):
|
||||
#get user variables
|
||||
firstHeight = 0.0
|
||||
secondHeight = 0.0
|
||||
firstMix = 0.0
|
||||
SecondMix = 0.0
|
||||
|
||||
firstHeight = self.getSettingValueByKey("start_height")
|
||||
secondHeight = self.getSettingValueByKey("finish_height")
|
||||
firstMix = self.getSettingValueByKey("mix_start_ratio")
|
||||
SecondMix = self.getSettingValueByKey("mix_finish_ratio")
|
||||
|
||||
#locals
|
||||
layer = 0
|
||||
|
||||
#get layer height
|
||||
layerHeight = .2
|
||||
for active_layer in data:
|
||||
lines = active_layer.split("\n")
|
||||
for line in lines:
|
||||
if ";Layer height: " in line:
|
||||
layerHeight = self.getValue(line, ";Layer height: ", layerHeight)
|
||||
break
|
||||
#get layers to use
|
||||
startLayer = 0
|
||||
endLayer = 0
|
||||
if self.getSettingValueByKey("measurement_units") == "mm":
|
||||
if firstHeight == 0:
|
||||
startLayer = 0
|
||||
else:
|
||||
startLayer = firstHeight / layerHeight
|
||||
if secondHeight == 0:
|
||||
endLayer = 0
|
||||
else:
|
||||
endLayer = secondHeight / layerHeight
|
||||
else: #layer height
|
||||
startLayer = firstHeight
|
||||
endLayer = secondHeight
|
||||
#see if one-shot
|
||||
if self.getSettingValueByKey("behavior") == "fixed_value":
|
||||
endLayer = startLayer
|
||||
firstExtruderIncrements = 0
|
||||
else: #blend
|
||||
firstExtruderIncrements = (SecondMix - firstMix) / (endLayer - startLayer)
|
||||
firstExtruderValue = 0
|
||||
index = 0
|
||||
#start scanning
|
||||
for active_layer in data:
|
||||
modified_gcode = ""
|
||||
lineIndex = 0;
|
||||
lines = active_layer.split("\n")
|
||||
for line in lines:
|
||||
#dont leave blanks
|
||||
if line != "":
|
||||
modified_gcode += line + "\n"
|
||||
# find current layer
|
||||
if ";LAYER:" in line:
|
||||
layer = self.getValue(line, ";LAYER:", layer)
|
||||
if (layer >= startLayer) and (layer <= endLayer): #find layers of interest
|
||||
if lines[lineIndex + 4] == "T2": #check if needing to delete old data
|
||||
del lines[(lineIndex + 1):(lineIndex + 5)]
|
||||
firstExtruderValue = int(((layer - startLayer) * firstExtruderIncrements) + firstMix)
|
||||
if firstExtruderValue == 100:
|
||||
modified_gcode += "M163 S0 P1\n"
|
||||
modified_gcode += "M163 S1 P0\n"
|
||||
elif firstExtruderValue == 0:
|
||||
modified_gcode += "M163 S0 P0\n"
|
||||
modified_gcode += "M163 S1 P1\n"
|
||||
else:
|
||||
modified_gcode += "M163 S0 P0.{:02d}\n".format(firstExtruderValue)
|
||||
modified_gcode += "M163 S1 P0.{:02d}\n".format(100 - firstExtruderValue)
|
||||
modified_gcode += "M164 S2\n"
|
||||
modified_gcode += "T2\n"
|
||||
lineIndex += 1 #for deleting index
|
||||
data[index] = modified_gcode
|
||||
index += 1
|
||||
return data
|
|
@ -125,11 +125,11 @@ class ZeroConfClient:
|
|||
if not info.address:
|
||||
info = zero_conf.get_service_info(service_type, name)
|
||||
|
||||
if info:
|
||||
if info and info.address:
|
||||
type_of_device = info.properties.get(b"type", None)
|
||||
if type_of_device:
|
||||
if type_of_device == b"printer":
|
||||
address = '.'.join(map(lambda n: str(n), info.address))
|
||||
address = '.'.join(map(str, info.address))
|
||||
self.addedNetworkCluster.emit(str(name), address, info.properties)
|
||||
else:
|
||||
Logger.log("w", "The type of the found device is '%s', not 'printer'." % type_of_device)
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
import configparser
|
||||
from typing import Tuple, List
|
||||
import io
|
||||
from UM.VersionUpgrade import VersionUpgrade
|
||||
|
||||
# Merged preferences: machine_head_polygon and machine_head_with_fans_polygon -> machine_head_with_fans_polygon
|
||||
# When both are present, machine_head_polygon will be removed
|
||||
# When only one of the two is present, it's value will be used
|
||||
|
||||
|
||||
class VersionUpgrade44to45(VersionUpgrade):
|
||||
def getCfgVersion(self, serialised: str) -> int:
|
||||
parser = configparser.ConfigParser(interpolation = None)
|
||||
parser.read_string(serialised)
|
||||
format_version = int(parser.get("general", "version")) # Explicitly give an exception when this fails. That means that the file format is not recognised.
|
||||
setting_version = int(parser.get("metadata", "setting_version", fallback = "0"))
|
||||
return format_version * 1000000 + setting_version
|
||||
|
||||
## Upgrades Preferences to have the new version number.
|
||||
#
|
||||
# This renames the renamed settings in the list of visible settings.
|
||||
def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
parser = configparser.ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
parser["metadata"]["setting_version"] = "11"
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
||||
|
||||
## Upgrades instance containers to have the new version
|
||||
# number.
|
||||
#
|
||||
# This renames the renamed settings in the containers.
|
||||
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
parser = configparser.ConfigParser(interpolation = None, comment_prefixes=())
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
parser["metadata"]["setting_version"] = "11"
|
||||
|
||||
if "values" in parser:
|
||||
# merge machine_head_with_fans_polygon (preferred) and machine_head_polygon
|
||||
if "machine_head_with_fans_polygon" in parser["values"]:
|
||||
if "machine_head_polygon" in parser["values"]:
|
||||
del parser["values"]["machine_head_polygon"]
|
||||
elif "machine_head_polygon" in parser["values"]:
|
||||
parser["values"]["machine_head_with_fans_polygon"] = parser["values"]["machine_head_polygon"]
|
||||
del parser["values"]["machine_head_polygon"]
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
||||
|
||||
## Upgrades stacks to have the new version number.
|
||||
def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
parser = configparser.ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
if "metadata" not in parser:
|
||||
parser["metadata"] = {}
|
||||
parser["metadata"]["setting_version"] = "11"
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
61
plugins/VersionUpgrade/VersionUpgrade44to45/__init__.py
Normal file
61
plugins/VersionUpgrade/VersionUpgrade44to45/__init__.py
Normal file
|
@ -0,0 +1,61 @@
|
|||
# Copyright (c) 2019 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import Any, Dict, TYPE_CHECKING
|
||||
|
||||
from . import VersionUpgrade44to45
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from UM.Application import Application
|
||||
|
||||
upgrade = VersionUpgrade44to45.VersionUpgrade44to45()
|
||||
|
||||
|
||||
def getMetaData() -> Dict[str, Any]:
|
||||
return {
|
||||
"version_upgrade": {
|
||||
# From To Upgrade function
|
||||
("preferences", 6000010): ("preferences", 6000011, upgrade.upgradePreferences),
|
||||
("machine_stack", 4000010): ("machine_stack", 4000011, upgrade.upgradeStack),
|
||||
("extruder_train", 4000010): ("extruder_train", 4000011, upgrade.upgradeStack),
|
||||
("definition_changes", 4000010): ("definition_changes", 4000011, upgrade.upgradeInstanceContainer),
|
||||
("quality_changes", 4000010): ("quality_changes", 4000011, upgrade.upgradeInstanceContainer),
|
||||
("quality", 4000010): ("quality", 4000011, upgrade.upgradeInstanceContainer),
|
||||
("user", 4000010): ("user", 4000011, upgrade.upgradeInstanceContainer),
|
||||
},
|
||||
"sources": {
|
||||
"preferences": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"."}
|
||||
},
|
||||
"machine_stack": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./machine_instances"}
|
||||
},
|
||||
"extruder_train": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./extruders"}
|
||||
},
|
||||
"definition_changes": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./definition_changes"}
|
||||
},
|
||||
"quality_changes": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./quality_changes"}
|
||||
},
|
||||
"quality": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./quality"}
|
||||
},
|
||||
"user": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./user"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def register(app: "Application") -> Dict[str, Any]:
|
||||
return {"version_upgrade": upgrade}
|
8
plugins/VersionUpgrade/VersionUpgrade44to45/plugin.json
Normal file
8
plugins/VersionUpgrade/VersionUpgrade44to45/plugin.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "Version Upgrade 4.4 to 4.5",
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.4 to Cura 4.5.",
|
||||
"api": "7.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
import configparser
|
||||
|
||||
import VersionUpgrade44to45
|
||||
import pytest
|
||||
|
||||
before_update = """[general]
|
||||
version = 4
|
||||
name = Creality CR-10S_settings
|
||||
definition = creality_cr10s
|
||||
|
||||
[metadata]
|
||||
type = definition_changes
|
||||
setting_version = 11
|
||||
|
||||
[values]
|
||||
%s
|
||||
"""
|
||||
before_after_list = [
|
||||
("machine_head_with_fans_polygon = [[-99, 99], [-99, -44], [45, 99], [45, -44]]", "[[-99, 99], [-99, -44], [45, 99], [45, -44]]"),
|
||||
("", None),
|
||||
("machine_head_polygon = [[-98, 99], [-99, -44], [45, 99], [45, -44]]", "[[-98, 99], [-99, -44], [45, 99], [45, -44]]"),
|
||||
("machine_head_polygon = [[-87, 99], [-99, -44], [45, 99], [45, -44]]\nmachine_head_with_fans_polygon = [[-99, 99], [-99, -44], [45, 99], [45, -44]]", "[[-99, 99], [-99, -44], [45, 99], [45, -44]]"),
|
||||
]
|
||||
|
||||
|
||||
class TestVersionUpgrade44to45:
|
||||
|
||||
@pytest.mark.parametrize("after_string, after_value", before_after_list)
|
||||
def test_upgrade(self, after_string, after_value):
|
||||
upgrader = VersionUpgrade44to45.VersionUpgrade44to45()
|
||||
|
||||
|
||||
file_name, new_data = upgrader.upgradeInstanceContainer(before_update % after_string, "whatever")
|
||||
parser = configparser.ConfigParser(interpolation=None)
|
||||
parser.read_string(new_data[0])
|
||||
|
||||
if after_value is None:
|
||||
assert "machine_head_with_fans_polygon" not in parser["values"]
|
||||
else:
|
||||
assert parser["values"]["machine_head_with_fans_polygon"] == after_value
|
||||
|
||||
assert "machine_head_polygon" not in parser["values"]
|
|
@ -88,7 +88,7 @@
|
|||
"adhesion_type": { "default_value": "skirt" },
|
||||
"machine_nozzle_heat_up_speed": { "default_value": 2 },
|
||||
"machine_nozzle_cool_down_speed": { "default_value": 2 },
|
||||
"machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
|
||||
"gantry_height": { "value": "55" },
|
||||
"machine_max_feedrate_x": { "default_value": 300 },
|
||||
"machine_max_feedrate_y": { "default_value": 300 },
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
"adhesion_type": { "default_value": "skirt" },
|
||||
"machine_nozzle_heat_up_speed": { "default_value": 2 },
|
||||
"machine_nozzle_cool_down_speed": { "default_value": 2 },
|
||||
"machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
|
||||
"gantry_height": { "value": "55" },
|
||||
"machine_max_feedrate_x": { "default_value": 300 },
|
||||
"machine_max_feedrate_y": { "default_value": 300 },
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
"adhesion_type": { "default_value": "skirt" },
|
||||
"machine_nozzle_heat_up_speed": { "default_value": 2 },
|
||||
"machine_nozzle_cool_down_speed": { "default_value": 2 },
|
||||
"machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
|
||||
"gantry_height": { "value": "55" },
|
||||
"machine_max_feedrate_x": { "default_value": 300 },
|
||||
"machine_max_feedrate_y": { "default_value": 300 },
|
||||
|
|
|
@ -7,13 +7,6 @@
|
|||
"machine_width": { "default_value": 300 },
|
||||
"machine_depth": { "default_value": 300 },
|
||||
"machine_height": { "default_value": 400 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
[22, -32],
|
||||
[22, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
|
|
@ -8,13 +8,6 @@
|
|||
"machine_width": { "default_value": 450 },
|
||||
"machine_depth": { "default_value": 450 },
|
||||
"machine_height": { "default_value": 470 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-44, 34],
|
||||
[-44, -34],
|
||||
[18, -34],
|
||||
[18, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-44, 34],
|
||||
[-44, -34],
|
||||
|
|
|
@ -7,13 +7,6 @@
|
|||
"machine_width": { "default_value": 300 },
|
||||
"machine_depth": { "default_value": 220 },
|
||||
"machine_height": { "default_value": 300 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
[22, -32],
|
||||
[22, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
|
|
@ -7,13 +7,6 @@
|
|||
"machine_width": { "default_value": 400 },
|
||||
"machine_depth": { "default_value": 400 },
|
||||
"machine_height": { "default_value": 400 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
[22, -32],
|
||||
[22, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
|
|
@ -7,13 +7,6 @@
|
|||
"machine_width": { "default_value": 500 },
|
||||
"machine_depth": { "default_value": 500 },
|
||||
"machine_height": { "default_value": 500 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
[22, -32],
|
||||
[22, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
|
|
@ -5,13 +5,6 @@
|
|||
"overrides": {
|
||||
"machine_name": { "default_value": "Creality CR-10S Pro" },
|
||||
"machine_start_gcode": { "default_value": "M201 X500.00 Y500.00 Z100.00 E5000.00 ;Setup machine max acceleration\nM203 X500.00 Y500.00 Z10.00 E50.00 ;Setup machine max feedrate\nM204 P500.00 R1000.00 T500.00 ;Setup Print/Retract/Travel acceleration\nM205 X8.00 Y8.00 Z0.40 E5.00 ;Setup Jerk\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nG28 ;Home\nM420 S1 Z2 ;Enable ABL using saved Mesh and Fade Height\n\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n"},
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-44, 34],
|
||||
[-44, -34],
|
||||
[18, -34],
|
||||
[18, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-44, 34],
|
||||
[-44, -34],
|
||||
|
|
|
@ -7,13 +7,6 @@
|
|||
"machine_width": { "default_value": 220 },
|
||||
"machine_depth": { "default_value": 220 },
|
||||
"machine_height": { "default_value": 250 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
[22, -32],
|
||||
[22, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
|
|
@ -8,13 +8,6 @@
|
|||
"machine_width": { "default_value": 150 },
|
||||
"machine_depth": { "default_value": 150 },
|
||||
"machine_height": { "default_value": 200 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
[22, -32],
|
||||
[22, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
|
|
@ -17,13 +17,6 @@
|
|||
[[-117.5, 117.5], [-117.5, 108], [117.5, 108], [117.5, 117.5]],
|
||||
[[-117.5, -108], [-117.5, -117.5], [117.5, -117.5], [117.5, -108]]
|
||||
]},
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-1, 1],
|
||||
[-1, -1],
|
||||
[1, -1],
|
||||
[1, 1]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
@ -31,6 +24,9 @@
|
|||
[32, 34]
|
||||
]
|
||||
},
|
||||
"machine_start_gcode": {
|
||||
"default_value": "; Ender 3 Custom Start G-code\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish"
|
||||
},
|
||||
|
||||
"gantry_height": { "value": 25 }
|
||||
}
|
||||
|
|
|
@ -7,13 +7,6 @@
|
|||
"machine_width": { "default_value": 452 },
|
||||
"machine_depth": { "default_value": 468 },
|
||||
"machine_height": { "default_value": 482 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
[22, -32],
|
||||
[22, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
|
|
@ -8,13 +8,6 @@
|
|||
"machine_width": { "default_value": 220 },
|
||||
"machine_depth": { "default_value": 220 },
|
||||
"machine_height": { "default_value": 300 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
[22, -32],
|
||||
[22, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
|
|
@ -8,13 +8,6 @@
|
|||
"machine_width": { "default_value": 350 },
|
||||
"machine_depth": { "default_value": 350 },
|
||||
"machine_height": { "default_value": 400 },
|
||||
"machine_head_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
[22, -32],
|
||||
[22, 34]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": { "default_value": [
|
||||
[-26, 34],
|
||||
[-26, -32],
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"type": "extruder",
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Unknown",
|
||||
"setting_version": 10,
|
||||
"setting_version": 11,
|
||||
"visible": false,
|
||||
"position": "0"
|
||||
},
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"author": "Ultimaker",
|
||||
"category": "Other",
|
||||
"manufacturer": "Unknown",
|
||||
"setting_version": 10,
|
||||
"setting_version": 11,
|
||||
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",
|
||||
"visible": false,
|
||||
"has_materials": true,
|
||||
|
@ -421,34 +421,6 @@
|
|||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
},
|
||||
"machine_head_polygon":
|
||||
{
|
||||
"label": "Machine Head Polygon",
|
||||
"description": "A 2D silhouette of the print head (fan caps excluded).",
|
||||
"type": "polygon",
|
||||
"default_value":
|
||||
[
|
||||
[
|
||||
-1,
|
||||
1
|
||||
],
|
||||
[
|
||||
-1,
|
||||
-1
|
||||
],
|
||||
[
|
||||
1,
|
||||
-1
|
||||
],
|
||||
[
|
||||
1,
|
||||
1
|
||||
]
|
||||
],
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
},
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"label": "Machine Head & Fan Polygon",
|
||||
|
@ -2101,6 +2073,36 @@
|
|||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"skin_edge_support_thickness":
|
||||
{
|
||||
"label": "Skin Edge Support Thickness",
|
||||
"description": "The thickness of the extra infill that supports skin edges.",
|
||||
"unit": "mm",
|
||||
"default_value": 0.8,
|
||||
"minimum_value": "0",
|
||||
"maximum_value": "machine_height",
|
||||
"type": "float",
|
||||
"value": "0",
|
||||
"comment": "This was put at 0 to keep the default behaviour the same, but in the original PR the 'value' was: resolveOrValue('infill_sparse_thickness') * (4 if infill_sparse_density < 12.5 else (3 if infill_sparse_density < 25 else (2 if infill_sparse_density < 50 else 1)))",
|
||||
"limit_to_extruder": "infill_extruder_nr",
|
||||
"enabled": "infill_sparse_density > 0",
|
||||
"settable_per_mesh": true,
|
||||
"children":
|
||||
{
|
||||
"skin_edge_support_layers":
|
||||
{
|
||||
"label": "Skin Edge Support Layers",
|
||||
"description": "The number of infill layers that supports skin edges.",
|
||||
"default_value": 4,
|
||||
"minimum_value": "0",
|
||||
"type": "int",
|
||||
"value": "math.ceil(round(skin_edge_support_thickness / resolveOrValue('infill_sparse_thickness'), 4))",
|
||||
"limit_to_extruder": "infill_extruder_nr",
|
||||
"enabled": "infill_sparse_density > 0",
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -2737,7 +2739,6 @@
|
|||
"minimum_value": "0",
|
||||
"minimum_value_warning": "line_width * 1.5",
|
||||
"maximum_value_warning": "10",
|
||||
"enabled": false,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
|
|
|
@ -59,14 +59,6 @@
|
|||
"adhesion_type": {
|
||||
"default_value": "skirt"
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"default_value": [
|
||||
[-75, 35],
|
||||
[18, 35],
|
||||
[18, -18],
|
||||
[-75, -18]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-75, 35],
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
"machine_center_is_zero": {
|
||||
"default_value": false
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-75, -18],
|
||||
[-75, 35],
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
"machine_center_is_zero": {
|
||||
"default_value": true
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-43.7, -19.2],
|
||||
[-43.7, 55],
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
"machine_depth": {
|
||||
"default_value": 150
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-30, 34],
|
||||
[-30, -32],
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
"machine_center_is_zero": {
|
||||
"default_value": false
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-75, -18],
|
||||
[-75, 35],
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
"machine_center_is_zero": {
|
||||
"default_value": false
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-75, -18],
|
||||
[-75, 35],
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
"machine_depth": {
|
||||
"default_value": 300
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-30, 34],
|
||||
[-30, -32],
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
"machine_depth": {
|
||||
"default_value": 150
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-30, 34],
|
||||
[-30, -32],
|
||||
|
|
|
@ -31,14 +31,6 @@
|
|||
"machine_center_is_zero": {
|
||||
"default_value": false
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"default_value": [
|
||||
[-75, -18],
|
||||
[-75, 35],
|
||||
[18, 35],
|
||||
[18, -18]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-75, -18],
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
"machine_center_is_zero": {
|
||||
"default_value": false
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-75, -18],
|
||||
[-75, 35],
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_head_polygon": { "default_value": [[ 0, 0], [ 0, 0], [ 0, 0], [ 0, 0]] },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[ 0, 0], [ 0, 0], [ 0, 0], [ 0, 0]] },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
"machine_end_gcode": {
|
||||
"default_value": " ; -- END GCODE --\n G1 X0 Y230 ; Get extruder out of way.\n M107 ; Turn off fan\n G91 ; Relative positioning\n G0 Z20 ; Lift extruder up\n T0\n G1 E-1 ; Reduce filament pressure\n M104 T0 S0 ; Turn ectruder heater off\n G90 ; Absolute positioning\n G92 E0 ; Reset extruder position\n M140 S0 ; Disable heated bed\n M84 ; Turn steppers off\n ; -- end of END GCODE --\n"
|
||||
},
|
||||
"machine_head_polygon": { "default_value": [[ 22, 67], [ 22, 51], [ 36, 51], [ 36, 67]] },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[ 22, 67], [ 22, 51], [ 36, 51], [ 36, 67]] },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
"cool_min_layer_time": { "default_value": 10 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
"machine_end_gcode": {
|
||||
"default_value": " ; -- END GCODE --\n G1 X0 Y230 ; Get extruder out of way.\n M107 ; Turn off fan\n G91 ; Relative positioning\n G0 Z20 ; Lift extruder up\n T0\n G1 E-1 ; Reduce filament pressure\n M104 T0 S0 ; Turn extruder heater off\n G90 ; Absolute positioning\n G92 E0 ; Reset extruder position\n M140 S0 ; Disable heated bed\n M84 ; Turn steppers off\n ; -- end of END GCODE --\n"
|
||||
},
|
||||
"machine_head_polygon": { "default_value": [[ 18, 0], [ 18, 65], [ 32, 65], [ 32, 0]] },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[ 18, 0], [ 18, 65], [ 32, 65], [ 32, 0]] },
|
||||
"cool_min_layer_time": { "default_value": 10 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_head_polygon": { "default_value": [[ 16, 30], [ 16, 45], [ 16, 45], [ 16, 30]] },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[ 16, 30], [ 16, 45], [ 16, 45], [ 16, 30]] },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
"cool_min_layer_time": { "default_value": 15 },
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
"machine_end_gcode": {
|
||||
"default_value": " ; -- END GCODE --\n G1 X0 Y230 ; Get extruder out of way.\n M107 ; Turn off fan\n G91 ; Relative positioning\n G0 Z20 ; Lift extruder up\n T0\n G1 E-1 ; Reduce filament pressure\n M104 T0 S0 ; Turn ectruder heater off\n G90 ; Absolute positioning\n G92 E0 ; Reset extruder position\n M140 S0 ; Disable heated bed\n M84 ; Turn steppers off\n ; -- end of END GCODE --\n"
|
||||
},
|
||||
"machine_head_polygon": { "default_value": [[ 40, 15], [ 40, 60], [ 30, 60], [ 30, 15]] },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[ 40, 15], [ 40, 60], [ 30, 60], [ 30, 15]] },
|
||||
"support_pattern": { "default_value": "grid" },
|
||||
"cool_min_layer_time": { "default_value": 10 },
|
||||
"support_angle": { "default_value": 45 },
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
"machine_height": { "default_value": 200 },
|
||||
"machine_depth": { "default_value": 200 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_head_polygon":
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"default_value":
|
||||
[
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
"machine_center_is_zero": {
|
||||
"default_value": false
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-30, 34],
|
||||
[-30, -32],
|
||||
|
|
|
@ -35,14 +35,6 @@
|
|||
"machine_center_is_zero": {
|
||||
"default_value": false
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"default_value": [
|
||||
[-60, -18],
|
||||
[-60, 40],
|
||||
[18, 40],
|
||||
[18, -18]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-60, -40],
|
||||
|
|
|
@ -36,14 +36,6 @@
|
|||
"machine_use_extruder_offset_to_offset_coords": {
|
||||
"default_value": true
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"default_value": [
|
||||
[-60, -18],
|
||||
[-60, 40],
|
||||
[18, 40],
|
||||
[18, -18]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[-60, -40],
|
||||
|
|
BIN
resources/images/cura_enterprise.png
Normal file
BIN
resources/images/cura_enterprise.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
|
@ -4,7 +4,7 @@ name = Quick
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Quick
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Quick
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Quick
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Quick
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Quick
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Accurate
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Visual
|
|||
definition = ultimaker_s5
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
|
|
|
@ -12,7 +12,7 @@ UM.Dialog
|
|||
id: base
|
||||
|
||||
//: About dialog title
|
||||
title: catalog.i18nc("@title:window","About Cura")
|
||||
title: catalog.i18nc("@title:window","About " + catalog.i18nc("@title:window", CuraApplication.applicationDisplayName))
|
||||
|
||||
minimumWidth: 500 * screenScaleFactor
|
||||
minimumHeight: 650 * screenScaleFactor
|
||||
|
|
|
@ -164,6 +164,7 @@ Popup
|
|||
visible: profilesList.visibleChildren.length > 1
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
color: UM.Theme.getColor("text_inactive")
|
||||
}
|
||||
|
||||
Column
|
||||
|
|
|
@ -13,7 +13,8 @@ Item
|
|||
|
||||
property color activeColor: UM.Theme.getColor("primary")
|
||||
property color inactiveColor: UM.Theme.getColor("slider_groove")
|
||||
property color defaultItemColor: UM.Theme.getColor("small_button_active")
|
||||
property color defaultItemColor: UM.Theme.getColor("slider_groove_fill")
|
||||
property color defaultItemFillColor: UM.Theme.getColor("main_background")
|
||||
property int checkboxSize: Math.round(UM.Theme.getSize("radio_button").height * 0.75)
|
||||
property int inactiveMarkerSize: 2 * barSize
|
||||
property int barSize: UM.Theme.getSize("slider_groove_radius").height
|
||||
|
@ -135,6 +136,7 @@ Item
|
|||
radius: Math.round(width / 2)
|
||||
|
||||
border.color: defaultItemColor
|
||||
color: defaultItemFillColor
|
||||
|
||||
Rectangle
|
||||
{
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Standard
|
|||
definition = leapfrog_bolt_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = quality
|
||||
quality_type = standard
|
||||
weight = 0
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Standard
|
|||
definition = leapfrog_bolt_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = quality
|
||||
quality_type = standard
|
||||
weight = 0
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Standard
|
|||
definition = leapfrog_bolt_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = quality
|
||||
quality_type = standard
|
||||
weight = 0
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Standard
|
|||
definition = leapfrog_bolt_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = quality
|
||||
quality_type = standard
|
||||
weight = 0
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Standard
|
|||
definition = leapfrog_bolt_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 10
|
||||
setting_version = 11
|
||||
type = quality
|
||||
quality_type = standard
|
||||
weight = 0
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue