From: daid303 Date: Wed, 3 Apr 2013 08:14:50 +0000 (+0200) Subject: Calculate the extra object offset. X-Git-Tag: 13.05~136 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=cde1fe0cc4077ab4070807a0eae0493eebe4f47f;p=cura.git Calculate the extra object offset. --- diff --git a/Cura/gui/sceneView.py b/Cura/gui/sceneView.py index 5796e135..f29b5470 100644 --- a/Cura/gui/sceneView.py +++ b/Cura/gui/sceneView.py @@ -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() diff --git a/Cura/util/objectScene.py b/Cura/util/objectScene.py index 2b2bd813..1f0ffd3f 100644 --- a/Cura/util/objectScene.py +++ b/Cura/util/objectScene.py @@ -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 diff --git a/Cura/util/profile.py b/Cura/util/profile.py index 8388e657..877976d8 100644 --- a/Cura/util/profile.py +++ b/Cura/util/profile.py @@ -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 #########################################################