chiark / gitweb /
Fix the autoplacing of multiple objects.
authordaid <daid303@gmail.com>
Tue, 3 Dec 2013 08:46:51 +0000 (09:46 +0100)
committerdaid <daid303@gmail.com>
Tue, 3 Dec 2013 08:46:51 +0000 (09:46 +0100)
Cura/gui/sceneView.py
Cura/util/objectScene.py

index 370b1546252dd8aa1bf9578046ef9807931b236e..e6e116a9296b723b2f4e4bc70dd78c7d2305c7cc 100644 (file)
@@ -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.")
index f7388b2a29e0dc05f52c12c2fa82ad132f9b0013..f50e5721a325a90148eabe42e4b3dce8d5f9ac89 100644 (file)
@@ -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))