chiark / gitweb /
Add proper head size code for scene planning. Fixed reset rotation.
authordaid303 <daid303@gmail.com>
Fri, 12 Apr 2013 17:51:02 +0000 (19:51 +0200)
committerdaid303 <daid303@gmail.com>
Fri, 12 Apr 2013 17:51:02 +0000 (19:51 +0200)
Cura/gui/sceneView.py
Cura/util/mesh.py
Cura/util/objectScene.py

index fe444be7c3b1a807dbc68aa69b4102d362344f26..b8c882a0cf21f1a01d6fbaa8f4c9552581f7ba10 100644 (file)
@@ -301,6 +301,7 @@ class SceneView(openglGui.glGuiPanel):
                self._objColors[3] = profile.getPreferenceColour('model_colour4')
                self._scene.setMachineSize(self._machineSize)
                self._scene.setSizeOffsets(numpy.array(profile.calculateObjectSizeOffsets(), numpy.float32))
+               self._scene.setHeadSize(profile.getPreferenceFloat('extruder_head_size_min_x'), profile.getPreferenceFloat('extruder_head_size_max_x'), profile.getPreferenceFloat('extruder_head_size_min_y'), profile.getPreferenceFloat('extruder_head_size_max_y'), profile.getPreferenceFloat('extruder_head_size_height'))
 
                if self._selectedObj is not None:
                        scale = self._selectedObj.getScale()
index c9d2236eed13268d339f41c95693649eff12758d..a82f8336ed4ee820c0f38c6a6c0f379684a82e7a 100644 (file)
@@ -131,10 +131,11 @@ class printableObject(object):
                self.applyMatrix(numpy.matrix([[x,0,0],[0,y,0],[0,0,z]], numpy.float64))
 
        def resetRotation(self):
-               x = numpy.linalg.norm(self.matrix[::,0].getA().flatten())
-               y = numpy.linalg.norm(self.matrix[::,1].getA().flatten())
-               z = numpy.linalg.norm(self.matrix[::,2].getA().flatten())
-               self.applyMatrix(numpy.matrix([[x,0,0],[0,y,0],[0,0,z]], numpy.float64))
+               x = numpy.linalg.norm(self._matrix[::,0].getA().flatten())
+               y = numpy.linalg.norm(self._matrix[::,1].getA().flatten())
+               z = numpy.linalg.norm(self._matrix[::,2].getA().flatten())
+               self._matrix = numpy.matrix([[x,0,0],[0,y,0],[0,0,z]], numpy.float64)
+               self.processMatrix()
 
        def layFlat(self):
                transformedVertexes = (numpy.matrix(self._meshList[0].vertexes, copy = False) * self._matrix).getA()
index 925d637b779c52840177dbfa472fba25981add48..c2944e2580d4f33f6687af49b9b143d4d4e30269 100644 (file)
@@ -7,12 +7,12 @@ class _objectOrder(object):
                self.todo = todo
 
 class _objectOrderFinder(object):
-       def __init__(self, scene, offset):
+       def __init__(self, scene, offset, leftToRight, frontToBack, gantryHeight):
                self._scene = scene
                self._offset = offset - numpy.array([0.1,0.1])
                self._objs = scene.objects()
-               self._leftToRight = True
-               self._frontToBack = True
+               self._leftToRight = leftToRight
+               self._frontToBack = frontToBack
                initialList = []
                for n in xrange(0, len(self._objs)):
                        if scene.checkPlatform(self._objs[n]):
@@ -48,10 +48,10 @@ class _objectOrderFinder(object):
                size = self._scene._objectList[idx].getSize()
 
                if self._leftToRight:
-                       if addPos[0] + addSize[0] / 2 + self._offset[0] <= pos[0] - size[0] / 2:
+                       if addPos[0] - addSize[0] / 2 - self._offset[0] <= pos[0] + size[0] / 2:
                                return False
                else:
-                       if addPos[0] - addSize[0] / 2 - self._offset[0] <= pos[0] + size[0] / 2:
+                       if addPos[0] + addSize[0] / 2 + self._offset[0] <= pos[0] - size[0] / 2:
                                return False
 
                if self._frontToBack:
@@ -69,6 +69,9 @@ class Scene(object):
                self._sizeOffsets = numpy.array([0.0,0.0], numpy.float32)
                self._machineSize = numpy.array([100,100,100], numpy.float32)
                self._headOffsets = numpy.array([18.0,18.0], numpy.float32)
+               self._leftToRight = False
+               self._frontToBack = True
+               self._gantryHeight = 60
 
        def setMachineSize(self, machineSize):
                self._machineSize = machineSize
@@ -76,6 +79,13 @@ class Scene(object):
        def setSizeOffsets(self, sizeOffsets):
                self._sizeOffsets = sizeOffsets
 
+       def setHeadSize(self, xMin, xMax, yMin, yMax, gantryHeight):
+               self._leftToRight = xMin < xMax
+               self._frontToBack = yMin < yMax
+               self._headOffsets[0] = min(xMin, xMax)
+               self._headOffsets[1] = min(yMin, yMax)
+               self._gantryHeight = gantryHeight
+
        def getObjectExtend(self):
                return self._sizeOffsets + self._headOffsets
 
@@ -126,7 +136,7 @@ class Scene(object):
                        obj.setPosition(obj.getPosition() + offset)
 
        def printOrder(self):
-               order = _objectOrderFinder(self, self._headOffsets + self._sizeOffsets).order
+               order = _objectOrderFinder(self, self._headOffsets + self._sizeOffsets, self._leftToRight, self._frontToBack, self._gantryHeight).order
                if order is None:
                        print "ODD! Cannot find out proper printing order!!!"
                        for obj in self._objectList: