LayerData.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # Copyright (c) 2015 Ultimaker B.V.
  2. # Cura is released under the terms of the AGPLv3 or higher.
  3. from .Layer import Layer
  4. from .LayerPolygon import LayerPolygon
  5. from UM.Mesh.MeshData import MeshData
  6. import numpy
  7. class LayerData(MeshData):
  8. def __init__(self):
  9. super().__init__()
  10. self._layers = {}
  11. self._element_counts = {}
  12. def addLayer(self, layer):
  13. if layer not in self._layers:
  14. self._layers[layer] = Layer(layer)
  15. def addPolygon(self, layer, polygon_type, data, line_width):
  16. if layer not in self._layers:
  17. self.addLayer(layer)
  18. p = LayerPolygon(self, polygon_type, data, line_width)
  19. self._layers[layer].polygons.append(p)
  20. def getLayer(self, layer):
  21. if layer in self._layers:
  22. return self._layers[layer]
  23. def getLayers(self):
  24. return self._layers
  25. def getElementCounts(self):
  26. return self._element_counts
  27. def setLayerHeight(self, layer, height):
  28. if layer not in self._layers:
  29. self.addLayer(layer)
  30. self._layers[layer].setHeight(height)
  31. def setLayerThickness(self, layer, thickness):
  32. if layer not in self._layers:
  33. self.addLayer(layer)
  34. self._layers[layer].setThickness(thickness)
  35. def build(self):
  36. vertex_count = 0
  37. for layer, data in self._layers.items():
  38. vertex_count += data.vertexCount()
  39. vertices = numpy.empty((vertex_count, 3), numpy.float32)
  40. colors = numpy.empty((vertex_count, 4), numpy.float32)
  41. indices = numpy.empty((vertex_count, 2), numpy.int32)
  42. offset = 0
  43. for layer, data in self._layers.items():
  44. offset = data.build(offset, vertices, colors, indices)
  45. self._element_counts[layer] = data.elementCount
  46. self.clear()
  47. self.addVertices(vertices)
  48. self.addColors(colors)
  49. self.addIndices(indices.flatten())