chiark / gitweb /
Calculate the extra object offset.
authordaid303 <daid303@gmail.com>
Wed, 3 Apr 2013 08:14:50 +0000 (10:14 +0200)
committerdaid303 <daid303@gmail.com>
Wed, 3 Apr 2013 08:14:50 +0000 (10:14 +0200)
Cura/gui/sceneView.py
Cura/util/objectScene.py
Cura/util/profile.py

index 5796e13533f7456413f5f70ab52bec336f073e98..f29b5470a00a80cd434852917e005d2bb16e196f 100644 (file)
@@ -72,6 +72,7 @@ class SceneView(openglGui.glGuiPanel):
                self._slicer = sliceEngine.Slicer(self._updateSliceProgress)
                self._sceneUpdateTimer = wx.Timer(self)
                self.Bind(wx.EVT_TIMER, lambda e : self._slicer.runSlicer(self._scene), self._sceneUpdateTimer)
+               self.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel)
 
                self.updateProfileToControls()
                wx.EVT_IDLE(self, self.OnIdle)
@@ -125,6 +126,7 @@ class SceneView(openglGui.glGuiPanel):
        def sceneUpdated(self):
                self._sceneUpdateTimer.Start(1, True)
                self._slicer.abortSlicer()
+               self._scene.setSizeOffsets(numpy.array(profile.calculateObjectSizeOffsets(), numpy.float32))
                self.Refresh()
 
        def _updateSliceProgress(self, progressValue, ready):
@@ -205,6 +207,7 @@ class SceneView(openglGui.glGuiPanel):
                self._mouseX = e.GetX()
                self._mouseY = e.GetY()
                self._mouseClick3DPos = self._mouse3Dpos
+               self._mouseClickFocus = self._focusObj
                if e.ButtonDClick():
                        self._mouseState = 'doubleClick'
                else:
@@ -252,7 +255,7 @@ class SceneView(openglGui.glGuiPanel):
                                        self._zoom = 1
                                if self._zoom > numpy.max(self._machineSize) * 3:
                                        self._zoom = numpy.max(self._machineSize) * 3
-                       elif e.LeftIsDown() and self._selectedObj is not None and not self._isSimpleMode:
+                       elif e.LeftIsDown() and self._selectedObj is not None and self._selectedObj == self._mouseClickFocus and not self._isSimpleMode:
                                self._mouseState = 'dragObject'
                                z = max(0, self._mouseClick3DPos[2])
                                p0 = opengl.unproject(self._mouseX, self.viewport[1] + self.viewport[3] - self._mouseY, 0, self.modelMatrix, self.projMatrix, self.viewport)
@@ -271,6 +274,14 @@ class SceneView(openglGui.glGuiPanel):
                self._mouseX = e.GetX()
                self._mouseY = e.GetY()
 
+       def OnMouseWheel(self, e):
+               self._zoom *= 1.0 - float(e.GetWheelRotation() / e.GetWheelDelta()) / 10.0
+               if self._zoom < 1.0:
+                       self._zoom = 1.0
+               if self._zoom > numpy.max(self._machineSize) * 3:
+                       self._zoom = numpy.max(self._machineSize) * 3
+               self.Refresh()
+
        def _init3DView(self):
                # set viewing projection
                size = self.GetSize()
index 2b2bd813e85317f6ed9bb2254d63a75b18c46469..1f0ffd3ff4fffe29b6733ddf2e47cac8a4fa1024 100644 (file)
@@ -11,6 +11,9 @@ class Scene():
        def setMachineSize(self, machineSize):
                self._machineSize = machineSize
 
+       def setSizeOffsets(self, sizeOffsets):
+               self._sizeOffsets = sizeOffsets
+
        def objects(self):
                return self._objectList
 
index 8388e657bd9194ad93f569c8c068d887b6f55794..877976d84963f9a67695cf290862bb5bf9b5bbbe 100644 (file)
@@ -574,6 +574,17 @@ def calculateSolidLayerCount():
        solidThickness = getProfileSettingFloat('solid_layer_thickness')
        return int(math.ceil(solidThickness / layerHeight - 0.0001))
 
+def calculateObjectSizeOffsets():
+       size = 0.0
+       if getProfileSettingFloat('skirt_line_count') > 0:
+               size += getProfileSettingFloat('skirt_line_count') * calculateEdgeWidth() + getProfileSettingFloat('skirt_gap')
+       #if getProfileSetting('enable_raft') != 'False':
+       #       size += profile.getProfileSettingFloat('raft_margin') * 2
+       #if getProfileSetting('support') != 'None':
+       #       extraSizeMin = extraSizeMin + numpy.array([3.0, 0, 0])
+       #       extraSizeMax = extraSizeMax + numpy.array([3.0, 0, 0])
+       return [size, size]
+
 def getMachineCenterCoords():
        if getPreference('machine_center_is_zero') == 'True':
                return [0, 0]
@@ -585,7 +596,6 @@ def getObjectMatrix():
        except ValueError:
                return [1,0,0, 0,1,0, 0,0,1]
 
-
 #########################################################
 ## Alteration file functions
 #########################################################