mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-08-06 05:23:58 -06:00
Merge branch 'master' of https://github.com/Ultimaker/Cura
This commit is contained in:
commit
f074760c7b
14 changed files with 196 additions and 35 deletions
133
CHANGES
Normal file
133
CHANGES
Normal file
|
@ -0,0 +1,133 @@
|
|||
Cura 15.06 Beta
|
||||
===============
|
||||
|
||||
This is the *Beta* version of Cura 15.06.
|
||||
|
||||
Cura 15.06 is a new release built from the ground up on a completely new
|
||||
framework called Uranium. This framework has been designed to make it easier to
|
||||
extend Cura with additional functionality as well as provide a cleaner UI.
|
||||
|
||||
Changes since 15.05.91
|
||||
----------------------
|
||||
|
||||
* There is now a working MacOSX version. Currently it supports OSX 10.7 and
|
||||
higher.
|
||||
* Fixed: Need to deselect before selecting a different object.
|
||||
* Fixed: Object can be moved on Z axis.
|
||||
* Fixed: Error values should be considered invalid values and will not trigger a
|
||||
slice.
|
||||
* Fixed: Text fields used a locale-aware validator while the underlying code did
|
||||
not.
|
||||
* Fixed: Text fields will trigger a slice on text change, not only after focus
|
||||
change/enter press.
|
||||
* Fixed: Rotate Tool snaps to incorrect value.
|
||||
* Fixed: Object Collision would only moved objects to the right.
|
||||
* Fixed: Object Collision would move the selected object when it should not.
|
||||
* Fixed: Camera panning now works correctly instead of doing nothing.
|
||||
* Fixed: Camera would flip around center point at maximum rotation.
|
||||
* Fixed: Build platform grid blocked view from below objects.
|
||||
* Fixed: Viewport on MacOSX with high-DPI screens was only taking 1/4th of the window
|
||||
|
||||
Changes since 15.05.90
|
||||
----------------------
|
||||
|
||||
* Fixed: Additional UI elements for tools and views not loading.
|
||||
* Fixed: Double click needed to change setting dialog page.
|
||||
* Fixed: Context menu entries (reload, center object, etc.) not working.
|
||||
* Fixed: "Open With" or passing files from command line not working.
|
||||
* Fixed: "Reload All" would not reload files.
|
||||
|
||||
In addition, a lot of work has gone into getting a usable Mac OSX version.
|
||||
|
||||
New Features
|
||||
------------
|
||||
|
||||
* Plugin based system
|
||||
The Uranium framework provides us with a plugin-based system
|
||||
that provides additional flexibility when extending Cura. Think
|
||||
of new views, tools, file formats, etc. This is probably the
|
||||
biggest new feature.
|
||||
* Improved UI
|
||||
The UI has received a complete overhaul.
|
||||
* Time-Quality Slider
|
||||
The 4 static quick print profiles have been replaced with
|
||||
a slider that should make it easier to find the right spot
|
||||
between print time and print quality.
|
||||
* More Settings
|
||||
The Advanced mode is now configurable and can show many
|
||||
additional settings that were previously not available, while at
|
||||
the same time not overwhelming new users with too many settings.
|
||||
Custom set of visible settings can be created by the user.
|
||||
* Support for high-DPI screens
|
||||
The refreshed UI has been designed with high-DPI screens in
|
||||
mind which should improve the experience of Cura on such
|
||||
devices.
|
||||
* Improved language support
|
||||
(Not yet available for the Beta release.)
|
||||
* Improved support structure generation
|
||||
The new version of the CuraEngine now features improved
|
||||
support generation algorithms and additional options for support
|
||||
structure generation.
|
||||
* Experimental Feature: Wire Printing
|
||||
Wire Printing has been added as an experimental new feature. It
|
||||
will print objects as a structure of lines. It can be enabled by
|
||||
from Advanced Mode -> Fixes -> Wire Printing.
|
||||
* Undo/Redo
|
||||
It is now possible to undo and redo most scene operations, like
|
||||
moving or rotating objects.
|
||||
|
||||
Features from earlier versions not (yet) in this release
|
||||
--------------------------------------------------------
|
||||
|
||||
* The All-at-once/One-at-a-time toggle is not available.
|
||||
We are working on an improved implementation of this mechanism
|
||||
but it will not be available for this release.
|
||||
* No dual extrusion features are available yet.
|
||||
We are working on a completely new workflow for this but this
|
||||
needs additional time.
|
||||
* “Lay Flat” has been removed.
|
||||
The existing implementation was unfortunately not salvageable.
|
||||
We will be looking into an improved implementation for this
|
||||
feature.
|
||||
* "Split Object Into Parts" has been removed.
|
||||
Due to the same reason as Lay Flat.
|
||||
* Support for AMF and DAE file formats has been removed.
|
||||
Both of these will be implemented as plugins in the future.
|
||||
* Support for directly loading a GCode file is not yet available.
|
||||
This will be implemented as a plugin in the future.
|
||||
* Support for PNG, JPG and other image formats has been removed.
|
||||
These can be supported by a plugin with an improved UI.
|
||||
* Support for loading Minecraft levels has been removed.
|
||||
This can be implemented as a plugin.
|
||||
* Windows XP support has been dropped.
|
||||
Microsoft is no longer supporting xp, so they no longer back
|
||||
port certain features that we require.
|
||||
* X-Ray view is missing.
|
||||
Will be implemented as a (you might have guessed it) plugin.
|
||||
* Infill display in the layer view is missing.
|
||||
Like several other features, the existing implementation of this
|
||||
functionality is not salvageable and will need to be reimplemented.
|
||||
|
||||
|
||||
Known Issues
|
||||
------------
|
||||
|
||||
For an up to date list of all known issues, please see
|
||||
https://github.com/Ultimaker/Cura/issues and
|
||||
https://github.com/Ultimaker/Uranium/issues .
|
||||
|
||||
* The application has no application icon yet.
|
||||
* The Windows version starts a console before starting the
|
||||
application. This is intentional for the beta and it will be
|
||||
removed for the final version.
|
||||
* Opening the machine preferences page will switch to the first
|
||||
available machine instead of keeping the current machine
|
||||
selected.
|
||||
* Some OBJ files are rendered as black objects due to missing
|
||||
normals.
|
||||
* The developer documentation for Uranium (available at
|
||||
http://software.ultimaker.com/uranium/index.html) is not yet
|
||||
complete.
|
||||
* Disabling plugins does not work correctly yet.
|
||||
* Unicorn occasionally still requires feeding. Do not feed it
|
||||
after midnight.
|
|
@ -62,7 +62,7 @@ class BuildVolume(SceneNode):
|
|||
self._grid_material.setUniformValue("u_gridColor1", Color(205, 202, 201, 255))
|
||||
|
||||
renderer.queueNode(self, material = self._material, mode = Renderer.RenderLines)
|
||||
renderer.queueNode(self, mesh = self._grid_mesh, material = self._grid_material)
|
||||
renderer.queueNode(self, mesh = self._grid_mesh, material = self._grid_material, force_single_sided = True)
|
||||
if self._disallowed_area_mesh:
|
||||
renderer.queueNode(self, mesh = self._disallowed_area_mesh, material = self._material)
|
||||
return True
|
||||
|
@ -99,10 +99,10 @@ class BuildVolume(SceneNode):
|
|||
|
||||
mb = MeshBuilder()
|
||||
mb.addQuad(
|
||||
Vector(minW, minH, maxD),
|
||||
Vector(maxW, minH, maxD),
|
||||
Vector(minW, minH, minD),
|
||||
Vector(maxW, minH, minD),
|
||||
Vector(minW, minH, minD)
|
||||
Vector(maxW, minH, maxD),
|
||||
Vector(minW, minH, maxD)
|
||||
)
|
||||
self._grid_mesh = mb.getData()
|
||||
for n in range(0, 6):
|
||||
|
|
|
@ -11,6 +11,7 @@ from UM.Math.Float import Float
|
|||
from UM.Math.Vector import Vector
|
||||
from UM.Math.AxisAlignedBox import AxisAlignedBox
|
||||
from UM.Application import Application
|
||||
from UM.Scene.Selection import Selection
|
||||
|
||||
from . import PlatformPhysicsOperation
|
||||
from . import ConvexHullJob
|
||||
|
@ -60,6 +61,8 @@ class PlatformPhysics:
|
|||
job = ConvexHullJob.ConvexHullJob(node)
|
||||
job.start()
|
||||
node._convex_hull_job = job
|
||||
elif Selection.isSelected(node):
|
||||
pass
|
||||
else:
|
||||
# Check for collisions between convex hulls
|
||||
for other_node in BreadthFirstIterator(root):
|
||||
|
@ -80,8 +83,8 @@ class PlatformPhysics:
|
|||
if overlap is None:
|
||||
continue
|
||||
|
||||
move_vector.setX(-overlap[0])
|
||||
move_vector.setZ(-overlap[1])
|
||||
move_vector.setX(overlap[0] * 1.1)
|
||||
move_vector.setZ(overlap[1] * 1.1)
|
||||
|
||||
if move_vector != Vector():
|
||||
op = PlatformPhysicsOperation.PlatformPhysicsOperation(node, move_vector)
|
||||
|
|
0
cura_app.py
Normal file → Executable file
0
cura_app.py
Normal file → Executable file
|
@ -110,6 +110,9 @@ class CuraEngineBackend(Backend):
|
|||
if not objects:
|
||||
return #No point in slicing an empty build plate
|
||||
|
||||
if kwargs.get("settings", self._settings).hasErrorValue():
|
||||
return #No slicing if we have error values since those are by definition illegal values.
|
||||
|
||||
self._slicing = True
|
||||
self.slicingStarted.emit()
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ from UM.View.View import View
|
|||
from UM.View.Renderer import Renderer
|
||||
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
||||
from UM.Resources import Resources
|
||||
from UM.Scene.Selection import Selection
|
||||
from UM.Math.Color import Color
|
||||
|
||||
## View used to display g-code paths.
|
||||
class LayerView(View):
|
||||
|
@ -23,9 +25,15 @@ class LayerView(View):
|
|||
self._material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, "basic.vert"), Resources.getPath(Resources.ShadersLocation, "vertexcolor.frag"))
|
||||
self._material.setUniformValue("u_color", [1.0, 0.0, 0.0, 1.0])
|
||||
|
||||
self._selection_material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, "basic.vert"), Resources.getPath(Resources.ShadersLocation, "color.frag"))
|
||||
self._selection_material.setUniformValue("u_color", Color(35, 35, 35, 128))
|
||||
|
||||
for node in DepthFirstIterator(scene.getRoot()):
|
||||
if not node.render(renderer):
|
||||
if node.getMeshData() and node.isVisible():
|
||||
if Selection.isSelected(node):
|
||||
renderer.queueNode(node, material = self._selection_material, transparent = True)
|
||||
|
||||
try:
|
||||
layer_data = node.getMeshData().layerData
|
||||
except AttributeError:
|
||||
|
@ -43,9 +51,9 @@ class LayerView(View):
|
|||
if layer >= end_layer:
|
||||
break
|
||||
|
||||
renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines, start = start, end = end)
|
||||
renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines, start = start, end = end, overlay = True)
|
||||
else:
|
||||
renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines)
|
||||
renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines, overlay = True)
|
||||
|
||||
def setLayer(self, value):
|
||||
self._layer_percentage = value
|
||||
|
|
|
@ -248,7 +248,10 @@ class PrinterConnection(SignalEmitter):
|
|||
|
||||
if self._serial is not None:
|
||||
self.setIsConnected(False)
|
||||
self._listen_thread.join()
|
||||
try:
|
||||
self._listen_thread.join()
|
||||
except:
|
||||
pass
|
||||
self._serial.close()
|
||||
|
||||
self._serial = None
|
||||
|
|
|
@ -40,7 +40,8 @@ class USBPrinterManager(QObject, SignalEmitter, Extension):
|
|||
self._error_message = ""
|
||||
|
||||
## Add menu item to top menu of the application.
|
||||
self.addMenuItem(i18n_catalog.i18n("Update Firmware"), self.updateAllFirmware)
|
||||
self.setMenuName("Firmware")
|
||||
self.addMenuItem(i18n_catalog.i18n("Update"), self.updateAllFirmware)
|
||||
|
||||
pyqtError = pyqtSignal(str, arguments = ["amount"])
|
||||
processingProgress = pyqtSignal(float, arguments = ["amount"])
|
||||
|
|
|
@ -144,23 +144,6 @@ UM.MainWindow {
|
|||
}
|
||||
}
|
||||
|
||||
Sidebar {
|
||||
id: sidebar;
|
||||
|
||||
anchors {
|
||||
top: parent.top;
|
||||
bottom: parent.bottom;
|
||||
right: parent.right;
|
||||
rightMargin: UM.Theme.sizes.window_margin.width;
|
||||
}
|
||||
|
||||
width: UM.Theme.sizes.panel.width;
|
||||
|
||||
addMachineAction: actions.addMachine;
|
||||
configureMachinesAction: actions.configureMachines;
|
||||
saveAction: actions.save;
|
||||
}
|
||||
|
||||
UM.MessageStack {
|
||||
anchors {
|
||||
left: toolbar.right;
|
||||
|
@ -265,6 +248,23 @@ UM.MainWindow {
|
|||
bottomMargin: UM.Theme.sizes.window_margin.height;
|
||||
}
|
||||
}
|
||||
|
||||
Sidebar {
|
||||
id: sidebar;
|
||||
|
||||
anchors {
|
||||
top: parent.top;
|
||||
bottom: parent.bottom;
|
||||
right: parent.right;
|
||||
rightMargin: UM.Theme.sizes.window_margin.width;
|
||||
}
|
||||
|
||||
width: UM.Theme.sizes.panel.width;
|
||||
|
||||
addMachineAction: actions.addMachine;
|
||||
configureMachinesAction: actions.configureMachines;
|
||||
saveAction: actions.save;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,10 +16,12 @@ UM.AngledCornerRectangle {
|
|||
property alias saveAction: saveButton.saveAction;
|
||||
|
||||
cornerSize: UM.Theme.sizes.default_margin.width;
|
||||
|
||||
|
||||
color: UM.Theme.colors.sidebar;
|
||||
|
||||
function showTooltip(item, position, text) {
|
||||
tooltip.text = text;
|
||||
position = item.mapToItem(base, position.x, position.y);
|
||||
position = item.mapToItem(base, position.x, position.y / 2);
|
||||
tooltip.show(position);
|
||||
}
|
||||
|
||||
|
|
|
@ -22,10 +22,10 @@ Rectangle {
|
|||
|
||||
function show(position) {
|
||||
if(position.y + base.height > parent.height) {
|
||||
x = position.x;
|
||||
x = position.x - base.width;
|
||||
y = parent.height - base.height;
|
||||
} else {
|
||||
x = position.x;
|
||||
x = position.x - base.width;
|
||||
y = position.y;
|
||||
}
|
||||
base.opacity = 1;
|
||||
|
|
|
@ -41,8 +41,9 @@
|
|||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default": 0.1,
|
||||
"min_value": 0.06,
|
||||
"max_value": 2.0,
|
||||
"min_value": 0.00001,
|
||||
"min_value_warning": 0.04,
|
||||
"max_value_warning": 2.0,
|
||||
"always_visible": true,
|
||||
"children": {
|
||||
"layer_height_0": {
|
||||
|
@ -51,8 +52,9 @@
|
|||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default": 0.3,
|
||||
"min_value": 0.06,
|
||||
"max_value": 2.0,
|
||||
"min_value": 0.0,
|
||||
"min_value_warning": 0.04,
|
||||
"max_value_warning": 2.0,
|
||||
"visible": false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ QtObject {
|
|||
anchors.horizontalCenter: parent.horizontalCenter;
|
||||
text: control.text;
|
||||
font: UM.Theme.fonts.button_tooltip;
|
||||
color: UM.Theme.colors.button_tooltip_text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -121,6 +122,8 @@ QtObject {
|
|||
Image {
|
||||
anchors.verticalCenter: parent.verticalCenter;
|
||||
source: control.iconSource;
|
||||
width: UM.Theme.sizes.section_icon.width;
|
||||
height: UM.Theme.sizes.section_icon.height;
|
||||
}
|
||||
|
||||
Label {
|
||||
|
|
|
@ -44,6 +44,8 @@
|
|||
},
|
||||
|
||||
"colors": {
|
||||
"sidebar": [255, 255, 255, 255],
|
||||
|
||||
"primary": [12, 169, 227, 255],
|
||||
"primary_hover": [34, 150, 190, 255],
|
||||
"primary_text": [255, 255, 255, 255],
|
||||
|
@ -61,6 +63,7 @@
|
|||
"button_active_hover": [34, 150, 190, 255],
|
||||
"button_text": [255, 255, 255, 255],
|
||||
"button_disabled": [245, 245, 245, 255],
|
||||
"button_tooltip_text": [35, 35, 35, 255],
|
||||
|
||||
"scrollbar_background": [245, 245, 245, 255],
|
||||
"scrollbar_handle": [205, 202, 201, 255],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue