chiark / gitweb /
Only draw the GCode layers when they are on screen, to remove the slowdown in model...
authordaid303 <daid303@gmail.com>
Tue, 29 Jan 2013 09:01:57 +0000 (10:01 +0100)
committerdaid303 <daid303@gmail.com>
Tue, 29 Jan 2013 09:01:57 +0000 (10:01 +0100)
Cura/gui/preview3d.py
Cura/gui/projectPlanner.py
Cura/gui/util/openglGui.py
Cura/slice/cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py

index 2e1451c2142fa785c8a8a84367cb76ae2c0ecdfa..320f30129fd35854e280263f5fc7cbecb7d2afb8 100644 (file)
@@ -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)
index 377bd9972242f04d46bc7a6a093dac841bd8d827..863c3ddae378c69c71ded901e6be62d41c7e79d9 100644 (file)
@@ -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.
index ee1426db9d785d640c6ddf62369ae636d74106a4..1f5900ce83395cfbbc6e19956ea5f1cc99126c69 100644 (file)
@@ -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()
index db54b48b6cf7e053a6ea9645b127ac2c648961be..66b3e58f98d1ad4bc527c228d1f47e6a28f4d23b 100644 (file)
@@ -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