From 4a4a6daa4637cb4f70b8dcbf3194cd82dc563eea Mon Sep 17 00:00:00 2001 From: daid303 Date: Wed, 6 Feb 2013 10:33:51 +0100 Subject: [PATCH] Add working scale entry tools. --- Cura/gui/preview3d.py | 63 ++++++++++- Cura/gui/util/openglGui.py | 175 ++++++++++++++++++++++++++++--- Cura/gui/util/previewTools.py | 44 ++++++-- Cura/resources/images/splash.png | Bin 24128 -> 22442 bytes 4 files changed, 259 insertions(+), 23 deletions(-) diff --git a/Cura/gui/preview3d.py b/Cura/gui/preview3d.py index 9d95a8b3..f51b2cab 100644 --- a/Cura/gui/preview3d.py +++ b/Cura/gui/preview3d.py @@ -119,10 +119,22 @@ class previewPanel(wx.Panel): self.sliceButton = openglGui.glButton(self.glCanvas, 6, 'Prepare model', (0,-2), lambda : self.GetParent().GetParent().GetParent().OnSlice(None)) self.printButton = openglGui.glButton(self.glCanvas, 7, 'Print model', (0,-1), lambda : self.GetParent().GetParent().GetParent().OnPrint(None)) - self.scaleForm = openglGui.glFrame(self.glCanvas, (1, 1)) + self.scaleForm = openglGui.glFrame(self.glCanvas, (1, 3)) openglGui.glGuiLayoutGrid(self.scaleForm) - openglGui.glLabel(self.scaleForm, 'Test', (0,0)) - openglGui.glLabel(self.scaleForm, 'Test', (1,1)) + openglGui.glLabel(self.scaleForm, 'Scale X', (0,0)) + self.scaleXctrl = openglGui.glTextCtrl(self.scaleForm, '1.0', (1,0), lambda value: self.OnScaleEntry(value, 0)) + openglGui.glLabel(self.scaleForm, 'Scale Y', (0,1)) + self.scaleYctrl = openglGui.glTextCtrl(self.scaleForm, '1.0', (1,1), lambda value: self.OnScaleEntry(value, 1)) + openglGui.glLabel(self.scaleForm, 'Scale Z', (0,2)) + self.scaleZctrl = openglGui.glTextCtrl(self.scaleForm, '1.0', (1,2), lambda value: self.OnScaleEntry(value, 2)) + openglGui.glLabel(self.scaleForm, 'Size X (mm)', (0,4)) + self.scaleXmmctrl = openglGui.glTextCtrl(self.scaleForm, '0.0', (1,4), lambda value: self.OnScaleEntryMM(value, 0)) + openglGui.glLabel(self.scaleForm, 'Size Y (mm)', (0,5)) + self.scaleYmmctrl = openglGui.glTextCtrl(self.scaleForm, '0.0', (1,5), lambda value: self.OnScaleEntryMM(value, 1)) + openglGui.glLabel(self.scaleForm, 'Size Z (mm)', (0,6)) + self.scaleZmmctrl = openglGui.glTextCtrl(self.scaleForm, '0.0', (1,6), lambda value: self.OnScaleEntryMM(value, 2)) + openglGui.glLabel(self.scaleForm, 'Uniform scale', (0,8)) + self.scaleUniform = openglGui.glCheckbox(self.scaleForm, True, (1,8), None) self.scaleForm.setHidden(True) self.returnToModelViewAndUpdateModel() @@ -137,6 +149,7 @@ class previewPanel(wx.Panel): self.layFlatButton.setHidden(not self.rotateToolButton.getSelected()) self.resetScaleButton.setHidden(not self.scaleToolButton.getSelected()) self.scaleMaxButton.setHidden(not self.scaleToolButton.getSelected()) + self.scaleForm.setHidden(not self.scaleToolButton.getSelected()) self.updateModelTransform() def OnRotateSelect(self): @@ -159,6 +172,40 @@ class previewPanel(wx.Panel): self.tool = previewTools.toolScale(self.glCanvas) self.returnToModelViewAndUpdateModel() + def OnScaleEntry(self, value, axis): + try: + value = float(value) + except: + return + 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[axis][axis] = scale + self.matrix *= numpy.matrix(matrix, numpy.float64) + self.updateModelTransform() + + def OnScaleEntryMM(self, value, axis): + try: + value = float(value) + except: + return + scale = self.objectsSize[axis] + 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[axis][axis] = scale + self.matrix *= numpy.matrix(matrix, numpy.float64) + self.updateModelTransform() + def OnMove(self, e = None): if e is not None: e.Skip() @@ -449,6 +496,16 @@ 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()) + self.scaleXctrl.setValue(round(scaleX, 2)) + self.scaleYctrl.setValue(round(scaleY, 2)) + self.scaleZctrl.setValue(round(scaleZ, 2)) + self.scaleXmmctrl.setValue(round(self.objectsSize[0], 2)) + self.scaleYmmctrl.setValue(round(self.objectsSize[1], 2)) + self.scaleZmmctrl.setValue(round(self.objectsSize[2], 2)) + self.glCanvas.Refresh() def updateProfileToControls(self): diff --git a/Cura/gui/util/openglGui.py b/Cura/gui/util/openglGui.py index a008d884..5bdcf08c 100644 --- a/Cura/gui/util/openglGui.py +++ b/Cura/gui/util/openglGui.py @@ -42,7 +42,8 @@ class glGuiContainer(glGuiControl): def OnMouseDown(self, x, y): for ctrl in self._glGuiControlList: if ctrl.OnMouseDown(x, y): - return + return True + return False def OnMouseMotion(self, x, y): handled = False @@ -82,7 +83,9 @@ class glGuiPanel(glcanvas.GLCanvas): wx.EVT_KILL_FOCUS(self, self.OnFocusLost) def OnKeyChar(self, e): - pass + if self._focus is not None: + self._focus.OnKeyChar(e.GetKeyCode()) + self.Refresh() def OnFocusLost(self, e): self._focus = None @@ -91,6 +94,7 @@ class glGuiPanel(glcanvas.GLCanvas): def _OnGuiMouseLeftDown(self,e): self.SetFocus() if self._container.OnMouseDown(e.GetX(), e.GetY()): + self.Refresh() return self.OnMouseLeftDown(e) @@ -216,11 +220,11 @@ class glGuiLayoutGrid(object): y1 = y0 for n in xrange(0, x): if not n in widths: - widths[n] = 0 + widths[n] = 3 x1 += widths[n] for n in xrange(0, y): - if not n in widths: - heights[n] = 0 + if not n in heights: + heights[n] = 3 y1 += heights[n] ctrl.setSize(x1, y1, widths[x], heights[y]) self._size = sum(widths.values()) + borderSize * 2, sum(heights.values()) + borderSize * 2 @@ -345,7 +349,7 @@ class glFrame(glGuiContainer): glPushMatrix() glTranslatef(pos[0], pos[1], 0) glBindTexture(GL_TEXTURE_2D, self._parent._glButtonsTexture) - glDisable(GL_TEXTURE_2D) + glEnable(GL_TEXTURE_2D) size = self._layout.getLayoutSize() glColor4ub(255,255,255,128) @@ -399,25 +403,24 @@ class glLabel(glGuiControl): return x0, y0 def draw(self): - pos = self._getPixelPos() + x, y, w, h = self.getSize() glPushMatrix() - glTranslatef(pos[0], pos[1], 0) + glTranslatef(x, y, 0) - size = self.getMinSize() glColor4ub(255,255,255,128) glBegin(GL_QUADS) glTexCoord2f(1, 0) - glVertex2f( size[0], 0) + glVertex2f( w, 0) glTexCoord2f(0, 0) glVertex2f( 0, 0) glTexCoord2f(0, 1) - glVertex2f( 0, size[1]) + glVertex2f( 0, h) glTexCoord2f(1, 1) - glVertex2f( size[0], size[1]) + glVertex2f( w, h) glEnd() - glTranslate(5, size[1] - 5, 0) + glTranslate(5, h - 5, 0) glColor4ub(0,0,0,255) opengl.glDrawStringLeft(self._label) glPopMatrix() @@ -430,3 +433,149 @@ class glLabel(glGuiControl): def OnMouseDown(self, x, y): return False + +class glTextCtrl(glGuiControl): + def __init__(self, parent, value, pos, callback): + self._callback = callback + self._value = str(value) + self._selectPos = 0 + self._maxLen = 6 + self._inCallback = False + super(glTextCtrl, self).__init__(parent, pos) + + def setValue(self, value): + if self._inCallback: + return + self._value = str(value) + + def getMinSize(self): + w, h = opengl.glGetStringSize("VALUES") + return w + 10, h + 4 + + def _getPixelPos(self): + x0, y0, w, h = self.getSize() + return x0, y0 + + def draw(self): + x, y, w, h = self.getSize() + + glPushMatrix() + glTranslatef(x, y, 0) + + if self._base._focus == self: + glColor4ub(255,255,255,255) + else: + glColor4ub(255,255,255,192) + glBegin(GL_QUADS) + glTexCoord2f(1, 0) + glVertex2f( w, 0) + glTexCoord2f(0, 0) + glVertex2f( 0, 0) + glTexCoord2f(0, 1) + glVertex2f( 0, h) + glTexCoord2f(1, 1) + glVertex2f( w, h) + glEnd() + + glTranslate(5, h - 5, 0) + glColor4ub(0,0,0,255) + opengl.glDrawStringLeft(self._value) + if self._base._focus == self: + glTranslate(opengl.glGetStringSize(self._value[0:self._selectPos])[0] - 2, -1, 0) + opengl.glDrawStringLeft('|') + glPopMatrix() + + def _checkHit(self, x, y): + x1, y1, w, h = self.getSize() + return 0 <= x - x1 <= w and 0 <= y - y1 <= h + + def OnMouseMotion(self, x, y): + return False + + def OnMouseDown(self, x, y): + if self._checkHit(x, y): + self._base._focus = self + self._selectPos = len(self._value) + return True + return False + + def OnKeyChar(self, c): + self._inCallback = True + if c == wx.WXK_LEFT: + self._selectPos -= 1 + self._selectPos = max(0, self._selectPos) + if c == wx.WXK_RIGHT: + self._selectPos += 1 + self._selectPos = min(self._selectPos, len(self._value)) + if c == wx.WXK_BACK and self._selectPos > 0: + self._value = self._value[0:self._selectPos - 1] + self._value[self._selectPos:] + self._selectPos -= 1 + self._callback(self._value) + if c == wx.WXK_DELETE: + self._value = self._value[0:self._selectPos] + self._value[self._selectPos + 1:] + self._callback(self._value) + if (ord('0') <= c <= ord('9') or c == ord('.')) and len(self._value) < self._maxLen: + self._value = self._value[0:self._selectPos] + chr(c) + self._value[self._selectPos:] + self._selectPos += 1 + self._callback(self._value) + self._inCallback = False + +class glCheckbox(glGuiControl): + def __init__(self, parent, value, pos, callback): + self._callback = callback + self._value = value + self._selectPos = 0 + self._maxLen = 6 + self._inCallback = False + super(glCheckbox, self).__init__(parent, pos) + + def setValue(self, value): + if self._inCallback: + return + self._value = str(value) + + def getValue(self): + return self._value + + def getMinSize(self): + return 20, 20 + + def _getPixelPos(self): + x0, y0, w, h = self.getSize() + return x0, y0 + + def draw(self): + x, y, w, h = self.getSize() + + glPushMatrix() + glTranslatef(x, y, 0) + + if self._value: + glColor4ub(0,255,0,255) + else: + glColor4ub(255,0,0,255) + glBegin(GL_QUADS) + glTexCoord2f(1, 0) + glVertex2f( w, 0) + glTexCoord2f(0, 0) + glVertex2f( 0, 0) + glTexCoord2f(0, 1) + glVertex2f( 0, h) + glTexCoord2f(1, 1) + glVertex2f( w, h) + glEnd() + + glPopMatrix() + + def _checkHit(self, x, y): + x1, y1, w, h = self.getSize() + return 0 <= x - x1 <= w and 0 <= y - y1 <= h + + def OnMouseMotion(self, x, y): + return False + + def OnMouseDown(self, x, y): + if self._checkHit(x, y): + self._value = not self._value + return True + return False diff --git a/Cura/gui/util/previewTools.py b/Cura/gui/util/previewTools.py index 099b44fc..fb14f2d3 100644 --- a/Cura/gui/util/previewTools.py +++ b/Cura/gui/util/previewTools.py @@ -407,7 +407,7 @@ class toolScale(object): glTranslate(0,-(radius + 5),0) if self.parent.tempMatrix is not None: size = (numpy.matrix([size]) * self.parent.tempMatrix).getA().flatten() - opengl.glDrawStringCenter("%0.1fx%0.1fx%0.1fmm" % (size[0], size[1], size[2])) + opengl.glDrawStringCenter("W, D, H: %0.1f, %0.1f, %0.1f mm" % (size[0], size[1], size[2])) glPopMatrix() glLineWidth(1) @@ -467,8 +467,10 @@ class toolScale(object): opengl.glDrawStringCenter("%0.2f" % (scaleZ)) glPopMatrix() + glEnable(GL_DEPTH_TEST) glColor(255,255,255) size = size / 2 + size += 0.01 glLineWidth(1) glBegin(GL_LINES) glVertex3f(size[0], size[1], size[2]) @@ -478,6 +480,20 @@ class toolScale(object): glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0]/4*3, size[1], size[2]) + glVertex3f(-size[0], size[1], size[2]) + glVertex3f(-size[0], size[1], size[2]/4*3) + glVertex3f(-size[0], size[1], size[2]) + glVertex3f(-size[0], size[1]/4*3, size[2]) + glVertex3f(-size[0], size[1], size[2]) + glVertex3f(-size[0]/4*3, size[1], size[2]) + + glVertex3f(size[0], -size[1], size[2]) + glVertex3f(size[0], -size[1], size[2]/4*3) + glVertex3f(size[0], -size[1], size[2]) + glVertex3f(size[0], -size[1]/4*3, size[2]) + glVertex3f(size[0], -size[1], size[2]) + glVertex3f(size[0]/4*3, -size[1], size[2]) + glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1], size[2]/4*3) glVertex3f(-size[0], -size[1], size[2]) @@ -485,12 +501,12 @@ class toolScale(object): glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0]/4*3, -size[1], size[2]) - glVertex3f(size[0], -size[1], -size[2]) - glVertex3f(size[0], -size[1], -size[2]/4*3) - glVertex3f(size[0], -size[1], -size[2]) - glVertex3f(size[0], -size[1]/4*3, -size[2]) - glVertex3f(size[0], -size[1], -size[2]) - glVertex3f(size[0]/4*3, -size[1], -size[2]) + glVertex3f(size[0], size[1], -size[2]) + glVertex3f(size[0], size[1], -size[2]/4*3) + glVertex3f(size[0], size[1], -size[2]) + glVertex3f(size[0], size[1]/4*3, -size[2]) + glVertex3f(size[0], size[1], -size[2]) + glVertex3f(size[0]/4*3, size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2]/4*3) @@ -498,6 +514,20 @@ class toolScale(object): glVertex3f(-size[0], size[1]/4*3, -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0]/4*3, size[1], -size[2]) + + glVertex3f(size[0], -size[1], -size[2]) + glVertex3f(size[0], -size[1], -size[2]/4*3) + glVertex3f(size[0], -size[1], -size[2]) + glVertex3f(size[0], -size[1]/4*3, -size[2]) + glVertex3f(size[0], -size[1], -size[2]) + glVertex3f(size[0]/4*3, -size[1], -size[2]) + + glVertex3f(-size[0], -size[1], -size[2]) + glVertex3f(-size[0], -size[1], -size[2]/4*3) + glVertex3f(-size[0], -size[1], -size[2]) + glVertex3f(-size[0], -size[1]/4*3, -size[2]) + glVertex3f(-size[0], -size[1], -size[2]) + glVertex3f(-size[0]/4*3, -size[1], -size[2]) glEnd() glEnable(GL_DEPTH_TEST) diff --git a/Cura/resources/images/splash.png b/Cura/resources/images/splash.png index e1d7932b7507ac468250f7b4963726eee64baa8d..94141f5496e560a61ce4d2723fbafd01aa30dfd1 100644 GIT binary patch literal 22442 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%0D^n?85Bqz;rwd>a@s}7+_V3&RINKA?xk?5z^1b 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 TK9LUe>Vh7s>#CLBwGaP4rNp`a literal 24128 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 -- 2.30.2