# Python: module skeinforge_application.skeinforge_plugins.craft_plugins.raft

skeinforge_application.skeinforge_plugins.craft_plugins.raft ($Date: 2008/21/04 $) | index /home/enrique/Desktop/backup/babbleold/script/reprap/fabmetheus/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py

Previous / Next / Contents

`
Raft is a plugin to create a raft, elevate the nozzle and set the temperature. A raft is a flat base structure on top of which your object is being build and has a few different purposes. It fills irregularities like scratches and pits in your printbed and gives you a nice base parallel to the printheads movement. It also glues your object to the bed so to prevent warping in bigger object. The rafts base layer performs these tricks while the sparser interface layer(s) help you removing the object from the raft after printing. It is based on the Nophead's reusable raft, which has a base layer running one way, and a couple of perpendicular layers above. Each set of layers can be set to a different temperature. There is the option of having the extruder orbit the raft for a while, so the heater barrel has time to reach a different temperature, without ooze accumulating around the nozzle.
The raft manual page is at:
http://fabmetheus.crsndoo.com/wiki/index.php/Skeinforge_Raft
The important values for the raft settings are the temperatures of the raft, the first layer and the next layers. These will be different for each material. The default settings for ABS, HDPE, PCL & PLA are extrapolated from Nophead's experiments.
You don't necessarily need a raft and especially small object will print fine on a flat bed without one, sometimes its even better when you need a water tight base to print directly on the bed. If you want to only set the temperature or only create support material or only elevate the nozzle without creating a raft, set the Base Layers and Interface Layers to zero.
<gallery perRow="1">
Image:Raft.jpg|Raft
</gallery>
Example of a raft on the left with the interface layers partially removed exposing the base layer. Notice that the first line of the base is rarely printed well because of the startup time of the extruder. On the right you see an object with its raft still attached.
The Raft panel has some extra settings, it probably made sense to have them there but they have not that much to do with the actual Raft. First are the Support material settings. Since close to all RepRap style printers have no second extruder for support material Skeinforge offers the option to print support structures with the same material set at a different speed and temperature. The idea is that the support sticks less to the actual object when it is extruded around the minimum possible working temperature. This results in a temperature change EVERY layer so build time will increase seriously.
Allan Ecker aka The Masked Retriever's has written two quicktips for raft which follow below.
"Skeinforge Quicktip: The Raft, Part 1" at:
http://blog.thingiverse.com/2009/07/14/skeinforge-quicktip-the-raft-part-1/
"Skeinforge Quicktip: The Raft, Part II" at:
http://blog.thingiverse.com/2009/08/04/skeinforge-quicktip-the-raft-part-ii/
Nophead has written about rafts on his blog:
http://hydraraptor.blogspot.com/2009/07/thoughts-on-rafts.html
More pictures of rafting in action are available from the Metalab blog at:
http://reprap.soup.io/?search=rafting
Operation
Settings
Add Raft, Elevate Nozzle, Orbit
Base
Base Feed Rate Multiplier
Base Flow Rate Multiplier
Base Infill Density
Base Layer Height over Layer Thickness
Base Layers
Base Nozzle Lift over Base Layer Thickness
Initial Circling
Infill Overhang over Extrusion Width
Interface
Interface Feed Rate Multiplier
Interface Flow Rate Multiplier
Interface Infill Density
Interface Layer Thickness over Extrusion Height
Interface Layers
Interface Nozzle Lift over Interface Layer Thickness
Name of Alteration Files
Name of Support End File
Name of Support Start File
Operating Nozzle Lift over Layer Thickness
Raft Size
Raft Additional Margin over Length
Raft Margin
Support
Support Cross Hatch
Support Flow Rate over Operating Flow Rate
Support Gap over Perimeter Extrusion Width
Support Material Choice
Empty Layers Only
Everywhere
Exterior Only
None
Support Minimum Angle
Examples
`

## Operation

Default: On
When it is on, the functions described below will work, when it is off, nothing will be done, so no temperatures will be set, nozzle will not be lifted..

## Settings

### Add Raft, Elevate Nozzle, Orbit

Default: On
When selected, the script will also create a raft, elevate the nozzle, orbit and set the altitude of the bottom of the raft. It also turns on support generation.

### Base

Base layer is the part of the raft that touches the bed.

#### Base Feed Rate Multiplier

Default is one.
Defines the base feed rate multiplier. The greater the 'Base Feed Rate Multiplier', the thinner the base, the lower the 'Base Feed Rate Multiplier', the thicker the base.

#### Base Flow Rate Multiplier

Default is one.
Defines the base flow rate multiplier. The greater the 'Base Flow Rate Multiplier', the thicker the base, the lower the 'Base Flow Rate Multiplier', the thinner the base.

#### Base Infill Density

Default is 0.5.
Defines the infill density ratio of the base of the raft.

#### Base Layer Height over Layer Thickness

Default is two.
Defines the ratio of the height & width of the base layer compared to the height and width of the object infill. The feed rate will be slower for raft layers which have thicker extrusions than the object infill.

#### Base Layers

Default is one.
Defines the number of base layers.

#### Base Nozzle Lift over Base Layer Thickness

Default is 0.4.
Defines the amount the nozzle is above the center of the base extrusion divided by the base layer thickness.

### Initial Circling

Default is off.
When selected, the extruder will initially circle around until it reaches operating temperature.

### Infill Overhang over Extrusion Width

Default is 0.05.
Defines the ratio of the infill overhang over the the extrusion width of the raft.

### Interface

#### Interface Feed Rate Multiplier

Default is one.
Defines the interface feed rate multiplier. The greater the 'Interface Feed Rate Multiplier', the thinner the interface, the lower the 'Interface Feed Rate Multiplier', the thicker the interface.

#### Interface Flow Rate Multiplier

Default is one.
Defines the interface flow rate multiplier. The greater the 'Interface Flow Rate Multiplier', the thicker the interface, the lower the 'Interface Flow Rate Multiplier', the thinner the interface.

#### Interface Infill Density

Default is 0.5.
Defines the infill density ratio of the interface of the raft.

#### Interface Layer Thickness over Extrusion Height

Default is one.
Defines the ratio of the height & width of the interface layer compared to the height and width of the object infill. The feed rate will be slower for raft layers which have thicker extrusions than the object infill.

#### Interface Layers

Default is two.
Defines the number of interface layers to print.

#### Interface Nozzle Lift over Interface Layer Thickness

Default is 0.45.
Defines the amount the nozzle is above the center of the interface extrusion divided by the interface layer thickness.

### Name of Alteration Files

If support material is generated, raft looks for alteration files in the alterations folder in the .skeinforge folder in the home directory. Raft does not care if the text file names are capitalized, but some file systems do not handle file name cases properly, so to be on the safe side you should give them lower case names. If it doesn't find the file it then looks in the alterations folder in the skeinforge_plugins folder.

#### Name of Support End File

Default is support_end.gcode.
If support material is generated and if there is a file with the name of the "Name of Support End File" setting, it will be added to the end of the support gcode.

#### Name of Support Start File

If support material is generated and if there is a file with the name of the "Name of Support Start File" setting, it will be added to the start of the support gcode.

### Operating Nozzle Lift over Layer Thickness

Default is 0.5.
Defines the amount the nozzle is above the center of the operating extrusion divided by the layer height.

### Raft Size

The raft fills a rectangle whose base size is the rectangle around the bottom layer of the object expanded on each side by the 'Raft Margin' plus the 'Raft Additional Margin over Length (%)' percentage times the length of the side.

#### Raft Additional Margin over Length

Default is 1 percent.

#### Raft Margin

Default is three millimeters.

### Support

Good articles on support material are at:
http://davedurant.wordpress.com/2010/07/31/skeinforge-support-part-1/
http://davedurant.wordpress.com/2010/07/31/skeinforge-support-part-2/

#### Support Cross Hatch

Default is off.
When selected, the support material will cross hatched. Cross hatching the support makes it stronger and harder to remove, which is why the default is off.

#### Support Flow Rate over Operating Flow Rate

Default: 0.9.
Defines the ratio of the flow rate when the support is extruded over the operating flow rate. With a number less than one, the support flow rate will be smaller so the support will be thinner and easier to remove.

#### Support Gap over Perimeter Extrusion Width

Default: 0.5.
Defines the gap between the support material and the object over the edge extrusion width.

#### Support Material Choice

Default is 'None' because the raft takes time to generate.

##### Empty Layers Only

When selected, support material will be only on the empty layers. This is useful when making identical objects in a stack.

##### Everywhere

When selected, support material will be added wherever there are overhangs, even inside the object. Because support material inside objects is hard or impossible to remove, this option should only be chosen if the object has a cavity that needs support and there is some way to extract the support material.

##### Exterior Only

When selected, support material will be added only the exterior of the object. This is the best option for most objects which require support material.

##### None

When selected, raft will not add support material.

#### Support Minimum Angle

Default is sixty degrees.
Defines the minimum angle that a surface overhangs before support material is added. If angle is lower then this value the support will be generated. This angle is defined from the vertical, so zero is a vertical wall, ten is a wall with a bit of overhang, thirty is the typical safe angle for filament extrusion, sixty is a really high angle for extrusion and ninety is an unsupported horizontal ceiling.

## Examples

The following examples raft the file Screw Holder Bottom.stl. The examples are run in a terminal in the folder which contains Screw Holder Bottom.stl and raft.py.
> python raft.py
This brings up the raft dialog.
> python raft.py Screw Holder Bottom.stl
The raft tool is parsing the file:
Screw Holder Bottom.stl
..
The raft tool has created the file:
Screw Holder Bottom_raft.gcode

Previous / Next / Contents

Modules

``

__init__
fabmetheus_utilities.archive
fabmetheus_utilities.euclidean
fabmetheus_utilities.fabmetheus_tools.fabmetheus_interpret

fabmetheus_utilities.gcodec
fabmetheus_utilities.intercircle
math
os

fabmetheus_utilities.settings
skeinforge_application.skeinforge_utilities.skeinforge_craft
skeinforge_application.skeinforge_utilities.skeinforge_polyfile
skeinforge_application.skeinforge_utilities.skeinforge_profile

sys
fabmetheus_utilities.geometry.solids.triangle_mesh

Classes

``

RaftRepository
RaftSkein
SupportLayer

class RaftRepository
`` | `A class to handle the raft settings.`

Methods defined here:

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

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

class RaftSkein
`` | `A class to raft a skein of extrusions.`

Methods defined here:

__init__(self)

addBaseLayer(self)
  `Add a base layer.`

addBaseSegments(self, baseExtrusionWidth)
  `Add the base segments.`

addEmptyLayerSupport(self, boundaryLayerIndex)
  `Add support material to a layer if it is empty.`

addFlowRate(self, flowRate)
  `Add a flow rate value if different.`

addInterfaceLayer(self)
  `Add an interface layer.`

addInterfaceTables(self, interfaceExtrusionWidth)
  `Add interface tables.`

addLayerFromEndpoints(self, endpoints, feedRateMultiplier, flowRateMultiplier, layerLayerThickness, layerThicknessRatio, step, z)
  `Add a layer from endpoints and raise the extrusion top.`

addLayerLine(self, z)
  `Add the layer gcode line and close the last layer gcode block.`

addOperatingOrbits(self, boundaryLoops, pointComplex, temperatureChangeTime, z)
  `Add the orbits before the operating layers.`

addRaft(self)
  `Add the raft.`

addRaftPerimeters(self)
  `Add raft edges if there is a raft.`

addRaftPerimetersByLoops(self, loops, outset)
  `Add raft edges to the gcode for loops.`

addRaftedLine(self, splitLine)
  `Add elevated gcode line with operating feed rate.`

addSegmentTablesToSupportLayers(self)
  `Add segment tables to the support layers.`

addSupportLayerTemperature(self, endpoints, z)
  `Add support layer and temperature before the object layer.`

addSupportSegmentTable(self, layerIndex)
  `Add support segments from the boundary layers.`

addTemperatureLineIfDifferent(self, temperature)
  `Add a line of temperature if different.`

addTemperatureOrbits(self, endpoints, temperature, z)
  `Add the temperature and orbits around the support layer.`

addToFillXIntersectionIndexTables(self, supportLayer)
  `Add fill segments from the boundary layers.`

extendXIntersections(self, loops, radius, xIntersectionsTable)
  `Extend the support segments.`

getCraftedGcode(self, gcodeText, repository)
  `Parse gcode text and store the raft gcode.`

getElevatedBoundaryLine(self, splitLine)
  `Get elevated boundary gcode line.`

getInsetLoops(self, boundaryLayerIndex)
  `Inset the support loops if they are not already inset.`

getInsetLoopsAbove(self, boundaryLayerIndex)
  `Get the inset loops above the boundary layer index.`

getInsetLoopsBelow(self, boundaryLayerIndex)
  `Get the inset loops below the boundary layer index.`

getStepsUntilEnd(self, begin, end, stepSize)
  `Get steps from the beginning until the end.`

getSupportEndpoints(self)
  `Get the support layer segments.`

getTemperatureChangeTime(self, temperature)
  `Get the temperature change time.`

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

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

setBoundaryLayers(self)
  `Set the boundary layers.`

setCornersZ(self)
  `Set maximum and minimum corners and z.`

subtractJoinedFill(self, supportLayerIndex)
  `Join the fill then subtract it from the support layer table.`

truncateSupportSegmentTables(self)
  `Truncate the support segments after the last support segment which contains elements.`

class SupportLayer
`` | `Support loops with segment tables.`

Methods defined here:

__init__(self, supportLoops)

__repr__(self)
  `Get the string representation of this loop layer.`

Functions

``

getCraftedText(fileName, text='', repository=None)
  `Raft the file or text.`

getCraftedTextFromText(gcodeText, repository=None)
  `Raft a gcode linear move text.`

getCrossHatchPointLine(crossHatchPointLineTable, y)
  `Get the cross hatch point line.`

getEndpointsFromYIntersections(x, yIntersections)
  `Get endpoints from the y intersections.`

getExtendedLineSegment(extensionDistance, lineSegment, loopXIntersections)
  `Get extended line segment.`

getLoopsBySegmentsDictionary(segmentsDictionary, width)
  `Get loops from a horizontal segments dictionary.`

getNewRepository()
  `Get new repository.`

getVerticalEndpoints(horizontalSegmentsTable, horizontalStep, verticalOverhang, verticalStep)
  `Get vertical endpoints.`

main()
  `Display the raft dialog.`

setExtendedPoint(lineSegmentEnd, pointOriginal, x)
  `Set the point in the extended line segment.`

writeOutput(fileName, shouldAnalyze=True)
  `Raft a gcode linear move file.`

Data
`` |  | __author__ = 'Enrique Perez (perez_enrique@yahoo.com)' __date__ = '$Date: 2008/21/04 $' __license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html' absolute_import = _Feature((2, 5, 0, 'alpha', 1), (2, 7, 0, 'alpha', 0), 16384)

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