mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-10 08:17:49 -06:00

Certain polygons might be added to a layer later, so to prevent issues when using range drawing, we need to wait until we have all layer data then process that in the right order.
90 lines
2.3 KiB
Python
90 lines
2.3 KiB
Python
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.count)
|
|
|
|
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 count(self):
|
|
return self._end - self._begin
|