Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Edwards <s.edwards@ultimaker.com>2016-05-23 10:49:31 +0300
committerSimon Edwards <s.edwards@ultimaker.com>2016-05-23 10:49:31 +0300
commit0b858f38781847f79dc85181d27addf3e9365212 (patch)
tree1ecf5cd36daff71a68e5484302129d0705323fd5 /cura/LayerDataBuilder.py
parentd1f68143a4ca346f6441832127cca26d6c8fbaad (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.py72
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)