From 6005a444e0c7730e596ccd82a23dbc6ee07e0609 Mon Sep 17 00:00:00 2001 From: daid303 Date: Thu, 21 Mar 2013 09:32:33 +0100 Subject: [PATCH] Start of the "projectableObject" which contains multiple meshes, which represents a single printable thing with different colors/settings. --- Cura/util/mesh.py | 59 +++++++++++++++++++++++++++-------------- Cura/util/meshLoader.py | 1 - 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/Cura/util/mesh.py b/Cura/util/mesh.py index 76b8369e..6bbaeefd 100644 --- a/Cura/util/mesh.py +++ b/Cura/util/mesh.py @@ -8,13 +8,50 @@ numpy.seterr(all='ignore') from Cura.util import util3d +class printableObject(object): + def __init__(self): + self._meshList = [] + self._position = [0.0, 0.0] + self._matrix = numpy.matrix([[1,0,0],[0,1,0],[0,0,1]], numpy.float64) + + def _addMesh(self): + m = mesh() + self._meshList.append(m) + return m + + def processMatrix(self): + self.transformedMin = numpy.array([999999999999,999999999999,999999999999], numpy.float64) + self.transformedMax = numpy.array([-999999999999,-999999999999,-999999999999], numpy.float64) + self.boundaryCircleSize = 0 + + for m in self._meshList: + transformedVertexes = (numpy.matrix(m.vertexes, copy = False) * self.matrix).getA() + transformedMin = transformedVertexes.min(0) + transformedMax = transformedVertexes.max(0) + for n in xrange(0, 3): + self.transformedMin[n] = min(transformedMin[n], self.transformedMin[n]) + self.transformedMax[n] = min(transformedMax[n], self.transformedMax[n]) + + #Calculate the boundary circle + transformedSize = transformedMax - transformedMin + center = transformedMin + transformedSize / 2.0 + boundaryCircleSize = round(math.sqrt(numpy.max(((transformedVertexes[::,0] - center[0]) * (transformedVertexes[::,0] - center[0])) + ((transformedVertexes[::,1] - center[1]) * (transformedVertexes[::,1] - center[1])) + ((transformedVertexes[::,2] - center[2]) * (transformedVertexes[::,2] - center[2])))), 3) + self.boundaryCircleSize = max(self.boundaryCircleSize, boundaryCircleSize) + self.transformedSize = self.transformedMax - self.transformedMin + + def getMaximum(self): + return self.transformedMax + def getMinimum(self): + return self.transformedMin + def getSize(self): + return self.transformedSize + class mesh(object): def __init__(self): self.vertexes = None - self.matrix = numpy.matrix([[1,0,0], [0,1,0], [0,0,1]], numpy.float32); self.vertexCount = 0 - def addVertex(self, x, y, z): + def _addVertex(self, x, y, z): n = self.vertexCount self.vertexes[n][0] = x self.vertexes[n][1] = y @@ -31,23 +68,6 @@ class mesh(object): self.processMatrix() self._calculateNormals() - def processMatrix(self): - transformedVertexes = (numpy.matrix(self.vertexes, copy = False) * self.matrix).getA() - self.transformedMin = transformedVertexes.min(0) - self.transformedMax = transformedVertexes.max(0) - self.transformedSize = self.transformedMax - self.transformedMin - - #Calculate the boundary circle - center = self.transformedMin + self.transformedSize / 2.0 - self.boundaryCircleSize = round(math.sqrt(numpy.max(((transformedVertexes[::,0] - center[0]) * (transformedVertexes[::,0] - center[0])) + ((transformedVertexes[::,1] - center[1]) * (transformedVertexes[::,1] - center[1])) + ((transformedVertexes[::,2] - center[2]) * (transformedVertexes[::,2] - center[2])))), 3) - - def getMaximum(self): - return self.transformedMax - def getMinimum(self): - return self.transformedMin - def getSize(self): - return self.transformedSize - def _calculateNormals(self): #Calculate the normals tris = self.vertexes.reshape(self.vertexCount / 3, 3, 3) @@ -148,4 +168,3 @@ class mesh(object): if f1 not in doneSet: todoList.append(f1) doneSet.add(f1) - diff --git a/Cura/util/meshLoader.py b/Cura/util/meshLoader.py index 6bf2767d..2bfa5096 100644 --- a/Cura/util/meshLoader.py +++ b/Cura/util/meshLoader.py @@ -24,4 +24,3 @@ def loadMesh(filename): return amf.amfModel().load(filename) print 'Error: Unknown model extension: %s' % (ext) return None - -- 2.30.2