# Python: module skeinforge_tools.stretch

skeinforge_tools.stretch ($Date: 2008/21/04 $) | index /home/enrique/Desktop/backup/babbleold/script/reprap/pyRepRap/skeinforge_tools/stretch.py

`Stretch is a script to stretch the threads to partially compensate for filament shrinkage when extruded.
The default 'Activate Stretch' checkbox is on. When it is on, the functions described below will work, when it is off, the functions
will not be called.
The important value for the stretch preferences is "Perimeter Maximum Stretch Over Extrusion Width (ratio)" which is the ratio of
the maximum amount the perimeter thread will be stretched compared to the extrusion width, the default is 0.2. The higher the
value the more it will stretch the perimeter and the wider holes will be. If the value is too small, the holes will have to be
drilled out after fabrication, if the value is too high, the holes will be too wide and the part will have to junked, so the default is
low. The 'Maximum Stretch Over Extrusion Width' is the ratio of the maximum amount the infill threads will be stretched
compared to the extrusion width, in general this value should be around half the Perimeter Maximum Stretch preference.
In general, stretch will widen holes and push corners out. The algorithm works by checking at each turning point on the
extrusion path what the direction of the thread is at a distance of "Stretch from Distance over Extrusion Width (ratio)" times the
extrusion width, on both sides, and moves the thread in the opposite direction. The magnitude of the stretch increases with the
amount that the direction of the two threads is similar and by the Stretch Over Extrusion Width ratio. The script then also
stretches the thread at two locations on the path on close to the turning points. In practice the filament contraction will be
similar but different from the algorithm, so even once the optimal parameters are determined, the stretch script will not be able
to eliminate the inaccuracies caused by contraction, but it should reduce them. To run stretch, in a shell type:
> python stretch.py
The following examples stretch the files Screw Holder Bottom.gcode & Screw Holder Bottom.stl. The examples are run in a terminal in the
folder which contains Screw Holder Bottom.gcode, Screw Holder Bottom.stl and stretch.py. The functions writeOutput and
getStretchChainGcode check to see if the text has been stretched, if not they call the getCoolChainGcode in cool.py to cool the
text; once they have the cooled text, then they stretch.
> python stretch.py Screw Holder Bottom.stl
File Screw Holder Bottom.stl is being chain stretched.
The stretched file is saved as Screw Holder Bottom_stretch.gcode
> python stretch.py
This brings up the dialog, after clicking 'Stretch', the following is printed:
File Screw Holder Bottom.stl is being chain stretched.
The stretched file is saved as Screw Holder Bottom_stretch.gcode
> python
Python 2.5.1 (r251:54863, Sep 22 2007, 01:43:31)
[GCC 4.2.1 (SUSE Linux)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import stretch
>>> stretch.main()
This brings up the stretch dialog.
>>> stretch.writeOutput()
Screw Holder Bottom.stl
File Screw Holder Bottom.stl is being chain stretched.
The stretched file is saved as Screw Holder Bottom_stretch.gcode
>>> stretch.getStretchGcode("
( GCode generated by May 8, 2008 carve.py )
( Extruder Initialization )
..
many lines of gcode
..
")
>>> stretch.getStretchChainGcode("
( GCode generated by May 8, 2008 carve.py )
( Extruder Initialization )
..
many lines of gcode
..
")`

Modules

``

__init__ skeinforge_tools.analyze cStringIO | skeinforge_tools.cool skeinforge_tools.skeinforge_utilities.euclidean skeinforge_tools.skeinforge_utilities.gcodec | skeinforge_tools.skeinforge_utilities.intercircle skeinforge_tools.skeinforge_utilities.interpret skeinforge_tools.polyfile | skeinforge_tools.skeinforge_utilities.preferences sys time

Classes

``

LineIteratorBackward
LineIteratorForward
StretchPreferences
StretchSkein

class LineIteratorBackward
`` | `Backward line iterator class.`

Methods defined here:

__init__(self, isLoop, lineIndex, lines)

getIndexBeforeNextDeactivate(self)
  `Get index two lines before the deactivate command.`

getNext(self)
  `Get next line going backward or raise exception.`

isBeforeExtrusion(self)
  `Determine if index is two or more before activate command.`

class LineIteratorForward
`` | `Forward line iterator class.`

Methods defined here:

__init__(self, isLoop, lineIndex, lines)

getIndexJustAfterActivate(self)
  `Get index just after the activate command.`

getNext(self)
  `Get next line or raise exception.`

class StretchPreferences
`` | `A class to handle the stretch preferences.`

Methods defined here:

__init__(self)
  `Set the default preferences, execute title & preferences fileName.`

execute(self)
  `Stretch button has been clicked.`

class StretchSkein
`` | `A class to stretch a skein of extrusions.`

Methods defined here:

__init__(self)

addAlongWayLine(self, alongWay, location)
  `Add stretched gcode line, along the way from the location to the old location.`

addLine(self, line)
  `Add a line of text and a newline to the output.`

addStretchesBeforePoint(self, location)
  `Get stretched gcode line.`

getRelativeStretch(self, location, lineIndexRange)
  `Get relative stretch for a location minus a point.`

getRounded(self, number)
  `Get number rounded to the number of carried decimal places as a string.`

getStretchedLine(self, splitLine)
  `Get stretched gcode line.`

getStretchedLineFromIndexLocation(self, indexPreviousStart, indexNextStart, location)
  `Get stretched gcode line from line index and location.`

isJustBeforeExtrusion(self)
  `Determine if activate command is before linear move command.`

parseGcode(self, gcodeText, stretchPreferences)
  `Parse gcode text and store the stretch gcode.`

parseInitialization(self)
  `Parse gcode initialization and store the parameters.`

parseStretch(self, line)
  `Parse a gcode line and add it to the stretch skein.`

Functions

``

getStretchChainGcode(fileName, gcodeText, stretchPreferences=None)
  `Stretch a gcode linear move text. Chain stretch the gcode if it is not already stretched.`

getStretchGcode(gcodeText, stretchPreferences=None)
  `Stretch a gcode linear move text.`

main(hashtable=None)
  `Display the stretch dialog.`

writeOutput(fileName='')
  `Stretch a gcode linear move file. Chain stretch the gcode if it is not already stretched. If no fileName is specified, stretch the first unmodified gcode file in this folder.`

Data
`` |  | __author__ = 'Enrique Perez (perez_enrique@yahoo.com)' __date__ = '$Date: 2008/21/04 $' __license__ = 'GPL 3.0' absolute_import = _Feature((2, 5, 0, 'alpha', 1), (2, 7, 0, 'alpha', 0), 16384)

Author
`` |  | Enrique Perez (perez_enrique@yahoo.com)