chiark / gitweb /
Calculate the scaling over the proper matrix axis.
authordaid303 <daid303@gmail.com>
Wed, 6 Feb 2013 17:46:54 +0000 (18:46 +0100)
committerdaid303 <daid303@gmail.com>
Wed, 6 Feb 2013 17:46:54 +0000 (18:46 +0100)
Cura/gui/preview3d.py
Cura/gui/util/openglGui.py
Cura/gui/util/previewTools.py

index 9edc4b664ff198aa3e6729760e77afd5879ce296..300f408fa5a5698363ce3146a41b373582bebd86 100644 (file)
@@ -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))
index 5bdcf08cf897cf4874a2e165d28750771c9f85da..3506e27d145d466be230cc9a7fd3970388e92a29 100644 (file)
@@ -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)
index fb14f2d37e6dfb2dfc9108ca3223f16fb6b39fe3..903e1cd9d692112f5dc4fa64f053952a078a68b7 100644 (file)
@@ -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