LayerData.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from UM.Mesh.MeshData import MeshData
  2. from UM.Math.Color import Color
  3. import numpy
  4. import math
  5. class LayerData(MeshData):
  6. def __init__(self):
  7. super().__init__()
  8. self._layers = {}
  9. self._element_counts = {}
  10. def addPolygon(self, layer, type, data):
  11. if layer not in self._layers:
  12. self._layers[layer] = []
  13. p = Polygon(self, type, data)
  14. self._layers[layer].append(p)
  15. def getLayers(self):
  16. return self._layers
  17. def getElementCounts(self):
  18. return self._element_counts
  19. def build(self):
  20. for layer, data in self._layers.items():
  21. if layer not in self._element_counts:
  22. self._element_counts[layer] = []
  23. for polygon in data:
  24. polygon.build()
  25. self._element_counts[layer].append(polygon.elementCount)
  26. class Polygon():
  27. NoneType = 0
  28. Inset0Type = 1
  29. InsetXType = 2
  30. SkinType = 3
  31. SupportType = 4
  32. SkirtType = 5
  33. def __init__(self, mesh, type, data):
  34. super().__init__()
  35. self._mesh = mesh
  36. self._type = type
  37. self._data = data
  38. def build(self):
  39. self._begin = self._mesh._vertex_count
  40. self._mesh.addVertices(self._data)
  41. self._end = self._begin + len(self._data) - 1
  42. color = None
  43. if self._type == self.Inset0Type:
  44. color = [1, 0, 0, 1]
  45. elif self._type == self.InsetXType:
  46. color = [0, 1, 0, 1]
  47. elif self._type == self.SkinType:
  48. color = [1, 1, 0, 1]
  49. elif self._type == self.SupportType:
  50. color = [0, 1, 1, 1]
  51. elif self._type == self.SkirtType:
  52. color = [0, 1, 1, 1]
  53. else:
  54. color = [1, 1, 1, 1]
  55. colors = [color for i in range(len(self._data))]
  56. self._mesh.addColors(numpy.array(colors, dtype=numpy.float32))
  57. indices = []
  58. for i in range(self._begin, self._end):
  59. indices.append(i)
  60. indices.append(i + 1)
  61. indices.append(self._end)
  62. indices.append(self._begin)
  63. self._mesh.addIndices(numpy.array(indices, dtype=numpy.int32))
  64. @property
  65. def type(self):
  66. return self._type
  67. @property
  68. def data(self):
  69. return self._data
  70. @property
  71. def elementCount(self):
  72. return (self._end - self._begin) * 2 #The range of vertices multiplied by 2 since each vertex is used twice