From: daid Date: Tue, 3 Dec 2013 08:46:51 +0000 (+0100) Subject: Fix the autoplacing of multiple objects. X-Git-Tag: 14.01~43 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=af32e1059f17157238d2425e2d10246cf7738fb1;p=cura.git Fix the autoplacing of multiple objects. --- diff --git a/Cura/gui/sceneView.py b/Cura/gui/sceneView.py index 370b1546..e6e116a9 100644 --- a/Cura/gui/sceneView.py +++ b/Cura/gui/sceneView.py @@ -587,7 +587,8 @@ class SceneView(openglGui.glGuiPanel): else: obj._loadAnim = None self._scene.add(obj) - self._scene.centerAll() + if not self._scene.checkPlatform(obj): + self._scene.centerAll() self._selectObject(obj) if obj.getScale()[0] < 1.0: self.notification.message("Warning: Object scaled down.") diff --git a/Cura/util/objectScene.py b/Cura/util/objectScene.py index f7388b2a..f50e5721 100644 --- a/Cura/util/objectScene.py +++ b/Cura/util/objectScene.py @@ -134,13 +134,13 @@ class Scene(object): #Add new object to print area def add(self, obj): - self._findFreePositionFor(obj) - self._objectList.append(obj) - self.pushFree() if numpy.max(obj.getSize()[0:2]) > numpy.max(self._machineSize[0:2]) * 2.5: scale = numpy.max(self._machineSize[0:2]) * 2.5 / numpy.max(obj.getSize()[0:2]) matrix = [[scale,0,0], [0, scale, 0], [0, 0, scale]] obj.applyMatrix(numpy.matrix(matrix, numpy.float64)) + self._findFreePositionFor(obj) + self._objectList.append(obj) + self.pushFree() self.updateSizeOffsets(True) def remove(self, obj): @@ -157,7 +157,7 @@ class Scene(object): self.pushFree() def pushFree(self): - n = 1000 + n = 10 while self._pushFree(): n -= 1 if n < 0: @@ -194,7 +194,7 @@ class Scene(object): def _pushFree(self): for a in self._objectList: for b in self._objectList: - if a == b: + if a == b or not self.checkPlatform(a) or not self.checkPlatform(b): continue if self._oneAtATime: v = polygon.polygonCollisionPushVector(a._headAreaMinHull + a.getPosition(), b._boundaryHull + b.getPosition()) @@ -202,8 +202,8 @@ class Scene(object): v = polygon.polygonCollisionPushVector(a._boundaryHull + a.getPosition(), b._boundaryHull + b.getPosition()) if type(v) is bool: continue - a.setPosition(a.getPosition() + v / 2.0) - b.setPosition(b.getPosition() - v / 2.0) + a.setPosition(a.getPosition() + v * 0.4) + b.setPosition(b.getPosition() - v * 0.6) return True return False @@ -269,7 +269,10 @@ class Scene(object): posList = [] for a in self._objectList: p = a.getPosition() - s = (a.getSize()[0:2] + obj.getSize()[0:2]) / 2 + self._sizeOffsets + self._headSizeOffsets + if self._oneAtATime: + s = (a.getSize()[0:2] + obj.getSize()[0:2]) / 2 + self._sizeOffsets + self._headSizeOffsets + numpy.array([3,3], numpy.float32) + else: + s = (a.getSize()[0:2] + obj.getSize()[0:2]) / 2 + numpy.array([3,3], numpy.float32) posList.append(p + s * ( 1.0, 1.0)) posList.append(p + s * ( 0.0, 1.0)) posList.append(p + s * (-1.0, 1.0))