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()
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):
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()
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):
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
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
def _OnGuiMouseLeftDown(self,e):
self.SetFocus()
if self._container.OnMouseDown(e.GetX(), e.GetY()):
+ self.Refresh()
return
self.OnMouseLeftDown(e)
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
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)
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()
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
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)
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])
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])
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]/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)