CURA-4605 Fix render issues when importing a GCode that has empty

layers. Also fix gaps between raft and the model.
This commit is contained in:
Diego Prado Gesto 2017-11-23 16:47:34 +01:00
parent 6b3e130349
commit 7bb82cf56f

View file

@ -143,6 +143,11 @@ class GCodeReader(MeshReader):
this_layer.polygons.append(this_poly) this_layer.polygons.append(this_poly)
return True return True
def _createEmptyLayer(self, layer_number):
self._layer_data_builder.addLayer(layer_number)
self._layer_data_builder.setLayerHeight(layer_number, 0)
self._layer_data_builder.setLayerThickness(layer_number, 0)
def _calculateLineWidth(self, current_point, previous_point, current_extrusion, previous_extrusion, layer_thickness): def _calculateLineWidth(self, current_point, previous_point, current_extrusion, previous_extrusion, layer_thickness):
# Area of the filament # Area of the filament
Af = (self._filament_diameter / 2) ** 2 * numpy.pi Af = (self._filament_diameter / 2) ** 2 * numpy.pi
@ -322,6 +327,9 @@ class GCodeReader(MeshReader):
current_position = self._position(0, 0, 0, 0, [0]) current_position = self._position(0, 0, 0, 0, [0])
current_path = [] current_path = []
min_layer_number = 0
negative_layers = 0
previous_layer = 0
for line in file: for line in file:
if self._cancelled: if self._cancelled:
@ -359,7 +367,23 @@ class GCodeReader(MeshReader):
layer_number = int(line[len(self._layer_keyword):]) layer_number = int(line[len(self._layer_keyword):])
self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])) self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0]))
current_path.clear() current_path.clear()
# When using a raft, the raft layers are stored as layers < 0, it mimics the same behavior
# as in ProcessSlicedLayersJob
if layer_number < min_layer_number:
min_layer_number = layer_number
if layer_number < 0:
layer_number += abs(min_layer_number)
negative_layers += 1
else:
layer_number += negative_layers
# In case there is a gap in the layer count, empty layers are created
for empty_layer in range(previous_layer + 1, layer_number):
self._createEmptyLayer(empty_layer)
self._layer_number = layer_number self._layer_number = layer_number
previous_layer = layer_number
except: except:
pass pass