def DrawMachine(machineSize): glDisable(GL_LIGHTING) glDisable(GL_CULL_FACE) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) sx = machineSize.x sy = machineSize.y for x in xrange(-int(sx/20)-1, int(sx / 20) + 1): for y in xrange(-int(sx/20)-1, int(sy / 20) + 1): x1 = sx/2+x * 10 x2 = x1 + 10 y1 = sx/2+y * 10 y2 = y1 + 10 x1 = max(min(x1, sx), 0) y1 = max(min(y1, sy), 0) x2 = max(min(x2, sx), 0) y2 = max(min(y2, sy), 0) if (x & 1) == (y & 1): glColor4ub(5, 171, 231, 127) else: glColor4ub(5 * 8 / 10, 171 * 8 / 10, 231 * 8 / 10, 128) glBegin(GL_QUADS) glVertex3f(x1, y1, -0.02) glVertex3f(x2, y1, -0.02) glVertex3f(x2, y2, -0.02) glVertex3f(x1, y2, -0.02) glEnd() glEnable(GL_CULL_FACE) if profile.getPreference('machine_type') == 'ultimaker': glPushMatrix() glEnable(GL_LIGHTING) glTranslate(100, 200, -1) glLightfv(GL_LIGHT0, GL_DIFFUSE, [0.8, 0.8, 0.8]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.5, 0.5, 0.5]) glEnable(GL_BLEND) glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR) global platformMesh if platformMesh is None: try: platformMesh = meshLoader.loadMesh(getPathForMesh('ultimaker_platform.stl')) except: platformMesh = False if platformMesh: DrawMesh(platformMesh) glPopMatrix() glDisable(GL_LIGHTING) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glColor4ub(5, 171, 231, 64) glBegin(GL_QUADS) glVertex3f(0, 0, machineSize.z) glVertex3f(0, machineSize.y, machineSize.z) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glVertex3f(machineSize.x, 0, machineSize.z) glEnd() glColor4ub(5, 171, 231, 96) glBegin(GL_QUADS) glVertex3f(0, 0, 0) glVertex3f(0, 0, machineSize.z) glVertex3f(machineSize.x, 0, machineSize.z) glVertex3f(machineSize.x, 0, 0) glVertex3f(0, machineSize.y, machineSize.z) glVertex3f(0, machineSize.y, 0) glVertex3f(machineSize.x, machineSize.y, 0) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glEnd() glColor4ub(5, 171, 231, 128) glBegin(GL_QUADS) glVertex3f(0, 0, machineSize.z) glVertex3f(0, 0, 0) glVertex3f(0, machineSize.y, 0) glVertex3f(0, machineSize.y, machineSize.z) glVertex3f(machineSize.x, 0, 0) glVertex3f(machineSize.x, 0, machineSize.z) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glVertex3f(machineSize.x, machineSize.y, 0) glEnd() glDisable(GL_BLEND) #Draw the X/Y/Z indicator glPushMatrix() glTranslate(5, 5, 2) glLineWidth(2) glColor3f(0.5, 0, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(20, 0, 0) glEnd() glColor3f(0, 0.5, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(0, 20, 0) glEnd() glColor3f(0, 0, 0.5) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(0, 0, 20) glEnd() glDisable(GL_DEPTH_TEST) #X glColor3f(1, 0, 0) glPushMatrix() glTranslate(20, 0, 0) noZ = ResetMatrixRotationAndScale() glDrawStringCenter("X") glPopMatrix() #Y glColor3f(0, 1, 0) glPushMatrix() glTranslate(0, 20, 0) glDrawStringCenter("Y") glPopMatrix() #Z if not noZ: glColor3f(0, 0, 1) glPushMatrix() glTranslate(0, 0, 20) glDrawStringCenter("Z") glPopMatrix() glPopMatrix() glEnable(GL_DEPTH_TEST)
def __init__(self, parent): super(SceneView, self).__init__(parent) self._yaw = 30 self._pitch = 60 self._zoom = 300 self._scene = objectScene.Scene() self._gcode = None self._gcodeVBOs = [] self._gcodeFilename = None self._gcodeLoadThread = None self._objectShader = None self._objectLoadShader = None self._focusObj = None self._selectedObj = None self._objColors = [None,None,None,None] self._mouseX = -1 self._mouseY = -1 self._mouseState = None self._viewTarget = numpy.array([0,0,0], numpy.float32) self._animView = None self._animZoom = None self._platformMesh = meshLoader.loadMeshes(resources.getPathForMesh('ultimaker_platform.stl'))[0] self._platformMesh._drawOffset = numpy.array([0,0,2.5], numpy.float32) self._isSimpleMode = True self._viewport = None self._modelMatrix = None self._projMatrix = None self.tempMatrix = None self.openFileButton = openglGui.glButton(self, 4, 'Load', (0,0), self.showLoadModel) self.printButton = openglGui.glButton(self, 6, 'Print', (1,0), self.OnPrintButton) self.printButton.setDisabled(True) group = [] self.rotateToolButton = openglGui.glRadioButton(self, 8, 'Rotate', (0,-1), group, self.OnToolSelect) self.scaleToolButton = openglGui.glRadioButton(self, 9, 'Scale', (1,-1), group, self.OnToolSelect) self.mirrorToolButton = openglGui.glRadioButton(self, 10, 'Mirror', (2,-1), group, self.OnToolSelect) self.resetRotationButton = openglGui.glButton(self, 12, 'Reset', (0,-2), self.OnRotateReset) self.layFlatButton = openglGui.glButton(self, 16, 'Lay flat', (0,-3), self.OnLayFlat) self.resetScaleButton = openglGui.glButton(self, 13, 'Reset', (1,-2), self.OnScaleReset) self.scaleMaxButton = openglGui.glButton(self, 17, 'To max', (1,-3), self.OnScaleMax) self.mirrorXButton = openglGui.glButton(self, 14, 'Mirror X', (2,-2), lambda button: self.OnMirror(0)) self.mirrorYButton = openglGui.glButton(self, 18, 'Mirror Y', (2,-3), lambda button: self.OnMirror(1)) self.mirrorZButton = openglGui.glButton(self, 22, 'Mirror Z', (2,-4), lambda button: self.OnMirror(2)) self.rotateToolButton.setExpandArrow(True) self.scaleToolButton.setExpandArrow(True) self.mirrorToolButton.setExpandArrow(True) self.scaleForm = openglGui.glFrame(self, (2, -2)) openglGui.glGuiLayoutGrid(self.scaleForm) openglGui.glLabel(self.scaleForm, 'Scale X', (0,0)) self.scaleXctrl = openglGui.glNumberCtrl(self.scaleForm, '1.0', (1,0), lambda value: self.OnScaleEntry(value, 0)) openglGui.glLabel(self.scaleForm, 'Scale Y', (0,1)) self.scaleYctrl = openglGui.glNumberCtrl(self.scaleForm, '1.0', (1,1), lambda value: self.OnScaleEntry(value, 1)) openglGui.glLabel(self.scaleForm, 'Scale Z', (0,2)) self.scaleZctrl = openglGui.glNumberCtrl(self.scaleForm, '1.0', (1,2), lambda value: self.OnScaleEntry(value, 2)) openglGui.glLabel(self.scaleForm, 'Size X (mm)', (0,4)) self.scaleXmmctrl = openglGui.glNumberCtrl(self.scaleForm, '0.0', (1,4), lambda value: self.OnScaleEntryMM(value, 0)) openglGui.glLabel(self.scaleForm, 'Size Y (mm)', (0,5)) self.scaleYmmctrl = openglGui.glNumberCtrl(self.scaleForm, '0.0', (1,5), lambda value: self.OnScaleEntryMM(value, 1)) openglGui.glLabel(self.scaleForm, 'Size Z (mm)', (0,6)) self.scaleZmmctrl = openglGui.glNumberCtrl(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.viewSelection = openglGui.glComboButton(self, 'View mode', [7,19,11,15,23], ['Normal', 'Overhang', 'Transparent', 'X-Ray', 'Layers'], (-1,0), self.OnViewChange) self.layerSelect = openglGui.glSlider(self, 10000, 0, 1, (-1,-2), lambda : self.QueueRefresh()) self.notification = openglGui.glNotification(self, (0, 0)) self._slicer = sliceEngine.Slicer(self._updateSliceProgress) self._sceneUpdateTimer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self._onRunSlicer, self._sceneUpdateTimer) self.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave) self.OnViewChange() self.OnToolSelect(0) self.updateToolButtons() self.updateProfileToControls()
def DrawMachine(machineSize): if profile.getPreference('machine_type') == 'ultimaker': glPushMatrix() glEnable(GL_LIGHTING) glTranslate(100, 200, -5) glLightfv(GL_LIGHT0, GL_DIFFUSE, [0.8, 0.8, 0.8]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.5, 0.5, 0.5]) glEnable(GL_BLEND) glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR) global platformMesh if platformMesh is None: platformMesh = meshLoader.loadMesh(getPathForMesh('ultimaker_platform.stl')) platformMesh.setRotateMirror(0, False, False, False, False, False) DrawMesh(platformMesh) glPopMatrix() glDisable(GL_LIGHTING) if False: glColor3f(0.7, 0.7, 0.7) glLineWidth(2) glBegin(GL_LINES) for i in xrange(0, int(machineSize.x), 10): glVertex3f(i, 0, 0) glVertex3f(i, machineSize.y, 0) for i in xrange(0, int(machineSize.y), 10): glVertex3f(0, i, 0) glVertex3f(machineSize.x, i, 0) glEnd() glEnable(GL_LINE_SMOOTH) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); glColor3f(0.0, 0.0, 0.0) glLineWidth(4) glBegin(GL_LINE_LOOP) glVertex3f(0, 0, 0) glVertex3f(machineSize.x, 0, 0) glVertex3f(machineSize.x, machineSize.y, 0) glVertex3f(0, machineSize.y, 0) glEnd() glLineWidth(2) glBegin(GL_LINE_LOOP) glVertex3f(0, 0, machineSize.z) glVertex3f(machineSize.x, 0, machineSize.z) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glVertex3f(0, machineSize.y, machineSize.z) glEnd() glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(0, 0, machineSize.z) glVertex3f(machineSize.x, 0, 0) glVertex3f(machineSize.x, 0, machineSize.z) glVertex3f(machineSize.x, machineSize.y, 0) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glVertex3f(0, machineSize.y, 0) glVertex3f(0, machineSize.y, machineSize.z) glEnd() else: glDisable(GL_CULL_FACE) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) sx = machineSize.x sy = machineSize.y for x in xrange(-int(sx/20)-1, int(sx / 20) + 1): for y in xrange(-int(sx/20)-1, int(sy / 20) + 1): x1 = sx/2+x * 10 x2 = x1 + 10 y1 = sx/2+y * 10 y2 = y1 + 10 x1 = max(min(x1, sx), 0) y1 = max(min(y1, sy), 0) x2 = max(min(x2, sx), 0) y2 = max(min(y2, sy), 0) if (x & 1) == (y & 1): glColor4ub(5, 171, 231, 127) else: glColor4ub(5 * 8 / 10, 171 * 8 / 10, 231 * 8 / 10, 128) glBegin(GL_QUADS) glVertex3f(x1, y1, -0.01) glVertex3f(x2, y1, -0.01) glVertex3f(x2, y2, -0.01) glVertex3f(x1, y2, -0.01) glEnd() glEnable(GL_CULL_FACE) glColor4ub(5, 171, 231, 64) glBegin(GL_QUADS) glVertex3f(0, 0, machineSize.z) glVertex3f(0, machineSize.y, machineSize.z) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glVertex3f(machineSize.x, 0, machineSize.z) glEnd() glColor4ub(5, 171, 231, 96) glBegin(GL_QUADS) glVertex3f(0, 0, 0) glVertex3f(0, 0, machineSize.z) glVertex3f(machineSize.x, 0, machineSize.z) glVertex3f(machineSize.x, 0, 0) glVertex3f(0, machineSize.y, machineSize.z) glVertex3f(0, machineSize.y, 0) glVertex3f(machineSize.x, machineSize.y, 0) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glEnd() glColor4ub(5, 171, 231, 128) glBegin(GL_QUADS) glVertex3f(0, 0, machineSize.z) glVertex3f(0, 0, 0) glVertex3f(0, machineSize.y, 0) glVertex3f(0, machineSize.y, machineSize.z) glVertex3f(machineSize.x, 0, 0) glVertex3f(machineSize.x, 0, machineSize.z) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glVertex3f(machineSize.x, machineSize.y, 0) glEnd() glDisable(GL_BLEND) glPushMatrix() glTranslate(5, 5, 2) glLineWidth(2) glColor3f(0.5, 0, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(20, 0, 0) glEnd() glColor3f(0, 0.5, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(0, 20, 0) glEnd() glColor3f(0, 0, 0.5) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(0, 0, 20) glEnd() glDisable(GL_DEPTH_TEST) #X glColor3f(1, 0, 0) glPushMatrix() glTranslate(23, 0, 0) noZ = ResetMatrixRotationAndScale() glBegin(GL_LINES) glVertex3f(-0.8, 1, 0) glVertex3f(0.8, -1, 0) glVertex3f(0.8, 1, 0) glVertex3f(-0.8, -1, 0) glEnd() glPopMatrix() #Y glColor3f(0, 1, 0) glPushMatrix() glTranslate(0, 23, 0) ResetMatrixRotationAndScale() glBegin(GL_LINES) glVertex3f(-0.8, 1, 0) glVertex3f(0.0, 0, 0) glVertex3f(0.8, 1, 0) glVertex3f(-0.8, -1, 0) glEnd() glPopMatrix() #Z if not noZ: glColor3f(0, 0, 1) glPushMatrix() glTranslate(0, 0, 23) ResetMatrixRotationAndScale() glBegin(GL_LINES) glVertex3f(-0.8, 1, 0) glVertex3f(0.8, 1, 0) glVertex3f(0.8, 1, 0) glVertex3f(-0.8, -1, 0) glVertex3f(-0.8, -1, 0) glVertex3f(0.8, -1, 0) glEnd() glPopMatrix() glPopMatrix() glEnable(GL_DEPTH_TEST)
def DrawMachine(machineSize): glDisable(GL_LIGHTING) glDisable(GL_CULL_FACE) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) sx = machineSize.x sy = machineSize.y for x in xrange(-int(sx / 20) - 1, int(sx / 20) + 1): for y in xrange(-int(sx / 20) - 1, int(sy / 20) + 1): x1 = sx / 2 + x * 10 x2 = x1 + 10 y1 = sx / 2 + y * 10 y2 = y1 + 10 x1 = max(min(x1, sx), 0) y1 = max(min(y1, sy), 0) x2 = max(min(x2, sx), 0) y2 = max(min(y2, sy), 0) if (x & 1) == (y & 1): glColor4ub(5, 171, 231, 127) else: glColor4ub(5 * 8 / 10, 171 * 8 / 10, 231 * 8 / 10, 128) glBegin(GL_QUADS) glVertex3f(x1, y1, -0.02) glVertex3f(x2, y1, -0.02) glVertex3f(x2, y2, -0.02) glVertex3f(x1, y2, -0.02) glEnd() glEnable(GL_CULL_FACE) if profile.getPreference('machine_type') == 'ultimaker': glPushMatrix() glEnable(GL_LIGHTING) glTranslate(100, 200, -1) glLightfv(GL_LIGHT0, GL_DIFFUSE, [0.8, 0.8, 0.8]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.5, 0.5, 0.5]) glEnable(GL_BLEND) glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR) global platformMesh if platformMesh is None: try: platformMesh = meshLoader.loadMesh( getPathForMesh('ultimaker_platform.stl')) except: platformMesh = False if platformMesh: DrawMesh(platformMesh) glPopMatrix() glDisable(GL_LIGHTING) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glColor4ub(5, 171, 231, 64) glBegin(GL_QUADS) glVertex3f(0, 0, machineSize.z) glVertex3f(0, machineSize.y, machineSize.z) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glVertex3f(machineSize.x, 0, machineSize.z) glEnd() glColor4ub(5, 171, 231, 96) glBegin(GL_QUADS) glVertex3f(0, 0, 0) glVertex3f(0, 0, machineSize.z) glVertex3f(machineSize.x, 0, machineSize.z) glVertex3f(machineSize.x, 0, 0) glVertex3f(0, machineSize.y, machineSize.z) glVertex3f(0, machineSize.y, 0) glVertex3f(machineSize.x, machineSize.y, 0) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glEnd() glColor4ub(5, 171, 231, 128) glBegin(GL_QUADS) glVertex3f(0, 0, machineSize.z) glVertex3f(0, 0, 0) glVertex3f(0, machineSize.y, 0) glVertex3f(0, machineSize.y, machineSize.z) glVertex3f(machineSize.x, 0, 0) glVertex3f(machineSize.x, 0, machineSize.z) glVertex3f(machineSize.x, machineSize.y, machineSize.z) glVertex3f(machineSize.x, machineSize.y, 0) glEnd() glDisable(GL_BLEND) #Draw the X/Y/Z indicator glPushMatrix() glTranslate(5, 5, 2) glLineWidth(2) glColor3f(0.5, 0, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(20, 0, 0) glEnd() glColor3f(0, 0.5, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(0, 20, 0) glEnd() glColor3f(0, 0, 0.5) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(0, 0, 20) glEnd() glDisable(GL_DEPTH_TEST) #X glColor3f(1, 0, 0) glPushMatrix() glTranslate(20, 0, 0) noZ = ResetMatrixRotationAndScale() glDrawStringCenter("X") glPopMatrix() #Y glColor3f(0, 1, 0) glPushMatrix() glTranslate(0, 20, 0) glDrawStringCenter("Y") glPopMatrix() #Z if not noZ: glColor3f(0, 0, 1) glPushMatrix() glTranslate(0, 0, 20) glDrawStringCenter("Z") glPopMatrix() glPopMatrix() glEnable(GL_DEPTH_TEST)