chiark / gitweb /
Start of the "projectableObject" which contains multiple meshes, which represents...
authordaid303 <daid303@gmail.com>
Thu, 21 Mar 2013 08:32:33 +0000 (09:32 +0100)
committerdaid303 <daid303@gmail.com>
Thu, 21 Mar 2013 08:32:33 +0000 (09:32 +0100)
Cura/util/mesh.py
Cura/util/meshLoader.py

index 76b8369ee240529c827683d2ca0c3f03a37ec8d2..6bbaeefdc7cdab75a32bb1083f36e71ede457ed8 100644 (file)
@@ -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)
-
index 6bf2767dd8c8521277828bee1337295733db9b2a..2bfa5096d8c82ec87faaa5c84674a8dbbb2827c6 100644 (file)
@@ -24,4 +24,3 @@ def loadMesh(filename):
                return amf.amfModel().load(filename)
        print 'Error: Unknown model extension: %s' % (ext)
        return None
-