123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- from UM.Mesh.MeshData import MeshData
- from UM.Math.Color import Color
- import numpy
- import math
- class LayerData(MeshData):
- def __init__(self):
- super().__init__()
- self._layers = {}
- self._element_counts = {}
- def addPolygon(self, layer, type, data):
- if layer not in self._layers:
- self._layers[layer] = []
- p = Polygon(self, type, data)
- self._layers[layer].append(p)
- def getLayers(self):
- return self._layers
- def getElementCounts(self):
- return self._element_counts
- def build(self):
- for layer, data in self._layers.items():
- if layer not in self._element_counts:
- self._element_counts[layer] = []
- for polygon in data:
- polygon.build()
- self._element_counts[layer].append(polygon.elementCount)
- class Polygon():
- NoneType = 0
- Inset0Type = 1
- InsetXType = 2
- SkinType = 3
- SupportType = 4
- SkirtType = 5
- def __init__(self, mesh, type, data):
- super().__init__()
- self._mesh = mesh
- self._type = type
- self._data = data
- def build(self):
- self._begin = self._mesh._vertex_count
- self._mesh.addVertices(self._data)
- self._end = self._begin + len(self._data) - 1
- color = None
- if self._type == self.Inset0Type:
- color = [1, 0, 0, 1]
- elif self._type == self.InsetXType:
- color = [0, 1, 0, 1]
- elif self._type == self.SkinType:
- color = [1, 1, 0, 1]
- elif self._type == self.SupportType:
- color = [0, 1, 1, 1]
- elif self._type == self.SkirtType:
- color = [0, 1, 1, 1]
- else:
- color = [1, 1, 1, 1]
- colors = [color for i in range(len(self._data))]
- self._mesh.addColors(numpy.array(colors, dtype=numpy.float32))
- indices = []
- for i in range(self._begin, self._end):
- indices.append(i)
- indices.append(i + 1)
- indices.append(self._end)
- indices.append(self._begin)
- self._mesh.addIndices(numpy.array(indices, dtype=numpy.int32))
- @property
- def type(self):
- return self._type
- @property
- def data(self):
- return self._data
- @property
- def elementCount(self):
- return (self._end - self._begin) * 2 #The range of vertices multiplied by 2 since each vertex is used twice
|