diff options
author | Simon Edwards <s.edwards@ultimaker.com> | 2016-05-23 10:49:31 +0300 |
---|---|---|
committer | Simon Edwards <s.edwards@ultimaker.com> | 2016-05-23 10:49:31 +0300 |
commit | 0b858f38781847f79dc85181d27addf3e9365212 (patch) | |
tree | 1ecf5cd36daff71a68e5484302129d0705323fd5 /cura/LayerDataBuilder.py | |
parent | d1f68143a4ca346f6441832127cca26d6c8fbaad (diff) |
Introduced a LayerDataBuilder. Made LayerData immutable just like its superclass. Fixed the layer view which broke.
Contributes to CURA-1504
Diffstat (limited to 'cura/LayerDataBuilder.py')
-rw-r--r-- | cura/LayerDataBuilder.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/cura/LayerDataBuilder.py b/cura/LayerDataBuilder.py new file mode 100644 index 0000000000..7e8e0e636b --- /dev/null +++ b/cura/LayerDataBuilder.py @@ -0,0 +1,72 @@ +# Copyright (c) 2015 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from .Layer import Layer +from .LayerPolygon import LayerPolygon +from UM.Mesh.MeshBuilder import MeshBuilder +from .LayerData import LayerData + +import numpy + +## Builder class for constructing a LayerData object +class LayerDataBuilder(MeshBuilder): + def __init__(self): + super().__init__() + self._layers = {} + self._element_counts = {} + + def addLayer(self, layer): + if layer not in self._layers: + self._layers[layer] = Layer(layer) + + def addPolygon(self, layer, polygon_type, data, line_width): + if layer not in self._layers: + self.addLayer(layer) + + p = LayerPolygon(self, polygon_type, data, line_width) + self._layers[layer].polygons.append(p) + + def getLayer(self, layer): + if layer in self._layers: + return self._layers[layer] + + def getLayers(self): + return self._layers + + def getElementCounts(self): + return self._element_counts + + def setLayerHeight(self, layer, height): + if layer not in self._layers: + self.addLayer(layer) + + self._layers[layer].setHeight(height) + + def setLayerThickness(self, layer, thickness): + if layer not in self._layers: + self.addLayer(layer) + + self._layers[layer].setThickness(thickness) + + def build(self): + vertex_count = 0 + for layer, data in self._layers.items(): + vertex_count += data.vertexCount() + + vertices = numpy.empty((vertex_count, 3), numpy.float32) + colors = numpy.empty((vertex_count, 4), numpy.float32) + indices = numpy.empty((vertex_count, 2), numpy.int32) + + offset = 0 + for layer, data in self._layers.items(): + offset = data.build(offset, vertices, colors, indices) + self._element_counts[layer] = data.elementCount + + self.addVertices(vertices) + self.addColors(colors) + self.addIndices(indices.flatten()) + + return LayerData(vertices=self.getVertices(), normals=self.getNormals(), indices=self.getIndices(), + colors=self.getColors(), uvs=self.getUVCoordinates(), file_name=self.getFileName(), + center_position=self.getCenterPosition(), layers=self._layers, + element_counts=self._element_counts) |