From: daid303 Date: Fri, 12 Apr 2013 17:51:02 +0000 (+0200) Subject: Add proper head size code for scene planning. Fixed reset rotation. X-Git-Tag: 13.05~103 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=dd971fcef39a1ebaa9b26add9be485b1d84f43c6;p=cura.git Add proper head size code for scene planning. Fixed reset rotation. --- diff --git a/Cura/gui/sceneView.py b/Cura/gui/sceneView.py index fe444be7..b8c882a0 100644 --- a/Cura/gui/sceneView.py +++ b/Cura/gui/sceneView.py @@ -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() diff --git a/Cura/util/mesh.py b/Cura/util/mesh.py index c9d2236e..a82f8336 100644 --- a/Cura/util/mesh.py +++ b/Cura/util/mesh.py @@ -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() diff --git a/Cura/util/objectScene.py b/Cura/util/objectScene.py index 925d637b..c2944e25 100644 --- a/Cura/util/objectScene.py +++ b/Cura/util/objectScene.py @@ -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: