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.'