123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # 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)
|