From 3f5fdd03a5eafcd3390c0878b550e271538d1720 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 1 Apr 2011 10:32:45 +0200 Subject: [PATCH] SF40: backport skirt.py changes from upstream drop This makes the feed and flowrate for skirt configurable. The 'outline' plugin used the slowdown factor from 'raft', but 'skirt' didn't, making it go too fast. Signed-off-by: Koen Kooi --- ...keinforge_plugins.craft_plugins.skirt.html | 2 + .../skeinforge_plugins/craft_plugins/skirt.py | 52 ++++++++++++++++--- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/skein_engines/skeinforge-40/documentation/skeinforge_application.skeinforge_plugins.craft_plugins.skirt.html b/skein_engines/skeinforge-40/documentation/skeinforge_application.skeinforge_plugins.craft_plugins.skirt.html index 55536dad5..b52191d94 100644 --- a/skein_engines/skeinforge-40/documentation/skeinforge_application.skeinforge_plugins.craft_plugins.skirt.html +++ b/skein_engines/skeinforge-40/documentation/skeinforge_application.skeinforge_plugins.craft_plugins.skirt.html @@ -168,6 +168,8 @@
parseLine(self, line)
Parse a gcode line and add it to the skirt skein.
+
setSkirtFeedFlowTemperature(self)
Set the skirt feed rate, flow rate and temperature to that of the next extrusion.
+
unifyLayer(self, loopCrossDictionary)
Union the loopCrossDictionary with the unifiedLoop.

diff --git a/skein_engines/skeinforge-40/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py b/skein_engines/skeinforge-40/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py index 6e1c7b7ca..fdb9acc07 100644 --- a/skein_engines/skeinforge-40/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py +++ b/skein_engines/skeinforge-40/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py @@ -139,6 +139,8 @@ def __init__(self): 'Initialize variables.' self.distanceFeedRate = gcodec.DistanceFeedRate() self.feedRateMinute = 961.0 + self.isExtruderActive = False + self.isSupportLayer = False self.layerCount = settings.LayerCount() self.layerIndex = -1 self.lineIndex = 0 @@ -146,8 +148,8 @@ def __init__(self): self.oldFlowRateInput = None self.oldLocation = None self.oldTemperatureInput = None - self.operatingFlowRate = None - self.operatingTemperature = None + self.skirtFlowRate = None + self.skirtTemperature = None self.travelFeedRateMinute = 957.0 self.unifiedLoop = LoopCrossDictionary() @@ -160,11 +162,12 @@ def addFlowRateLineIfDifferent(self, flowRate): def addSkirt(self, z): 'At skirt at z to gcode output.' + self.setSkirtFeedFlowTemperature() self.distanceFeedRate.addLine('()') oldFlowRate = self.oldFlowRateInput oldTemperature = self.oldTemperatureInput - self.addTemperatureLineIfDifferent(self.operatingTemperature) - self.addFlowRateLineIfDifferent(self.operatingFlowRate) + self.addTemperatureLineIfDifferent(self.skirtTemperature) + self.addFlowRateLineIfDifferent(self.skirtFlowRate) for outsetLoop in self.outsetLoops: closedLoop = outsetLoop + [outsetLoop[0]] self.distanceFeedRate.addGcodeFromFeedRateThreadZ(self.feedRateMinute, closedLoop, self.travelFeedRateMinute, z) @@ -201,7 +204,8 @@ def getCraftedGcode(self, gcodeText, repository): self.parseInitialization() self.parseBoundaries() self.createSkirtLoops() - for line in self.lines[self.lineIndex :]: + for self.lineIndex in xrange(self.lineIndex, len(self.lines)): + line = self.lines[self.lineIndex] self.parseLine(line) return self.distanceFeedRate.output.getvalue() @@ -248,12 +252,12 @@ def parseInitialization(self): return elif firstWord == '(': self.oldTemperatureInput = float(splitLine[1]) - self.operatingTemperature = self.oldTemperatureInput + self.skirtTemperature = self.oldTemperatureInput elif firstWord == '(': self.feedRateMinute = 60.0 * float(splitLine[1]) elif firstWord == '(': self.oldFlowRateInput = float(splitLine[1]) - self.operatingFlowRate = self.oldFlowRateInput + self.skirtFlowRate = self.oldFlowRateInput elif firstWord == '(': self.perimeterWidth = float(splitLine[1]) self.skirtOutset = (self.repository.gapOverPerimeterWidth.value + 0.5) * self.perimeterWidth @@ -275,10 +279,44 @@ def parseLine(self, line): self.layerIndex += 1 if self.layerIndex < self.repository.layersTo.value: self.addSkirt(float(splitLine[1])) + elif firstWord == 'M101': + self.isExtruderActive = True + elif firstWord == 'M103': + self.isExtruderActive = False elif firstWord == 'M104': self.oldTemperatureInput = gcodec.getDoubleAfterFirstLetter(splitLine[1]) elif firstWord == 'M108': self.oldFlowRateInput = gcodec.getDoubleAfterFirstLetter(splitLine[1]) + elif firstWord == '()': + self.isSupportLayer = True + elif firstWord == '()': + self.isSupportLayer = False + + def setSkirtFeedFlowTemperature(self): + 'Set the skirt feed rate, flow rate and temperature to that of the next extrusion.' + isExtruderActive = self.isExtruderActive + isSupportLayer = self.isSupportLayer + for lineIndex in xrange(self.lineIndex, len(self.lines)): + line = self.lines[lineIndex] + splitLine = gcodec.getSplitLineBeforeBracketSemicolon(line) + firstWord = gcodec.getFirstWord(splitLine) + if firstWord == 'G1': + self.feedRateMinute = gcodec.getFeedRateMinute(self.feedRateMinute, splitLine) + if isExtruderActive: + if not isSupportLayer: + return + elif firstWord == 'M101': + isExtruderActive = True + elif firstWord == 'M103': + isExtruderActive = False + elif firstWord == 'M104': + self.skirtTemperature = gcodec.getDoubleAfterFirstLetter(splitLine[1]) + elif firstWord == 'M108': + self.skirtFlowRate = gcodec.getDoubleAfterFirstLetter(splitLine[1]) + elif firstWord == '()': + isSupportLayer = True + elif firstWord == '()': + isSupportLayer = False def unifyLayer(self, loopCrossDictionary): 'Union the loopCrossDictionary with the unifiedLoop.'