X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=Cura%2Fgui%2FsceneView.py;h=01ce44a03da8d3791f7108503fec3ba7870964bf;hb=805ed88766a2abf1cb9c9f4691c9989423c99a3e;hp=c757bf622993afad49c4a85d0687a78983d8ce94;hpb=01107f8f060bb2fb5e4eaafc17b66a972758b94b;p=cura.git diff --git a/Cura/gui/sceneView.py b/Cura/gui/sceneView.py index c757bf62..01ce44a0 100644 --- a/Cura/gui/sceneView.py +++ b/Cura/gui/sceneView.py @@ -24,6 +24,7 @@ from Cura.util import sliceEngine from Cura.util import machineCom from Cura.util import removableStorage from Cura.util import gcodeInterpreter +from Cura.util.printerConnection import printerConnectionManager from Cura.gui.util import previewTools from Cura.gui.util import opengl from Cura.gui.util import openglGui @@ -56,6 +57,7 @@ class SceneView(openglGui.glGuiPanel): self._platformMesh = {} self._isSimpleMode = True self._usbPrintMonitor = printWindow.printProcessMonitor(lambda : self._queueRefresh()) + self._printerConnectionManager = printerConnectionManager.PrinterConnectionManager() self._viewport = None self._modelMatrix = None @@ -222,9 +224,11 @@ class SceneView(openglGui.glGuiPanel): def OnPrintButton(self, button): if button == 1: + + connectionEntry = self._printerConnectionManager.getAvailableConnection() if machineCom.machineIsConnected(): self.showPrintWindow() - elif len(removableStorage.getPossibleSDcardDrives()) > 0: + elif len(removableStorage.getPossibleSDcardDrives()) > 0 and (connectionEntry is None or connectionEntry.priority < 0): drives = removableStorage.getPossibleSDcardDrives() if len(drives) > 1: dlg = wx.SingleChoiceDialog(self, "Select SD drive", "Multiple removable drives have been found,\nplease select your SD card drive", map(lambda n: n[0], drives)) @@ -237,6 +241,9 @@ class SceneView(openglGui.glGuiPanel): drive = drives[0] filename = self._scene._objectList[0].getName() + '.gcode' threading.Thread(target=self._copyFile,args=(self._gcodeFilename, drive[1] + filename, drive[1])).start() + elif connectionEntry is not None: + connectionEntry.connection.loadFile(self._gcodeFilename) + connectionEntry.connection.startPrint() else: self.showSaveGCode() if button == 3: @@ -250,6 +257,9 @@ class SceneView(openglGui.glGuiPanel): def showPrintWindow(self): if self._gcodeFilename is None: return + if profile.getMachineSetting('gcode_flavor') == 'UltiGCode': + wx.MessageBox(_("USB printing on the Ultimaker2 is not supported."), _("USB Printing Error"), wx.OK | wx.ICON_WARNING) + return self._usbPrintMonitor.loadFile(self._gcodeFilename, self._slicer.getID()) if self._gcodeFilename == self._slicer.getGCodeFilename(): self._slicer.submitSliceInfoOnline() @@ -380,10 +390,10 @@ class SceneView(openglGui.glGuiPanel): self._scene.pushFree() #self.sceneUpdated() if machine == "ultimaker2": - self._selectedObj.setPosition(numpy.array([0.0,-22.5])) - + #This is bad and Jaime should feel bad! + self._selectedObj.setPosition(numpy.array([0.0,-10.0])) self._selectedObj.scaleUpTo(self._machineSize - numpy.array(profile.calculateObjectSizeOffsets() + [0.0], numpy.float32) * 2 - numpy.array([1,1,1], numpy.float32)) - self._selectedObj.setPosition(numpy.array([0.0,-15])) + self._selectedObj.setPosition(numpy.array([0.0,0.0])) self._scene.pushFree() else: self._selectedObj.setPosition(numpy.array([0.0, 0.0])) @@ -492,7 +502,7 @@ class SceneView(openglGui.glGuiPanel): def sceneUpdated(self): self._sceneUpdateTimer.Start(500, True) self._slicer.abortSlicer() - self._scene.setSizeOffsets(numpy.array(profile.calculateObjectSizeOffsets(), numpy.float32)) + self._scene.updateSizeOffsets() self.QueueRefresh() def _onRunSlicer(self, e): @@ -613,7 +623,6 @@ class SceneView(openglGui.glGuiPanel): self._objColors[2] = profile.getPreferenceColour('model_colour3') self._objColors[3] = profile.getPreferenceColour('model_colour4') self._scene.setMachineSize(self._machineSize) - self._scene.setSizeOffsets(numpy.array(profile.calculateObjectSizeOffsets(), numpy.float32)) self._scene.setHeadSize(profile.getMachineSettingFloat('extruder_head_size_min_x'), profile.getMachineSettingFloat('extruder_head_size_max_x'), profile.getMachineSettingFloat('extruder_head_size_min_y'), profile.getMachineSettingFloat('extruder_head_size_max_y'), profile.getMachineSettingFloat('extruder_head_size_height')) if self._selectedObj is not None: @@ -827,12 +836,16 @@ class SceneView(openglGui.glGuiPanel): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT) def OnPaint(self,e): + connectionEntry = self._printerConnectionManager.getAvailableConnection() if machineCom.machineIsConnected(): self.printButton._imageID = 6 self.printButton._tooltip = _("Print") - elif len(removableStorage.getPossibleSDcardDrives()) > 0: + elif len(removableStorage.getPossibleSDcardDrives()) > 0 and (connectionEntry is None or connectionEntry.priority < 0): self.printButton._imageID = 2 self.printButton._tooltip = _("Toolpath to SD") + elif connectionEntry is not None: + self.printButton._imageID = connectionEntry.icon + self.printButton._tooltip = _("Print with %s") % (connectionEntry.name) else: self.printButton._imageID = 3 self.printButton._tooltip = _("Save toolpath") @@ -1146,19 +1159,31 @@ void main(void) glPopMatrix() else: #Draw the object box-shadow, so you can see where it will collide with other objects. - if self._selectedObj is not None and len(self._scene.objects()) > 1: - size = self._selectedObj.getSize()[0:2] / 2 + self._scene.getObjectExtend() - glPushMatrix() - glTranslatef(self._selectedObj.getPosition()[0], self._selectedObj.getPosition()[1], 0) + if self._selectedObj is not None: glEnable(GL_BLEND) glEnable(GL_CULL_FACE) - glColor4f(0,0,0,0.12) - glBegin(GL_QUADS) - glVertex3f(-size[0], size[1], 0.1) - glVertex3f(-size[0], -size[1], 0.1) - glVertex3f( size[0], -size[1], 0.1) - glVertex3f( size[0], size[1], 0.1) + glColor4f(0,0,0,0.16) + glDepthMask(False) + for obj in self._scene.objects(): + glPushMatrix() + glTranslatef(obj.getPosition()[0], obj.getPosition()[1], 0) + glBegin(GL_TRIANGLE_FAN) + for p in obj._boundaryHull[::-1]: + glVertex3f(p[0], p[1], 0) + glEnd() + glPopMatrix() + glPushMatrix() + glColor4f(0,0,0,0.06) + glTranslatef(self._selectedObj.getPosition()[0], self._selectedObj.getPosition()[1], 0) + glBegin(GL_TRIANGLE_FAN) + for p in self._selectedObj._printAreaHull[::-1]: + glVertex3f(p[0], p[1], 0) glEnd() + glBegin(GL_TRIANGLE_FAN) + for p in self._selectedObj._headAreaHull[::-1]: + glVertex3f(p[0], p[1], 0) + glEnd() + glDepthMask(True) glDisable(GL_CULL_FACE) glPopMatrix() @@ -1309,6 +1334,7 @@ void main(void) glEnableClientState(GL_VERTEX_ARRAY) glVertexPointer(3, GL_FLOAT, 3*4, vList) + glDepthMask(False) glColor4ub(5, 171, 231, 64) glDrawArrays(GL_QUADS, 0, 4) glColor4ub(5, 171, 231, 96) @@ -1336,10 +1362,10 @@ void main(void) else: glColor4ub(5 * 8 / 10, 171 * 8 / 10, 231 * 8 / 10, 128) glBegin(GL_QUADS) - glVertex3f(x1, y1, -0.02) #Draw bit below z0 to prevent zfighting. - glVertex3f(x2, y1, -0.02) - glVertex3f(x2, y2, -0.02) - glVertex3f(x1, y2, -0.02) + glVertex3f(x1, y1, 0) + glVertex3f(x2, y1, 0) + glVertex3f(x2, y2, 0) + glVertex3f(x1, y2, 0) glEnd() if machine == 'ultimaker2': @@ -1347,52 +1373,51 @@ void main(void) glColor4ub(127, 127, 127, 200) #if UM2, draw bat-area zone for head. THe head can't stop there, because its bat-area. #UpperRight - clipWidth = 50; - clipHeight = 35; - posX = sx / 2 - clipWidth; - posY = sy / 2 - clipHeight; + clipWidth = 25 + clipHeight = 10 + posX = sx / 2 - clipWidth + posY = sy / 2 - clipHeight glBegin(GL_QUADS) - glVertex3f(posX, posY, 0.1) - glVertex3f(posX+clipWidth, posY, 0.1) - glVertex3f(posX+clipWidth, posY+clipHeight, 0.1) - glVertex3f(posX, posY+clipHeight, 0.1) + glVertex3f(posX, posY, 0) + glVertex3f(posX+clipWidth, posY, 0) + glVertex3f(posX+clipWidth, posY+clipHeight, 0) + glVertex3f(posX, posY+clipHeight, 0) glEnd() #UpperLeft - clipWidth = 55; - clipHeight = 35; - posX = -sx / 2; - posY = sy / 2 - clipHeight; + clipWidth = 25 + clipHeight = 10 + posX = -sx / 2 + posY = sy / 2 - clipHeight glBegin(GL_QUADS) - glVertex3f(posX, posY, 0.1) - glVertex3f(posX+clipWidth, posY, 0.1) - glVertex3f(posX+clipWidth, posY+clipHeight, 0.1) - glVertex3f(posX, posY+clipHeight, 0.1) + glVertex3f(posX, posY, 0) + glVertex3f(posX+clipWidth, posY, 0) + glVertex3f(posX+clipWidth, posY+clipHeight, 0) + glVertex3f(posX, posY+clipHeight, 0) glEnd() #LowerRight - clipWidth = 50; - clipHeight = 5; - posX = sx / 2 - clipWidth; - posY = -sy / 2; + clipWidth = 25 + clipHeight = 10 + posX = sx / 2 - clipWidth + posY = -sy / 2 glBegin(GL_QUADS) - glVertex3f(posX, posY, 0.1) - glVertex3f(posX+clipWidth, posY, 0.1) - glVertex3f(posX+clipWidth, posY+clipHeight, 0.1) - glVertex3f(posX, posY+clipHeight, 0.1) + glVertex3f(posX, posY, 0) + glVertex3f(posX+clipWidth, posY, 0) + glVertex3f(posX+clipWidth, posY+clipHeight, 0) + glVertex3f(posX, posY+clipHeight, 0) glEnd() #LowerLeft - clipWidth = 55; - clipHeight = 5; - posX = -sx / 2; - posY = -sy / 2; + clipWidth = 25 + clipHeight = 10 + posX = -sx / 2 + posY = -sy / 2 glBegin(GL_QUADS) - glVertex3f(posX, posY, 0.1) - glVertex3f(posX+clipWidth, posY, 0.1) - glVertex3f(posX+clipWidth, posY+clipHeight, 0.1) - glVertex3f(posX, posY+clipHeight, 0.1) + glVertex3f(posX, posY, 0) + glVertex3f(posX+clipWidth, posY, 0) + glVertex3f(posX+clipWidth, posY+clipHeight, 0) + glVertex3f(posX, posY+clipHeight, 0) glEnd() - - + glDepthMask(True) glDisable(GL_BLEND) glDisable(GL_CULL_FACE)