From: daid303 Date: Wed, 6 Feb 2013 17:46:54 +0000 (+0100) Subject: Calculate the scaling over the proper matrix axis. X-Git-Tag: 13.03~55 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=3ee0f91580ad11b1f7a4966b66ad83e909f4bf65;p=cura.git Calculate the scaling over the proper matrix axis. --- diff --git a/Cura/gui/preview3d.py b/Cura/gui/preview3d.py index 9edc4b66..300f408f 100644 --- a/Cura/gui/preview3d.py +++ b/Cura/gui/preview3d.py @@ -95,8 +95,6 @@ class previewPanel(wx.Panel): self.toolbar.AddControl(self.layerSpin) self.Bind(wx.EVT_SPINCTRL, self.OnLayerNrChange, self.layerSpin) - self.OnViewChange() - sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.toolbar, 0, flag=wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT, border=1) sizer.Add(self.glCanvas, 1, flag=wx.EXPAND) @@ -145,6 +143,7 @@ class previewPanel(wx.Panel): self.scaleUniform = openglGui.glCheckbox(self.scaleForm, True, (1,8), None) self.scaleForm.setHidden(True) + self.OnViewChange() self.returnToModelViewAndUpdateModel() self.matrix = numpy.matrix(numpy.array(profile.getObjectMatrix(), numpy.float64).reshape((3,3,))) @@ -185,14 +184,14 @@ class previewPanel(wx.Panel): value = float(value) except: return - scale = numpy.linalg.norm(self.matrix[axis].getA().flatten()) + scale = numpy.linalg.norm(self.matrix[::,axis].getA().flatten()) scale = value / scale if scale == 0: return if self.scaleUniform.getValue(): matrix = [[scale,0,0], [0, scale, 0], [0, 0, scale]] else: - matrix = [[1,0,0], [0, 1, 0], [0, 0, 1]] + matrix = [[1.0,0,0], [0, 1.0, 0], [0, 0, 1.0]] matrix[axis][axis] = scale self.matrix *= numpy.matrix(matrix, numpy.float64) self.updateModelTransform() @@ -243,18 +242,18 @@ class previewPanel(wx.Panel): self.updateModelTransform() def OnRotateReset(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()) + 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) for obj in self.objectList: obj.steepDirty = True self.updateModelTransform() def OnScaleReset(self): - x = 1/numpy.linalg.norm(self.matrix[0].getA().flatten()) - y = 1/numpy.linalg.norm(self.matrix[1].getA().flatten()) - z = 1/numpy.linalg.norm(self.matrix[2].getA().flatten()) + x = 1/numpy.linalg.norm(self.matrix[::,0].getA().flatten()) + y = 1/numpy.linalg.norm(self.matrix[::,1].getA().flatten()) + z = 1/numpy.linalg.norm(self.matrix[::,2].getA().flatten()) self.matrix *= numpy.matrix([[x,0,0],[0,y,0],[0,0,z]], numpy.float64) for obj in self.objectList: obj.steepDirty = True @@ -455,6 +454,7 @@ class previewPanel(wx.Panel): self.gcodeViewButton.Show(self.gcode is not None) self.mixedViewButton.Show(self.gcode is not None) self.layerSpin.Show(self.glCanvas.viewMode == "GCode" or self.glCanvas.viewMode == "Mixed") + self.printButton.setDisabled(self.gcode is None) if self.gcode is not None: self.layerSpin.SetRange(1, len(self.gcode.layerList) - 1) self.toolbar.Realize() @@ -504,9 +504,9 @@ class previewPanel(wx.Panel): self.objectsSize = self.objectsMaxV - self.objectsMinV self.objectsBoundaryCircleSize = objectsBoundaryCircleSize - scaleX = numpy.linalg.norm(self.matrix[0].getA().flatten()) - scaleY = numpy.linalg.norm(self.matrix[1].getA().flatten()) - scaleZ = numpy.linalg.norm(self.matrix[2].getA().flatten()) + scaleX = numpy.linalg.norm(self.matrix[::,0].getA().flatten()) + scaleY = numpy.linalg.norm(self.matrix[::,1].getA().flatten()) + scaleZ = numpy.linalg.norm(self.matrix[::,2].getA().flatten()) self.scaleXctrl.setValue(round(scaleX, 2)) self.scaleYctrl.setValue(round(scaleY, 2)) self.scaleZctrl.setValue(round(scaleZ, 2)) diff --git a/Cura/gui/util/openglGui.py b/Cura/gui/util/openglGui.py index 5bdcf08c..3506e27d 100644 --- a/Cura/gui/util/openglGui.py +++ b/Cura/gui/util/openglGui.py @@ -242,6 +242,7 @@ class glButton(glGuiControl): self._selected = False self._focus = False self._hidden = False + self._disabled = False def setSelected(self, value): self._selected = value @@ -249,6 +250,9 @@ class glButton(glGuiControl): def setHidden(self, value): self._hidden = value + def setDisabled(self, value): + self._disabled = value + def getSelected(self): return self._selected @@ -278,7 +282,10 @@ class glButton(glGuiControl): elif self._focus: scale = 0.9 glScalef(bs * scale, bs * scale, bs * scale) - glColor4ub(255,255,255,255) + if self._disabled: + glColor4ub(128,128,128,128) + else: + glColor4ub(255,255,255,255) glBegin(GL_QUADS) glTexCoord2f(cx+0.25, cy) glVertex2f( 0.5,-0.5) diff --git a/Cura/gui/util/previewTools.py b/Cura/gui/util/previewTools.py index fb14f2d3..903e1cd9 100644 --- a/Cura/gui/util/previewTools.py +++ b/Cura/gui/util/previewTools.py @@ -337,9 +337,9 @@ class toolScale(object): scale = self._lineLineCrossingDistOnLine(p0, p1, numpy.array([0,0,0], numpy.float32), numpy.array(endPoint, numpy.float32)) / 15.0 / s if not wx.GetKeyState(wx.WXK_SHIFT): objMatrix = self.parent.getObjectMatrix() - scaleX = numpy.linalg.norm(objMatrix[0].getA().flatten()) - scaleY = numpy.linalg.norm(objMatrix[1].getA().flatten()) - scaleZ = numpy.linalg.norm(objMatrix[2].getA().flatten()) + scaleX = numpy.linalg.norm(objMatrix[::,0].getA().flatten()) + scaleY = numpy.linalg.norm(objMatrix[::,1].getA().flatten()) + scaleZ = numpy.linalg.norm(objMatrix[::,2].getA().flatten()) if self.node == 1 or not wx.GetKeyState(wx.WXK_CONTROL): matrixScale = (scaleX + scaleY + scaleZ) / 3 elif self.node == 2: @@ -378,9 +378,9 @@ class toolScale(object): if self.node == 4 and self.scale is not None: sz *= self.scale objMatrix = self.parent.getObjectMatrix() - scaleX = numpy.linalg.norm(objMatrix[0].getA().flatten()) - scaleY = numpy.linalg.norm(objMatrix[1].getA().flatten()) - scaleZ = numpy.linalg.norm(objMatrix[2].getA().flatten()) + scaleX = numpy.linalg.norm(objMatrix[::,0].getA().flatten()) + scaleY = numpy.linalg.norm(objMatrix[::,1].getA().flatten()) + scaleZ = numpy.linalg.norm(objMatrix[::,2].getA().flatten()) if self.scale is not None: scaleX *= self.scale scaleY *= self.scale