From: daid303 Date: Tue, 29 Jan 2013 09:01:57 +0000 (+0100) Subject: Only draw the GCode layers when they are on screen, to remove the slowdown in model... X-Git-Tag: 13.03~66 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=31810090f5c2570ab5a6a03b51d9475a22e8a893;p=cura.git Only draw the GCode layers when they are on screen, to remove the slowdown in model view. Fix the minimal feedrate problems in the cooling plugin. --- diff --git a/Cura/gui/preview3d.py b/Cura/gui/preview3d.py index 2e1451c2..320f3012 100644 --- a/Cura/gui/preview3d.py +++ b/Cura/gui/preview3d.py @@ -389,7 +389,7 @@ class previewPanel(wx.Panel): self.gcodeViewButton.Show(self.gcode != None) self.mixedViewButton.Show(self.gcode != None) self.layerSpin.Show(self.glCanvas.viewMode == "GCode" or self.glCanvas.viewMode == "Mixed") - if self.gcode != None: + if self.gcode is not None: self.layerSpin.SetRange(1, len(self.gcode.layerList) - 1) self.toolbar.Realize() self.Update() @@ -402,6 +402,7 @@ class previewPanel(wx.Panel): elif self.xrayViewButton.GetValue(): self.glCanvas.viewMode = "X-Ray" elif self.gcodeViewButton.GetValue(): + self.layerSpin.SetValue(self.layerSpin.GetMax()) self.glCanvas.viewMode = "GCode" elif self.mixedViewButton.GetValue(): self.glCanvas.viewMode = "Mixed" @@ -478,6 +479,9 @@ class PreviewGLCanvas(openglGui.glGuiPanel): p1 -= self.viewTarget if not e.Dragging() or self.dragType != 'tool': self.parent.tool.OnMouseMove(p0, p1) + else: + p0 = [0,0,0] + p1 = [1,0,0] if e.Dragging() and e.LeftIsDown(): if self.dragType == '': @@ -569,21 +573,22 @@ class PreviewGLCanvas(openglGui.glGuiPanel): def OnDraw(self): machineSize = self.parent.machineSize - if self.parent.gcode is not None and self.parent.gcodeDirty: - if self.gcodeDisplayListCount < len(self.parent.gcode.layerList) or self.gcodeDisplayList is None: - if self.gcodeDisplayList is not None: - glDeleteLists(self.gcodeDisplayList, self.gcodeDisplayListCount) - self.gcodeDisplayList = glGenLists(len(self.parent.gcode.layerList)) - self.gcodeDisplayListCount = len(self.parent.gcode.layerList) - self.parent.gcodeDirty = False - self.gcodeDisplayListMade = 0 - - if self.parent.gcode is not None and self.gcodeDisplayListMade < len(self.parent.gcode.layerList): - glNewList(self.gcodeDisplayList + self.gcodeDisplayListMade, GL_COMPILE) - opengl.DrawGCodeLayer(self.parent.gcode.layerList[self.gcodeDisplayListMade]) - glEndList() - self.gcodeDisplayListMade += 1 - wx.CallAfter(self.Refresh) + if self.parent.gcode is not None and (self.viewMode == "GCode" or self.viewMode == "Mixed"): + if self.parent.gcodeDirty: + if self.gcodeDisplayListCount < len(self.parent.gcode.layerList) or self.gcodeDisplayList is None: + if self.gcodeDisplayList is not None: + glDeleteLists(self.gcodeDisplayList, self.gcodeDisplayListCount) + self.gcodeDisplayList = glGenLists(len(self.parent.gcode.layerList)) + self.gcodeDisplayListCount = len(self.parent.gcode.layerList) + self.parent.gcodeDirty = False + self.gcodeDisplayListMade = 0 + + if self.gcodeDisplayListMade < len(self.parent.gcode.layerList): + glNewList(self.gcodeDisplayList + self.gcodeDisplayListMade, GL_COMPILE) + opengl.DrawGCodeLayer(self.parent.gcode.layerList[self.gcodeDisplayListMade]) + glEndList() + self.gcodeDisplayListMade += 1 + wx.CallAfter(self.Refresh) glPushMatrix() glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0) diff --git a/Cura/gui/projectPlanner.py b/Cura/gui/projectPlanner.py index 377bd997..863c3dda 100644 --- a/Cura/gui/projectPlanner.py +++ b/Cura/gui/projectPlanner.py @@ -631,6 +631,10 @@ class PreviewGLCanvas(openglGui.glGuiPanel): p1 -= self.getObjectCenterPos() - self.viewTarget if not e.Dragging() or self.dragType != 'tool': self.parent.tool.OnMouseMove(p0, p1) + else: + p0 = [0,0,0] + p1 = [1,0,0] + if self.allowDrag and e.Dragging() and e.LeftIsDown(): if self.dragType == '': #Define the drag type depending on the cursor position. diff --git a/Cura/gui/util/openglGui.py b/Cura/gui/util/openglGui.py index ee1426db..1f5900ce 100644 --- a/Cura/gui/util/openglGui.py +++ b/Cura/gui/util/openglGui.py @@ -35,10 +35,12 @@ class glGuiPanel(glcanvas.GLCanvas): def _OnGuiMouseMotion(self,e): self.Refresh() + handled = False for ctrl in self._glGuiControlList: if ctrl.OnMouseMotion(e.GetX(), e.GetY()): - return - self.OnMouseMotion(e) + handled = True + if not handled: + self.OnMouseMotion(e) def _OnGuiPaint(self, e): h = self.GetSize().GetHeight() diff --git a/Cura/slice/cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py b/Cura/slice/cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py index db54b48b..66b3e58f 100644 --- a/Cura/slice/cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py +++ b/Cura/slice/cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py @@ -263,7 +263,7 @@ class CoolSkein(object): def getCoolMove(self, line, location, splitLine): 'Get cool line according to time spent on layer.' self.feedRateMinute = gcodec.getFeedRateMinute(self.feedRateMinute, splitLine) - return self.distanceFeedRate.getLineWithFeedRate(max(self.minFeedrate, self.multiplier * self.feedRateMinute), line, splitLine) + return self.distanceFeedRate.getLineWithFeedRate(self.multiplier * self.feedRateMinute, line, splitLine) def getCraftedGcode(self, gcodeText, repository): 'Parse gcode text and store the cool gcode.' @@ -420,6 +420,8 @@ class CoolSkein(object): layerTimeActive = self.getLayerTimeActive() if remainingOrbitTime + layerTimeActive > 0.00001: self.multiplier = min(1.0, layerTimeActive / (remainingOrbitTime + layerTimeActive)) + if self.feedRateMinute * self.multiplier < self.minFeedrate: + self.multiplier = self.minFeedrate / self.feedRateMinute else: self.multiplier = 1.0