diff --git a/cura.desktop b/cura.desktop index 8c54ffa4c3..edd482eed5 100644 --- a/cura.desktop +++ b/cura.desktop @@ -8,6 +8,6 @@ TryExec=/usr/bin/cura_app.py Icon=/usr/share/cura/resources/images/cura-icon.png Terminal=false Type=Application -MimeType=application/sla +MimeType=application/sla;image/bmp;image/gif;image/jpeg;image/png Categories=Graphics; Keywords=3D;Printing; diff --git a/cura/ConvexHullNode.py b/cura/ConvexHullNode.py index 9932a19cfa..b9cf925eef 100644 --- a/cura/ConvexHullNode.py +++ b/cura/ConvexHullNode.py @@ -5,7 +5,7 @@ from UM.Scene.SceneNode import SceneNode from UM.Resources import Resources from UM.Math.Color import Color from UM.Math.Vector import Vector -from UM.Mesh.MeshData import MeshData +from UM.Mesh.MeshBuilder import MeshBuilder #To create a mesh to display the convex hull with. from UM.View.GL.OpenGL import OpenGL @@ -25,6 +25,7 @@ class ConvexHullNode(SceneNode): self._inherit_scale = False self._color = Color(35, 35, 35, 128) + self._mesh_height = 0.1 #The y-coordinate of the convex hull mesh. Must not be 0, to prevent z-fighting. self._node = node self._node.transformationChanged.connect(self._onNodePositionChanged) @@ -43,22 +44,19 @@ class ConvexHullNode(SceneNode): self._convex_hull_head_mesh = self.createHullMesh(convex_hull_head.getPoints()) def createHullMesh(self, hull_points): - mesh = MeshData() - if len(hull_points) > 3: - center = (hull_points.min(0) + hull_points.max(0)) / 2.0 - mesh.addVertex(center[0], -0.1, center[1]) - else: + #Input checking. + if len(hull_points) < 3: return None - for point in hull_points: - mesh.addVertex(point[0], -0.1, point[1]) - indices = [] - for i in range(len(hull_points) - 1): - indices.append([0, i + 1, i + 2]) - indices.append([0, mesh.getVertexCount() - 1, 1]) + mesh_builder = MeshBuilder() #Create a mesh using the mesh builder. + point_first = Vector(hull_points[0][0], self._mesh_height, hull_points[0][1]) + point_previous = Vector(hull_points[1][0], self._mesh_height, hull_points[1][1]) + for point in hull_points[2:]: #Add the faces in the order of a triangle fan. + point_new = Vector(point[0], self._mesh_height, point[1]) + mesh_builder.addFace(point_first, point_previous, point_new, color = self._color) + point_previous = point_new #Prepare point_previous for the next triangle. - mesh.addIndices(numpy.array(indices, numpy.int32)) - return mesh + return mesh_builder.getData() def getWatchedNode(self): return self._node diff --git a/plugins/CuraEngineBackend/Cura_pb2.py b/plugins/CuraEngineBackend/Cura_pb2.py index ad977b0c93..f72423f60f 100644 --- a/plugins/CuraEngineBackend/Cura_pb2.py +++ b/plugins/CuraEngineBackend/Cura_pb2.py @@ -19,7 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor( name='Cura.proto', package='cura.proto', syntax='proto3', - serialized_pb=_b('\n\nCura.proto\x12\ncura.proto\"X\n\nObjectList\x12#\n\x07objects\x18\x01 \x03(\x0b\x32\x12.cura.proto.Object\x12%\n\x08settings\x18\x02 \x03(\x0b\x32\x13.cura.proto.Setting\"5\n\x05Slice\x12,\n\x0cobject_lists\x18\x01 \x03(\x0b\x32\x16.cura.proto.ObjectList\"o\n\x06Object\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x10\n\x08vertices\x18\x02 \x01(\x0c\x12\x0f\n\x07normals\x18\x03 \x01(\x0c\x12\x0f\n\x07indices\x18\x04 \x01(\x0c\x12%\n\x08settings\x18\x05 \x03(\x0b\x32\x13.cura.proto.Setting\"\x1a\n\x08Progress\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x02\"=\n\x10SlicedObjectList\x12)\n\x07objects\x18\x01 \x03(\x0b\x32\x18.cura.proto.SlicedObject\"=\n\x0cSlicedObject\x12\n\n\x02id\x18\x01 \x01(\x03\x12!\n\x06layers\x18\x02 \x03(\x0b\x32\x11.cura.proto.Layer\"]\n\x05Layer\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0e\n\x06height\x18\x02 \x01(\x02\x12\x11\n\tthickness\x18\x03 \x01(\x02\x12%\n\x08polygons\x18\x04 \x03(\x0b\x32\x13.cura.proto.Polygon\"\x8e\x02\n\x07Polygon\x12&\n\x04type\x18\x01 \x01(\x0e\x32\x18.cura.proto.Polygon.Type\x12\x0e\n\x06points\x18\x02 \x01(\x0c\x12\x12\n\nline_width\x18\x03 \x01(\x02\"\xb6\x01\n\x04Type\x12\x0c\n\x08NoneType\x10\x00\x12\x0e\n\nInset0Type\x10\x01\x12\x0e\n\nInsetXType\x10\x02\x12\x0c\n\x08SkinType\x10\x03\x12\x0f\n\x0bSupportType\x10\x04\x12\r\n\tSkirtType\x10\x05\x12\x0e\n\nInfillType\x10\x06\x12\x15\n\x11SupportInfillType\x10\x07\x12\x13\n\x0fMoveCombingType\x10\x08\x12\x16\n\x12MoveRetractionType\x10\t\"&\n\nGCodeLayer\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"D\n\x0fObjectPrintTime\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04time\x18\x02 \x01(\x02\x12\x17\n\x0fmaterial_amount\x18\x03 \x01(\x02\"4\n\x0bSettingList\x12%\n\x08settings\x18\x01 \x03(\x0b\x32\x13.cura.proto.Setting\"&\n\x07Setting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x1b\n\x0bGCodePrefix\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x62\x06proto3') + serialized_pb=_b('\n\nCura.proto\x12\ncura.proto\"X\n\nObjectList\x12#\n\x07objects\x18\x01 \x03(\x0b\x32\x12.cura.proto.Object\x12%\n\x08settings\x18\x02 \x03(\x0b\x32\x13.cura.proto.Setting\"5\n\x05Slice\x12,\n\x0cobject_lists\x18\x01 \x03(\x0b\x32\x16.cura.proto.ObjectList\"o\n\x06Object\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x10\n\x08vertices\x18\x02 \x01(\x0c\x12\x0f\n\x07normals\x18\x03 \x01(\x0c\x12\x0f\n\x07indices\x18\x04 \x01(\x0c\x12%\n\x08settings\x18\x05 \x03(\x0b\x32\x13.cura.proto.Setting\"\x1a\n\x08Progress\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x02\"=\n\x10SlicedObjectList\x12)\n\x07objects\x18\x01 \x03(\x0b\x32\x18.cura.proto.SlicedObject\"=\n\x0cSlicedObject\x12\n\n\x02id\x18\x01 \x01(\x03\x12!\n\x06layers\x18\x02 \x03(\x0b\x32\x11.cura.proto.Layer\"]\n\x05Layer\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0e\n\x06height\x18\x02 \x01(\x02\x12\x11\n\tthickness\x18\x03 \x01(\x02\x12%\n\x08polygons\x18\x04 \x03(\x0b\x32\x13.cura.proto.Polygon\"\x8e\x02\n\x07Polygon\x12&\n\x04type\x18\x01 \x01(\x0e\x32\x18.cura.proto.Polygon.Type\x12\x0e\n\x06points\x18\x02 \x01(\x0c\x12\x12\n\nline_width\x18\x03 \x01(\x02\"\xb6\x01\n\x04Type\x12\x0c\n\x08NoneType\x10\x00\x12\x0e\n\nInset0Type\x10\x01\x12\x0e\n\nInsetXType\x10\x02\x12\x0c\n\x08SkinType\x10\x03\x12\x0f\n\x0bSupportType\x10\x04\x12\r\n\tSkirtType\x10\x05\x12\x0e\n\nInfillType\x10\x06\x12\x15\n\x11SupportInfillType\x10\x07\x12\x13\n\x0fMoveCombingType\x10\x08\x12\x16\n\x12MoveRetractionType\x10\t\"&\n\nGCodeLayer\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"D\n\x0fObjectPrintTime\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04time\x18\x02 \x01(\x02\x12\x17\n\x0fmaterial_amount\x18\x03 \x01(\x02\"4\n\x0bSettingList\x12%\n\x08settings\x18\x01 \x03(\x0b\x32\x13.cura.proto.Setting\"&\n\x07Setting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x1b\n\x0bGCodePrefix\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x11\n\x0fSlicingFinishedb\x06proto3') ) _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -588,6 +588,30 @@ _GCODEPREFIX = _descriptor.Descriptor( serialized_end=1037, ) + +_SLICINGFINISHED = _descriptor.Descriptor( + name='SlicingFinished', + full_name='cura.proto.SlicingFinished', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1039, + serialized_end=1056, +) + _OBJECTLIST.fields_by_name['objects'].message_type = _OBJECT _OBJECTLIST.fields_by_name['settings'].message_type = _SETTING _SLICE.fields_by_name['object_lists'].message_type = _OBJECTLIST @@ -611,6 +635,7 @@ DESCRIPTOR.message_types_by_name['ObjectPrintTime'] = _OBJECTPRINTTIME DESCRIPTOR.message_types_by_name['SettingList'] = _SETTINGLIST DESCRIPTOR.message_types_by_name['Setting'] = _SETTING DESCRIPTOR.message_types_by_name['GCodePrefix'] = _GCODEPREFIX +DESCRIPTOR.message_types_by_name['SlicingFinished'] = _SLICINGFINISHED ObjectList = _reflection.GeneratedProtocolMessageType('ObjectList', (_message.Message,), dict( DESCRIPTOR = _OBJECTLIST, @@ -703,5 +728,12 @@ GCodePrefix = _reflection.GeneratedProtocolMessageType('GCodePrefix', (_message. )) _sym_db.RegisterMessage(GCodePrefix) +SlicingFinished = _reflection.GeneratedProtocolMessageType('SlicingFinished', (_message.Message,), dict( + DESCRIPTOR = _SLICINGFINISHED, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:cura.proto.SlicingFinished) + )) +_sym_db.RegisterMessage(SlicingFinished) + # @@protoc_insertion_point(module_scope) diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index 13c01ee4a7..1d81fe795c 100644 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -59,7 +59,7 @@ class LayerView(View): renderer = self.getRenderer() if not self._selection_shader: - self._selection_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "default.shader")) + self._selection_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "color.shader")) self._selection_shader.setUniformValue("u_color", Color(32, 32, 32, 128)) for node in DepthFirstIterator(scene.getRoot()): diff --git a/plugins/LegacyProfileReader/DictionaryOfDoom.json b/plugins/LegacyProfileReader/DictionaryOfDoom.json index 7be972ac84..f07bd61279 100644 --- a/plugins/LegacyProfileReader/DictionaryOfDoom.json +++ b/plugins/LegacyProfileReader/DictionaryOfDoom.json @@ -3,6 +3,7 @@ "target_version": 1, "translation": { + "machine_nozzle_size": "nozzle_size", "line_width": "wall_thickness if (spiralize == \"True\" or simple_mode == \"True\") else (nozzle_size if (float(wall_thickness) < 0.01) else (wall_thickness if (float(wall_thickness) < float(nozzle_size)) else (nozzle_size if ((int(float(wall_thickness) / (float(nozzle_size) - 0.0001))) == 0) else ((float(wall_thickness) / ((int(float(wall_thickness) / (float(nozzle_size) - 0.0001))) + 1)) if ((float(wall_thickness) / (int(float(wall_thickness) / (float(nozzle_size) - 0.0001)))) > float(nozzle_size) * 1.5) else ((float(wall_thickness) / (int(float(wall_thickness) / (float(nozzle_size) - 0.0001)))))))))", "layer_height": "layer_height", "layer_height_0": "bottom_thickness", diff --git a/resources/machines/bq_hephestos_2.json b/resources/machines/bq_hephestos_2.json index 07be8d2467..ebe572808c 100644 --- a/resources/machines/bq_hephestos_2.json +++ b/resources/machines/bq_hephestos_2.json @@ -33,7 +33,7 @@ "default": "RepRap" }, "machine_platform_offset": { - "default": [-6, 1320, 0] + "default": [6, 1320, 0] } }, "overrides": { diff --git a/resources/meshes/bq_hephestos_2_platform.stl b/resources/meshes/bq_hephestos_2_platform.stl index 3a3a89eba4..1c30a2fddd 100644 Binary files a/resources/meshes/bq_hephestos_2_platform.stl and b/resources/meshes/bq_hephestos_2_platform.stl differ