Merge branch '15.06'

* 15.06:
  Store the disallowed areas as polygons and use those to test for intersection
  Account for skirt size and disallowed areas to set the scale to max size
  Fix the JSON file after moving the initial layer height setting
  Move initial layer thickness from layer height children into category
  Disable the low/high quality slicing and slider settings if we are not in simple mode
  Remove sidebar right margin
  Exclude ConsoleLogger and MLP* and OBJWriter plugins from the windows installer
  Switch to using a proper windows application
  Properly run the vcredist installer in quiet mode
  Use the application as source for the shortcut icon
  Bump version to 15.05.96
  Properly add and set the window icon
  Update UMO start/end gcode to reflect what is used in Cura 15.04
  Do not hide enable retraction check box even if all children are visible
  Update setting ranges to reflect those that are used in the current Cura
  lowers the printbed so the mesh and grid no longer z-fight
  If we skip an object because it does not have a bounding box, retrigger the change timer
  Restyling of the save to toolpath button
This commit is contained in:
Arjen Hiemstra 2015-06-25 14:24:35 +02:00
commit 58702d0bb7
15 changed files with 359 additions and 214 deletions

View File

@ -42,6 +42,9 @@ class BuildVolume(SceneNode):
def setDepth(self, depth):
self._depth = depth
def getDisallowedAreas(self):
return self._disallowed_areas
def setDisallowedAreas(self, areas):
self._disallowed_areas = areas
@ -109,19 +112,43 @@ class BuildVolume(SceneNode):
v = self._grid_mesh.getVertex(n)
self._grid_mesh.setVertexUVCoordinates(n, v[0], v[2])
disallowed_area_size = 0
if self._disallowed_areas:
mb = MeshBuilder()
for area in self._disallowed_areas:
for polygon in self._disallowed_areas:
points = polygon.getPoints()
mb.addQuad(
area[0],
area[1],
area[2],
area[3],
Vector(points[0, 0], 0.1, points[0, 1]),
Vector(points[1, 0], 0.1, points[1, 1]),
Vector(points[2, 0], 0.1, points[2, 1]),
Vector(points[3, 0], 0.1, points[3, 1]),
color = Color(174, 174, 174, 255)
)
# Find the largest disallowed area to exclude it from the maximum scale bounds
size = abs(numpy.max(points[:, 1]) - numpy.min(points[:, 1]))
disallowed_area_size = max(size, disallowed_area_size)
self._disallowed_area_mesh = mb.getData()
else:
self._disallowed_area_mesh = None
self._aabb = AxisAlignedBox(minimum = Vector(minW, minH - 1.0, minD), maximum = Vector(maxW, maxH, maxD))
settings = Application.getInstance().getActiveMachine()
skirt_size = 0.0
if settings.getSettingValueByKey("adhesion_type") == "None":
skirt_size = settings.getSettingValueByKey("skirt_line_count") * settings.getSettingValueByKey("skirt_line_width") + settings.getSettingValueByKey("skirt_gap")
elif settings.getSettingValueByKey("adhesion_type") == "Brim":
skirt_size = settings.getSettingValueByKey("brim_line_count") * settings.getSettingValueByKey("skirt_line_width")
else:
skirt_size = settings.getSettingValueByKey("skirt_line_width")
skirt_size += settings.getSettingValueByKey("skirt_line_width")
scale_to_max_bounds = AxisAlignedBox(
minimum = Vector(minW + skirt_size, minH, minD + skirt_size + disallowed_area_size),
maximum = Vector(maxW - skirt_size, maxH, maxD - skirt_size - disallowed_area_size)
)
Application.getInstance().getController().getScene()._maximum_bounds = scale_to_max_bounds

View File

@ -18,6 +18,7 @@ from UM.Preferences import Preferences
from UM.Message import Message
from UM.PluginRegistry import PluginRegistry
from UM.JobQueue import JobQueue
from UM.Math.Polygon import Polygon
from UM.Scene.BoxRenderer import BoxRenderer
from UM.Scene.Selection import Selection
@ -36,7 +37,7 @@ from . import PrintInformation
from . import CuraActions
from PyQt5.QtCore import pyqtSlot, QUrl, Qt, pyqtSignal, pyqtProperty
from PyQt5.QtGui import QColor
from PyQt5.QtGui import QColor, QIcon
import platform
import sys
@ -52,6 +53,8 @@ class CuraApplication(QtApplication):
super().__init__(name = "cura", version = "master")
self.setWindowIcon(QIcon(Resources.getPath(Resources.ImagesLocation, "cura-icon.png")))
self.setRequiredPlugins([
"CuraEngineBackend",
"MeshView",
@ -464,23 +467,13 @@ class CuraApplication(QtApplication):
disallowed_areas = machine.getSettingValueByKey("machine_disallowed_areas")
areas = []
if disallowed_areas:
for area in disallowed_areas:
polygon = []
polygon.append(Vector(area[0][0], 0.2, area[0][1]))
polygon.append(Vector(area[1][0], 0.2, area[1][1]))
polygon.append(Vector(area[2][0], 0.2, area[2][1]))
polygon.append(Vector(area[3][0], 0.2, area[3][1]))
areas.append(polygon)
areas.append(Polygon(numpy.array(area, numpy.float32)))
self._volume.setDisallowedAreas(areas)
self._volume.rebuild()
if self.getController().getTool("ScaleTool"):
bbox = self._volume.getBoundingBox()
bbox.setBottom(0.0)
self.getController().getTool("ScaleTool").setMaximumBounds(bbox)
offset = machine.getSettingValueByKey("machine_platform_offset")
if offset:
self._platform.setPosition(Vector(offset[0], offset[1], offset[2]))

View File

@ -49,6 +49,7 @@ class PlatformPhysics:
bbox = node.getBoundingBox()
if not bbox or not bbox.isValid():
self._change_timer.start()
continue
# Mark the node as outside the build volume if the bounding box test fails.
@ -93,14 +94,19 @@ class PlatformPhysics:
move_vector.setX(overlap[0] * 1.1)
move_vector.setZ(overlap[1] * 1.1)
if hasattr(node, "_convex_hull"):
# Check for collisions between disallowed areas and the object
for area in self._build_volume.getDisallowedAreas():
overlap = node._convex_hull.intersectsPolygon(area)
if overlap is None:
continue
node._outside_buildarea = True
if move_vector != Vector():
op = PlatformPhysicsOperation.PlatformPhysicsOperation(node, move_vector)
op.push()
if node.getBoundingBox().intersectsBox(self._build_volume.getBoundingBox()) == AxisAlignedBox.IntersectionResult.FullIntersection:
op = ScaleToBoundsOperation(node, self._build_volume.getBoundingBox())
op.push()
def _onToolOperationStarted(self, tool):
self._enabled = False

View File

@ -38,6 +38,8 @@ class PrintInformation(QObject):
def __init__(self, parent = None):
super().__init__(parent)
self._enabled = False
self._minimum_print_time = Duration(None, self)
self._current_print_time = Duration(None, self)
self._maximum_print_time = Duration(None, self)
@ -103,6 +105,21 @@ class PrintInformation(QObject):
def timeQualityValue(self):
return self._time_quality_value
def setEnabled(self, enabled):
if enabled != self._enabled:
self._enabled = enabled
if self._enabled:
self._updateTimeQualitySettings()
self._onSlicingStarted()
self.enabledChanged.emit()
enabledChanged = pyqtSignal()
@pyqtProperty(bool, fset = setEnabled, notify = enabledChanged)
def enabled(self):
return self._enabled
@pyqtSlot(int)
def setTimeQualityValue(self, value):
if value != self._time_quality_value:
@ -132,7 +149,10 @@ class PrintInformation(QObject):
self._material_amount = round(amount / 10) / 100
self.materialAmountChanged.emit()
if self._slice_reason != self.SliceReason.SettingChanged:
if not self._enabled:
return
if self._slice_reason != self.SliceReason.SettingChanged or not self._minimum_print_time.valid or not self._maximum_print_time.valid:
self._slice_pass = self.SlicePass.LowQualitySettings
self._backend.slice(settings = self._low_quality_settings, save_gcode = False, save_polygons = False, force_restart = False, report_progress = False)
else:
@ -166,7 +186,7 @@ class PrintInformation(QObject):
self._slice_reason = self.SliceReason.ActiveMachineChanged
def _updateTimeQualitySettings(self):
if not self._current_settings:
if not self._current_settings or not self._enabled:
return
if not self._low_quality_settings:

View File

@ -1,5 +1,5 @@
!ifndef VERSION
!define VERSION '15.05.95'
!define VERSION '15.05.96'
!endif
; The name of the installer
@ -92,7 +92,7 @@ Section "Cura ${VERSION}"
CreateDirectory "$SMPROGRAMS\Cura ${VERSION}"
CreateShortCut "$SMPROGRAMS\Cura ${VERSION}\Uninstall Cura ${VERSION}.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
CreateShortCut "$SMPROGRAMS\Cura ${VERSION}\Cura ${VERSION}.lnk" "$INSTDIR\Cura.exe" '' "$INSTDIR\resources\cura.ico" 0
CreateShortCut "$SMPROGRAMS\Cura ${VERSION}\Cura ${VERSION}.lnk" "$INSTDIR\Cura.exe" '' "$INSTDIR\Cura.exe" 0
SectionEnd
@ -107,7 +107,7 @@ Section "Install Visual Studio 2010 Redistributable"
File "vcredist_2010_20110908_x86.exe"
IfSilent +2
ExecWait '"$INSTDIR\vcredist_2010_20110908_x86.exe" /silent /norestart'
ExecWait '"$INSTDIR\vcredist_2010_20110908_x86.exe" /q /norestart'
SectionEnd

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -272,7 +272,6 @@ UM.MainWindow {
top: parent.top;
bottom: parent.bottom;
right: parent.right;
rightMargin: UM.Theme.sizes.window_margin.width;
}
width: UM.Theme.sizes.panel.width;

View File

@ -8,7 +8,7 @@ import QtQuick.Layouts 1.1
import UM 1.0 as UM
Button {
Rectangle {
id: base;
property Action saveAction;
@ -16,8 +16,6 @@ Button {
property real progress: UM.Backend.progress;
Behavior on progress { NumberAnimation { duration: 250; } }
enabled: progress >= 0.95;
property string currentDevice: "local_file"
property bool defaultOverride: false;
property bool defaultAmbiguous: false;
@ -25,9 +23,6 @@ Button {
property variant printDuration: PrintInformation.currentPrintTime;
property real printMaterialAmount: PrintInformation.materialAmount;
iconSource: UM.Theme.icons[Printer.outputDevices[base.currentDevice].icon];
tooltip: Printer.outputDevices[base.currentDevice].description;
Connections {
target: Printer;
onOutputDevicesChanged: {
@ -51,120 +46,162 @@ Button {
}
}
style: ButtonStyle {
background: UM.AngledCornerRectangle {
implicitWidth: control.width;
implicitHeight: control.height;
Rectangle{
id: background
implicitWidth: base.width;
implicitHeight: parent.height;
color: UM.Theme.colors.save_button_background;
border.width: UM.Theme.sizes.save_button_border.width
border.color: UM.Theme.colors.save_button_border
color: UM.Theme.colors.save_button_border;
cornerSize: UM.Theme.sizes.default_margin.width;
Rectangle {
id: infoBox
width: parent.width - UM.Theme.sizes.default_margin.width * 2;
height: UM.Theme.sizes.save_button_slicing_bar.height
UM.AngledCornerRectangle {
anchors.fill: parent;
anchors.margins: UM.Theme.sizes.save_button_border.width;
cornerSize: UM.Theme.sizes.default_margin.width;
color: UM.Theme.colors.save_button;
}
anchors.top: parent.top
anchors.topMargin: UM.Theme.sizes.default_margin.height;
anchors.left: parent.left
anchors.leftMargin: UM.Theme.sizes.default_margin.width;
UM.AngledCornerRectangle {
anchors {
left: parent.left;
top: parent.top;
bottom: parent.bottom;
}
width: Math.max(parent.height + (parent.width - parent.height) * control.progress, parent.height);
cornerSize: UM.Theme.sizes.default_margin.width;
color: !control.enabled ? UM.Theme.colors.save_button_inactive : control.hovered ? UM.Theme.colors.save_button_active_hover : UM.Theme.colors.save_button_active;
Behavior on color { ColorAnimation { duration: 50; } }
}
UM.AngledCornerRectangle {
anchors.left: parent.left;
width: parent.height + UM.Theme.sizes.save_button_border.width;
height: parent.height;
cornerSize: UM.Theme.sizes.default_margin.width;
color: UM.Theme.colors.save_button;
}
UM.AngledCornerRectangle {
anchors.left: parent.left;
width: parent.height + UM.Theme.sizes.save_button_border.width;
height: parent.height;
cornerSize: UM.Theme.sizes.default_margin.width;
color: UM.Theme.colors.save_button;
}
UM.AngledCornerRectangle {
id: icon;
anchors.left: parent.left;
width: parent.height;
height: parent.height;
cornerSize: UM.Theme.sizes.default_margin.width;
color: !control.enabled ? UM.Theme.colors.save_button_inactive : control.hovered ? UM.Theme.colors.save_button_active_hover : UM.Theme.colors.save_button_active;
Behavior on color { ColorAnimation { duration: 50; } }
Image {
anchors.centerIn: parent;
width: UM.Theme.sizes.button_icon.width;
height: UM.Theme.sizes.button_icon.height;
sourceSize.width: width;
sourceSize.height: height;
source: control.iconSource;
}
}
}
label: Column {
border.width: UM.Theme.sizes.save_button_border.width
border.color: UM.Theme.colors.save_button_border
color: UM.Theme.colors.save_button_estimated_text_background;
Label {
id: label;
anchors.left: parent.left;
anchors.leftMargin: control.height + UM.Theme.sizes.save_button_label_margin.width;
color: UM.Theme.colors.save_button_text;
font: UM.Theme.fonts.default;
text: control.text;
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width;
visible: base.progress >= 0 && base.progress < 0.99 ? false : true
color: UM.Theme.colors.save_button_estimated_text;
font: UM.Theme.fonts.small;
text:
if(base.progress < 0) {
//: Save button label
return qsTr("Please load a 3D model");
} else if (base.progress < 0.99) {
//: Save button label
return qsTr("Calculating Print-time");
} else if (base.progress > 0.99){
//: Save button label
return qsTr("Estimated Print-time");
} else if (base.progress == null){
return qsTr("");
}
}
Label {
anchors.left: parent.left;
anchors.leftMargin: control.height + UM.Theme.sizes.save_button_label_margin.width;
color: UM.Theme.colors.save_button_text;
font: UM.Theme.fonts.default;
text: (!control.printDuration || !control.printDuration.valid) ? "" : control.printDuration.getDisplayString(UM.DurationFormat.Long)
id: printDurationLabel
anchors.verticalCenter: parent.verticalCenter
anchors.left: label.right;
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width;
color: UM.Theme.colors.save_button_printtime_text;
font: UM.Theme.fonts.small;
visible: base.progress < 0.99 ? false : true
text: (!base.printDuration || !base.printDuration.valid) ? "" : base.printDuration.getDisplayString(UM.DurationFormat.Long);
}
Label {
anchors.left: parent.left;
anchors.leftMargin: control.height + UM.Theme.sizes.save_button_label_margin.width;
color: UM.Theme.colors.save_button_text;
font: UM.Theme.fonts.default;
id: printMaterialLabel
anchors.verticalCenter: parent.verticalCenter
anchors.left: printDurationLabel.right;
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width;
color: UM.Theme.colors.save_button_printtime_text;
font: UM.Theme.fonts.small;
visible: base.progress < 0.99 ? false : true
//: Print material amount save button label
text: control.printMaterialAmount < 0 ? "" : qsTr("%1m material").arg(control.printMaterialAmount);
text: base.printMaterialAmount < 0 ? "" : qsTr("%1m material").arg(base.printMaterialAmount);
}
}
Rectangle {
id: infoBoxOverlay
anchors {
left: infoBox.left;
top: infoBox.top;
bottom: infoBox.bottom;
}
width: Math.max(infoBox.width * base.progress);
color: UM.Theme.colors.save_button_active
visible: base.progress > 0.99 ? false : true
}
Button {
id: saveToButton
anchors.top: infoBox.bottom
anchors.topMargin: UM.Theme.sizes.save_button_text_margin.height;
anchors.left: parent.left
anchors.leftMargin: UM.Theme.sizes.default_margin.width;
tooltip: ''
enabled: progress >= 0.99;
width: infoBox.width/6*4.5
height: UM.Theme.sizes.save_button_save_to_button.height
style: ButtonStyle {
background: Rectangle {
color: !control.enabled ? UM.Theme.colors.save_button_inactive : control.hovered ? UM.Theme.colors.save_button_active_hover : UM.Theme.colors.save_button_active;
Label {
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
color: UM.Theme.colors.save_button_safe_to_text;
font: UM.Theme.fonts.sidebar_save_to;
text: Printer.outputDevices[base.currentDevice].description;
}
}
}
onClicked:
if(base.defaultAmbiguous) {
devicesMenu.popup();
} else {
Printer.writeToOutputDevice(base.currentDevice);
}
}
Button {
id: deviceSelectionMenu;
anchors.top: infoBox.bottom
anchors.topMargin: UM.Theme.sizes.save_button_text_margin.height
anchors.right: parent.right
anchors.rightMargin: UM.Theme.sizes.default_margin.width;
tooltip: ''
width: infoBox.width/6*1.3 - UM.Theme.sizes.save_button_text_margin.height;
height: UM.Theme.sizes.save_button_save_to_button.height
style: ButtonStyle {
background: Rectangle {
color: UM.Theme.colors.save_button_background;
border.width: control.hovered ? UM.Theme.sizes.save_button_border.width : 0
border.color: UM.Theme.colors.save_button_border
Rectangle {
id: deviceSelectionIcon
color: UM.Theme.colors.save_button_background;
anchors.left: parent.left
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width / 2;
anchors.verticalCenter: parent.verticalCenter;
width: parent.height - UM.Theme.sizes.save_button_text_margin.width ;
height: parent.height - UM.Theme.sizes.save_button_text_margin.width;
UM.RecolorImage {
anchors.centerIn: parent;
width: parent.width;
height: parent.height;
sourceSize.width: width;
sourceSize.height: height;
color: UM.Theme.colors.save_button_active
source: UM.Theme.icons[Printer.outputDevices[base.currentDevice].icon];
}
}
Label {
id: deviceSelectionArrow
anchors.right: parent.right;
anchors.rightMargin: UM.Theme.sizes.save_button_text_margin.height
anchors.verticalCenter: parent.verticalCenter;
text: "▼";
font: UM.Theme.fonts.tiny;
color: UM.Theme.colors.save_button_active;
}
}
}
MouseArea {
anchors.fill: parent;
acceptedButtons: Qt.RightButton;
onClicked: devicesMenu.popup();
}
Menu {
menu: Menu {
id: devicesMenu;
Instantiator {
model: Printer.outputDeviceNames;
MenuItem {
@ -184,28 +221,8 @@ Button {
onObjectAdded: devicesMenu.insertItem(index, object)
onObjectRemoved: devicesMenu.removeItem(object)
}
ExclusiveGroup { id: devicesMenuGroup; }
}
text: {
if(base.progress < 0) {
//: Save button label
return qsTr("Please load a 3D model");
} else if (base.progress < 0.95) {
//: Save button label
return qsTr("Calculating Print-time");
} else {
//: Save button label
return qsTr("Estimated Print-time");
}
}
onClicked: {
if(base.defaultAmbiguous) {
devicesMenu.popup();
} else {
Printer.writeToOutputDevice(base.currentDevice);
}
}
}

View File

@ -8,15 +8,13 @@ import QtQuick.Layouts 1.1
import UM 1.0 as UM
UM.AngledCornerRectangle {
Rectangle {
id: base;
property Action addMachineAction;
property Action configureMachinesAction;
property alias saveAction: saveButton.saveAction;
cornerSize: UM.Theme.sizes.default_margin.width;
color: UM.Theme.colors.sidebar;
function showTooltip(item, position, text) {
@ -41,7 +39,6 @@ UM.AngledCornerRectangle {
ColumnLayout {
anchors.fill: parent;
anchors.topMargin: UM.Theme.sizes.default_margin.height;
anchors.bottomMargin: UM.Theme.sizes.window_margin.height;
spacing: UM.Theme.sizes.default_margin.height;
@ -93,11 +90,9 @@ UM.AngledCornerRectangle {
SaveButton {
id: saveButton;
Layout.preferredWidth: base.width - UM.Theme.sizes.default_margin.width * 2;
Layout.preferredHeight: UM.Theme.sizes.button.height;
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter;
implicitWidth: base.width
implicitHeight: UM.Theme.sizes.save_button_text_margin.height * 2 + UM.Theme.sizes.save_button_slicing_bar.height + UM.Theme.sizes.save_button_save_to_button.height + UM.Theme.sizes.default_margin.height
}
}
SidebarTooltip {

View File

@ -20,6 +20,9 @@ Item {
property variant minimumPrintTime: PrintInformation.minimumPrintTime;
property variant maximumPrintTime: PrintInformation.maximumPrintTime;
Component.onCompleted: PrintInformation.enabled = true
Component.onDestruction: PrintInformation.enabled = false
ColumnLayout {
anchors.fill: parent;

View File

@ -41,25 +41,22 @@
"unit": "mm",
"type": "float",
"default": 0.1,
"min_value": 0.00001,
"min_value": 0.0001,
"min_value_warning": 0.04,
"max_value_warning": 2.0,
"always_visible": true,
"children": {
"max_value_warning": 0.32
},
"layer_height_0": {
"label": "Initial Layer Height",
"description": "The layer height of the bottom layer. A thicker bottom layer makes for better bed adhesion.",
"label": "Initial Layer Thickness",
"description": "The layer thickness of the bottom layer. A thicker bottom layer makes sticking to the bed easier.",
"unit": "mm",
"type": "float",
"default": 0.3,
"min_value": 0.0,
"min_value": 0.0001,
"min_value_warning": 0.04,
"max_value_warning": 2.0,
"max_value_warning": 0.32,
"visible": false
}
}
}
}
},
"shell": {
"label": "Shell",
@ -73,7 +70,8 @@
"type": "float",
"default": 0.8,
"min_value": 0.0,
"max_value": 5.0,
"min_value_warning": 0.2,
"max_value_warning": 5.0,
"children": {
"wall_thickness": {
"label": "Wall Thickness",
@ -81,9 +79,8 @@
"unit": "mm",
"default": 0.8,
"min_value": 0.0,
"max_value": 5.0,
"min_value_warning": 0.4,
"max_value_warning": 2.0,
"min_value_warning": 0.2,
"max_value_warning": 5.0,
"type": "float",
"visible": false,
@ -91,6 +88,7 @@
"wall_line_count": {
"label": "Wall Line Count",
"description": "Number of shell lines. This these lines are called perimeter lines in other tools and impact the strength and structural integrity of your print.",
"min_value": 0,
"default": 2,
"type": "int",
"visible": false,
@ -100,6 +98,9 @@
"label": "Wall Line Width",
"description": "Width of a single shell line. Each line of the shell will be printed with this width in mind.",
"unit": "mm",
"min_value": 0.0,
"min_value_warning": 0.2,
"max_value_warning": 5.0,
"default": 0.4,
"type": "float",
"visible": false,
@ -110,6 +111,9 @@
"label": "Outer Wall Line Width",
"description": "Width of the outermost shell line. By printing a thinner outermost wall line you can print higher details with a larger nozzle.",
"unit": "mm",
"min_value": 0.0,
"min_value_warning": 0.2,
"max_value_warning": 5.0,
"default": 0.4,
"type": "float",
"visible": false
@ -118,6 +122,9 @@
"label": "Other Walls Line Width",
"description": "Width of a single shell line for all shell lines except the outermost one.",
"unit": "mm",
"min_value": 0.0,
"min_value_warning": 0.2,
"max_value_warning": 5.0,
"default": 0.4,
"type": "float",
"visible": false
@ -126,6 +133,9 @@
"label": "Skirt line width",
"description": "Width of a single skirt line.",
"unit": "mm",
"min_value": 0.0,
"min_value_warning": 0.2,
"max_value_warning": 5.0,
"default": 0.4,
"type": "float",
"visible": false
@ -134,6 +144,9 @@
"label": "Top/bottom line width",
"description": "Width of a single top/bottom printed line, used to fill up the top/bottom areas of a print.",
"unit": "mm",
"min_value": 0.0,
"min_value_warning": 0.2,
"max_value_warning": 5.0,
"default": 0.4,
"type": "float",
"visible": false
@ -142,6 +155,9 @@
"label": "Infill line width",
"description": "Width of the inner infill printed lines.",
"unit": "mm",
"min_value": 0.0,
"min_value_warning": 0.2,
"max_value_warning": 5.0,
"default": 0.4,
"type": "float",
"visible": false
@ -150,6 +166,9 @@
"label": "Support line width",
"description": "Width of the printed support structures lines.",
"unit": "mm",
"min_value": 0.0,
"min_value_warning": 0.2,
"max_value_warning": 5.0,
"default": 0.4,
"type": "float",
"visible": false,
@ -198,6 +217,7 @@
"label": "Top Thickness",
"description": "This controls the thickness of the top layers. The number of solid layers printed is calculated from the layer thickness and this value. Having this value be a multiple of the layer thickness makes sense. And keep it nearto your wall thickness to make an evenly strong part.",
"unit": "mm",
"min_value": 0.0,
"default": 0.8,
"type": "float",
"visible": false,
@ -206,6 +226,7 @@
"top_layers": {
"label": "Top Layers",
"description": "This controls the amount of top layers.",
"min_value": 0,
"default": 8,
"type": "int",
"visible": false,
@ -217,6 +238,7 @@
"label": "Bottom Thickness",
"description": "This controls the thickness of the bottom layers. The number of solid layers printed is calculated from the layer thickness and this value. Having this value be a multiple of the layer thickness makes sense. And keep it near to your wall thickness to make an evenly strong part.",
"unit": "mm",
"min_value": 0.0,
"default": 0.8,
"type": "float",
"visible": false,
@ -225,6 +247,7 @@
"bottom_layers": {
"label": "Bottom Layers",
"description": "This controls the amount of bottom layers.",
"min_value": 0,
"default": 8,
"type": "int",
"visible": false,
@ -393,18 +416,18 @@
"description": "The temperature used for printing. Set at 0 to pre-heat yourself. For PLA a value of 210C is usually used.\nFor ABS a value of 230C or higher is required.",
"unit": "°C",
"type": "float",
"default": 220,
"min_value": 10,
"max_value": 340
"default": 210,
"min_value": 0,
"max_value_warning": 260
},
"material_bed_temperature": {
"label": "Bed Temperature",
"description": "The temperature used for the heated printer bed. Set at 0 to pre-heat it yourself.",
"unit": "°C",
"type": "float",
"default": 70,
"default": 60,
"min_value": 0,
"max_value": 340
"max_value_warning": 260
},
"material_diameter": {
"label": "Diameter",
@ -412,8 +435,8 @@
"unit": "mm",
"type": "float",
"default": 2.85,
"min_value": 0.4,
"max_value": 5.0
"min_value_warning": 0.4,
"max_value_warning": 3.5
},
"material_flow": {
"label": "Flow",
@ -422,7 +445,8 @@
"default": 100.0,
"type": "float",
"min_value": 5.0,
"max_value": 300.0
"min_value_warning": 50.0,
"max_value_warning": 150.0
}
}
},
@ -436,6 +460,8 @@
"description": "The speed at which printing happens. A well-adjusted Ultimaker can reach 150mm/s, but for good quality prints you will want to print slower. Printing speed depends on a lot of factors, so you will need to experiment with optimal settings for this.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"max_value_warning": 150.0,
"default": 50.0,
"children": {
@ -444,6 +470,8 @@
"description": "The speed at which infill parts are printed. Printing the infill faster can greatly reduce printing time, but this can negatively affect print quality.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"max_value_warning": 150.0,
"default": 50.0,
"visible": false
},
@ -452,6 +480,8 @@
"description": "The speed at which shell is printed. Printing the outer shell at a lower speed improves the final skin quality.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"max_value_warning": 150.0,
"default": 50.0,
"visible": false,
@ -461,6 +491,8 @@
"description": "The speed at which outer shell is printed. Printing the outer shell at a lower speed improves the final skin quality. However, having a large difference between the inner shell speed and the outer shell speed will effect quality in a negative way.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"max_value_warning": 150.0,
"default": 50.0,
"visible": false
},
@ -469,6 +501,8 @@
"description": "The speed at which all inner shells are printed. Printing the inner shell fasster than the outer shell will reduce printing time. It is good to set this in between the outer shell speed and the infill speed.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"max_value_warning": 150.0,
"default": 50.0,
"visible": false
}
@ -479,6 +513,8 @@
"description": "Speed at which top/bottom parts are printed. Printing the top/bottom faster can greatly reduce printing time, but this can negatively affect print quality.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"max_value_warning": 150.0,
"default": 50.0,
"visible": false
},
@ -487,6 +523,8 @@
"description": "The speed at which exterior support is printed. Printing exterior supports at higher speeds can greatly improve printing time. And the surface quality of exterior support is usually not important, so higher speeds can be used.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"max_value_warning": 150.0,
"default": 50.0,
"visible": false,
"inherit_function": "speed_wall_0",
@ -530,6 +568,8 @@
"description": "The speed at which travel moves are done. A well-built Ultimaker can reach speeds of 250mm/s. But some machines might have misaligned layers then.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"max_value_warning": 300.0,
"default": 150.0
},
"speed_layer_0": {
@ -537,6 +577,7 @@
"description": "The print speed for the bottom layer: You want to print the first layer slower so it sticks to the printer bed better.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"default": 15.0,
"visible": false,
@ -546,6 +587,7 @@
"description": "The speed at which the skirt and brim are printed. Normally this is done at the initial layer speed. But sometimes you want to print the skirt at a different speed.",
"unit": "mm/s",
"type": "float",
"min_value": 0.1,
"default": 15.0,
"visible": false
}
@ -555,6 +597,7 @@
"label": "Amount of Slower Layers",
"description": "The first few layers are printed slower then the rest of the object, this to get better adhesion to the printer bed and improve the overall success rate of prints. The speed is gradually increased over these layers. 4 layers of speed-up is generally right for most materials and printers.",
"type": "int",
"min_value": 0,
"default": 4,
"visible": false
}
@ -856,6 +899,8 @@
"description": "Fan speed used for the print cooling fan on the printer head.",
"unit": "%",
"type": "float",
"min_value": 0.0,
"max_value": 100.0,
"default": 100.0,
"visible": false,
"inherit_function": "100.0 if parent_value else 0.0",
@ -866,6 +911,8 @@
"description": "Normally the fan runs at the minimum fan speed. If the layer is slowed down due to minimum layer time, the fan speed adjusts between minimum and maximum fan speed.",
"unit": "%",
"type": "float",
"min_value": 0.0,
"max_value": 100.0,
"default": 100.0,
"visible": false
},
@ -874,6 +921,8 @@
"description": "Normally the fan runs at the minimum fan speed. If the layer is slowed down due to minimum layer time, the fan speed adjusts between minimum and maximum fan speed.",
"unit": "%",
"type": "float",
"min_value": 0.0,
"max_value": 100.0,
"default": 100.0,
"visible": false
}
@ -886,6 +935,7 @@
"description": "The height at which the fan is turned on completely. For the layers below this the fan speed is scaled linearly with the fan off for the first layer.",
"unit": "mm",
"type": "float",
"min_value": 0.0,
"default": 0.5,
"visible": false,
@ -894,6 +944,7 @@
"label": "Fan Full on at Layer",
"description": "The layer number at which the fan is turned on completely. For the layers below this the fan speed is scaled linearly with the fan off for the first layer.",
"type": "int",
"min_value": 0,
"default": 4,
"visible": false,
"inherit_function": "int((parent_value - layer_height_0 + 0.001) / layer_height)"
@ -905,6 +956,7 @@
"description": "The minimum time spent in a layer: Gives the layer time to cool down before the next one is put on top. If a layer would print in less time, then the printer will slow down to make sure it has spent at least this many seconds printing the layer.",
"unit": "sec",
"type": "float",
"min_value": 0.0,
"default": 5.0,
"visible": false
},
@ -913,6 +965,7 @@
"description": "The minimum time spent in a layer which will cause the fan to be at minmum speed. The fan speed increases linearly from maximal fan speed for layers taking minimal layer time to minimal fan speed for layers taking the time specified here.",
"unit": "sec",
"type": "float",
"min_value": 0.0,
"default": 10.0,
"visible": false
},
@ -1123,6 +1176,8 @@
"description": "The maximum angle of overhangs for which support will be added. With 0 degrees being vertical, and 90 degrees being horizontal. A smaller overhang angle leads to more support.",
"unit": "°",
"type": "float",
"min_value": 0.0,
"max_value": 90.0,
"default": 60.0,
"visible": false,
"active_if": {
@ -1135,6 +1190,8 @@
"description": "Distance of the support structure from the print, in the X/Y directions. 0.7mm typically gives a nice distance from the print so the support does not stick to the surface.",
"unit": "mm",
"type": "float",
"min_value": 0.0,
"max_value_warning": 10.0,
"default": 0.7,
"visible": false,
"active_if": {
@ -1147,6 +1204,8 @@
"description": "Distance from the top/bottom of the support to the print. A small gap here makes it easier to remove the support but makes the print a bit uglier. 0.15mm allows for easier separation of the support structure.",
"unit": "mm",
"type": "float",
"min_value": 0.0,
"max_value_warning": 10.0,
"default": 0.15,
"visible": false,
"active_if": {
@ -1158,6 +1217,8 @@
"label": "Top Distance",
"description": "Distance from the top of the support to the print.",
"unit": "mm",
"min_value": 0.0,
"max_value_warning": 10.0,
"default": 0.15,
"type": "float",
"visible": false
@ -1166,6 +1227,8 @@
"label": "Bottom Distance",
"description": "Distance from the print to the bottom of the support.",
"unit": "mm",
"min_value": 0.0,
"max_value_warning": 10.0,
"default": 0.15,
"type": "float",
"visible": false
@ -1255,6 +1318,8 @@
"description": "The angle of the rooftop of a tower. Larger angles mean more pointy towers. ",
"unit": "°",
"type": "int",
"min_value": 0,
"max_value": 90,
"default": 65,
"visible": false,
"active_if": {
@ -1294,6 +1359,8 @@
"description": "The amount of infill structure in the support, less infill gives weaker support which is easier to remove.",
"unit": "%",
"type": "float",
"min_value": 0.0,
"max_value": 100.0,
"default": 15,
"visible": false,
"active_if": {
@ -1306,6 +1373,7 @@
"description": "Distance between the printed support lines.",
"unit": "mm",
"type": "float",
"min_value": 0.0,
"default": 2.66,
"visible": false,
"active_if": {

View File

@ -19,7 +19,14 @@
"machine_nozzle_gantry_distance": { "default": 55 },
"machine_nozzle_offset_x_1": { "default": 18.0 },
"machine_nozzle_offset_y_1": { "default": 0.0 },
"machine_gcode_flavor": { "default": "RepRap (Marlin/Sprinter)" }
"machine_gcode_flavor": { "default": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": {
"default": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..."
},
"machine_end_gcode": {
"default": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning"
}
},
"categories": {

View File

@ -27,6 +27,10 @@
"capitalize": true,
"family": "Roboto"
},
"sidebar_save_to": {
"size": 1.0,
"family": "Roboto"
},
"timeslider_time": {
"size": 1.0,
"bold": true,
@ -105,12 +109,15 @@
"tooltip": [255, 225, 146, 255],
"save_button": [255, 255, 255, 255],
"save_button_border": [205, 202, 201, 255],
"save_button_inactive": [205, 202, 201, 255],
"save_button_active": [12, 159, 227, 255],
"save_button_active_hover": [34, 150, 190, 255],
"save_button_text": [35, 35, 35, 255],
"save_button_safe_to_text": [255, 255, 255, 255],
"save_button_estimated_text": [140, 144, 154, 255],
"save_button_estimated_text_background": [255, 255, 255, 255],
"save_button_printtime_text": [12, 169, 227, 255],
"save_button_background": [249, 249, 249, 255],
"message": [205, 202, 201, 255],
"message_text": [35, 35, 35, 255],
@ -153,7 +160,10 @@
"tooltip_margins": [1.0, 1.0],
"save_button_border": [0.06, 0.06],
"save_button_text_margin": [0.6, 0.6],
"save_button_slicing_bar": [0.0, 2.2],
"save_button_label_margin": [0.5, 0.5],
"save_button_save_to_button": [0.3, 2.7],
"message": [30.0, 5.0],
"message_close": [1.25, 1.25]

View File

@ -47,12 +47,12 @@ setup(name="Cura",
url="http://software.ultimaker.com/",
license="GNU AFFERO GENERAL PUBLIC LICENSE (AGPL)",
scripts=["cura_app.py"],
#windows=[{"script": "printer.py", "dest_name": "Cura"}],
console=[{"script": "cura_app.py"}],
windows=[{"script": "cura_app.py", "dest_name": "Cura", "icon_resources": [(1, "icons/cura.ico")]}],
#console=[{"script": "cura_app.py"}],
options={"py2exe": {"skip_archive": False, "includes": includes}})
print("Coping Cura plugins.")
shutil.copytree(os.path.dirname(UM.__file__) + "/../plugins", "dist/plugins")
shutil.copytree(os.path.dirname(UM.__file__) + "/../plugins", "dist/plugins", ignore = shutil.ignore_patterns("ConsoleLogger", "OBJWriter", "MLPWriter", "MLPReader"))
for path in os.listdir("plugins"):
shutil.copytree("plugins/" + path, "dist/plugins/" + path)
print("Coping resources.")