<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.cccgoe.de/index.php?action=history&amp;feed=atom&amp;title=3D-Drucker%2FSlic3r%2FPython</id>
	<title>3D-Drucker/Slic3r/Python - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cccgoe.de/index.php?action=history&amp;feed=atom&amp;title=3D-Drucker%2FSlic3r%2FPython"/>
	<link rel="alternate" type="text/html" href="https://wiki.cccgoe.de/index.php?title=3D-Drucker/Slic3r/Python&amp;action=history"/>
	<updated>2026-05-02T12:32:08Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wiki CCC Göttingen</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://wiki.cccgoe.de/index.php?title=3D-Drucker/Slic3r/Python&amp;diff=3900&amp;oldid=prev</id>
		<title>Hefee am 23. Februar 2012 um 21:36 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.cccgoe.de/index.php?title=3D-Drucker/Slic3r/Python&amp;diff=3900&amp;oldid=prev"/>
		<updated>2012-02-23T21:36:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 23. Februar 2012, 21:36 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l8&quot;&gt;Zeile 8:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 8:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===layer0.py:===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===layer0.py:===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;highlightSyntax language=&amp;quot;python&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;highlightSyntax language=&amp;quot;python&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;this script can create simple gcode and using config from &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;slirc&lt;/del&gt;&#039;&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;this script can create simple gcode and using config from &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;slic3r&lt;/ins&gt;&#039;&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;from gcode.config import Config&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;from gcode.config import Config&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff::1.12:old-3899:rev-3900 --&gt;
&lt;/table&gt;</summary>
		<author><name>Hefee</name></author>
	</entry>
	<entry>
		<id>https://wiki.cccgoe.de/index.php?title=3D-Drucker/Slic3r/Python&amp;diff=3899&amp;oldid=prev</id>
		<title>Hefee: Die Seite wurde neu angelegt: „das ganze ist über mehrere Python Module verteilt. getestest mit python 2.7.2:  benötigt werden die dateien gcode/config.py und gcode/gcode.py und wie bei jedem…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.cccgoe.de/index.php?title=3D-Drucker/Slic3r/Python&amp;diff=3899&amp;oldid=prev"/>
		<updated>2012-02-23T21:34:56Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „das ganze ist über mehrere Python Module verteilt. getestest mit python 2.7.2:  benötigt werden die dateien gcode/config.py und gcode/gcode.py und wie bei jedem…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;das ganze ist über mehrere Python Module verteilt. getestest mit python 2.7.2:&lt;br /&gt;
&lt;br /&gt;
benötigt werden die dateien gcode/config.py und gcode/gcode.py und wie bei jedem python Module gcode.__init__.py (s.u.)&lt;br /&gt;
&lt;br /&gt;
== Layer 0 ==&lt;br /&gt;
es wird Probiert die besten werde zu finden damit die erste Lage gut haftet aber nicht zu stark, ...&lt;br /&gt;
&lt;br /&gt;
===layer0.py:===&lt;br /&gt;
&amp;lt;highlightSyntax language=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;this script can create simple gcode and using config from slirc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
from gcode.config import Config&lt;br /&gt;
from gcode.gcode import GCode&lt;br /&gt;
&lt;br /&gt;
def gcode_layer0(config):&lt;br /&gt;
    gcode = GCode(config)&lt;br /&gt;
    h = config.layer_height*config.first_layer_height_ratio&lt;br /&gt;
    &lt;br /&gt;
    e=config.extrutionMultiplyer(h)&lt;br /&gt;
&lt;br /&gt;
    z=h&lt;br /&gt;
    gcode.G1(z=z,f=config.travel_speed*60)&lt;br /&gt;
    gcode.G1(x=40.0,y=40.0)&lt;br /&gt;
    gcode.G1(x=180.0,f=270.0,e=140.0*e)&lt;br /&gt;
    gcode.G1(y=180.0,f=270.0,e=140.0*e)&lt;br /&gt;
    gcode.G1(x=20.0,f=270.0,e=140.0*e)&lt;br /&gt;
    gcode.G1(y=40.0,f=270.0,e=140.0*e)&lt;br /&gt;
    gcode.retract(x=50.0,y=50.0)&lt;br /&gt;
    gcode.G1(x=170.0,f=270.0,e=120.0*e)&lt;br /&gt;
    gcode.G1(y=170.0,f=270.0,e=120.0*e)&lt;br /&gt;
    gcode.G1(x=30.0,f=270.0,e=120.0*e)&lt;br /&gt;
    gcode.G1(y=50.0,f=270.0,e=120.0*e)&lt;br /&gt;
&lt;br /&gt;
    return gcode&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    config = Config(&amp;#039;c.ini&amp;#039;)&lt;br /&gt;
    gcode = gcode_layer0(config)&lt;br /&gt;
    print &amp;quot;writing &amp;#039;layer_0_rect.gcode&amp;#039;.&amp;quot;&lt;br /&gt;
    with open(&amp;#039;layer_0_rect.gcode&amp;#039;,&amp;#039;w&amp;#039;) as f:&lt;br /&gt;
        f.write(config.start_gcode)&lt;br /&gt;
        f.write(&amp;quot;\n\n&amp;quot;)&lt;br /&gt;
        f.write(gcode.begin())&lt;br /&gt;
        f.write(&amp;quot;\n\n&amp;quot;)&lt;br /&gt;
        f.write(str(gcode))&lt;br /&gt;
        f.write(&amp;quot;\n\n&amp;quot;)&lt;br /&gt;
        f.write(config.end_gcode)&lt;br /&gt;
        f.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
&amp;lt;/highlightSyntax&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
=== gcode/__init__.py ===&lt;br /&gt;
(leer)&lt;br /&gt;
&lt;br /&gt;
=== gcode/config.py ===&lt;br /&gt;
&amp;lt;highlightSyntax language=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from math import pi&lt;br /&gt;
class Config:&lt;br /&gt;
   &lt;br /&gt;
    gcode_dir = [&amp;quot;start_gcode&amp;quot;, &amp;quot;end_gcode&amp;quot;]&lt;br /&gt;
    s_dir = [&amp;quot;fill_pattern&amp;quot;, &amp;quot;solid_fill_pattern&amp;quot;,&amp;quot;extrusion_axis&amp;quot;]&lt;br /&gt;
    p_dir = [&amp;quot;print_center&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, fname):&lt;br /&gt;
        self.fname = fname&lt;br /&gt;
        self._readFile()&lt;br /&gt;
        self._createFlow()&lt;br /&gt;
&lt;br /&gt;
    def std(self):&lt;br /&gt;
# printer options&lt;br /&gt;
        self.nozzle_diameter    = 0.5&lt;br /&gt;
        self.print_center       = [100,100]  # object will be centered around this point&lt;br /&gt;
        self.use_relative_e_distances = 0&lt;br /&gt;
        self.extrusion_axis     = &amp;#039;E&amp;#039;&lt;br /&gt;
        self.z_offset           = 0&lt;br /&gt;
        self.gcode_arcs         = 0&lt;br /&gt;
        self.g0                 = 0&lt;br /&gt;
        self.gcode_comments     = 0&lt;br /&gt;
&lt;br /&gt;
# filament options&lt;br /&gt;
        self.filament_diameter  = 3    # mm&lt;br /&gt;
        self.extrusion_multiplier = 1&lt;br /&gt;
        self.temperature        = 200&lt;br /&gt;
&lt;br /&gt;
# speed options&lt;br /&gt;
        self.travel_speed           = 130  # mm/sec&lt;br /&gt;
        self.perimeter_speed        = 30   # mm/sec&lt;br /&gt;
        self.small_perimeter_speed  = 30   # mm/sec&lt;br /&gt;
        self.infill_speed           = 60   # mm/sec&lt;br /&gt;
        self.solid_infill_speed     = 60   # mm/sec&lt;br /&gt;
        self.bridge_speed           = 60   # mm/sec&lt;br /&gt;
        self.bottom_layer_speed_ratio   = 0.3&lt;br /&gt;
&lt;br /&gt;
# acceleration options&lt;br /&gt;
        self.acceleration           = 0&lt;br /&gt;
        self.perimeter_acceleration = 25   # mm/sec^2&lt;br /&gt;
        self.infill_acceleration    = 50   # mm/sec^2&lt;br /&gt;
&lt;br /&gt;
# accuracy options&lt;br /&gt;
        self.resolution             = 0.00000001&lt;br /&gt;
        self.small_perimeter_area   = (5 / self.resolution) ** 2&lt;br /&gt;
        self.layer_height           = 0.4&lt;br /&gt;
        self.first_layer_height_ratio = 1&lt;br /&gt;
        self.infill_every_layers    = 1&lt;br /&gt;
&lt;br /&gt;
# flow options&lt;br /&gt;
        self.extrusion_width_ratio  = 0&lt;br /&gt;
        self.bridge_flow_ratio      = 1&lt;br /&gt;
        self.overlap_factor         = 0.5&lt;br /&gt;
&lt;br /&gt;
# print options&lt;br /&gt;
        self.perimeters         = 3&lt;br /&gt;
        self.solid_layers       = 3&lt;br /&gt;
        self.fill_pattern       = &amp;#039;rectilinear&amp;#039;&lt;br /&gt;
        self.solid_fill_pattern = &amp;#039;rectilinear&amp;#039;&lt;br /&gt;
        self.fill_density       = 0.4  # 1 = 100%&lt;br /&gt;
        self.fill_angle         = 45&lt;br /&gt;
        self.start_gcode = &amp;quot;G28;  home all axes&amp;quot;&lt;br /&gt;
        self.end_gcode = &amp;quot;&amp;quot;&amp;quot;M104 S0 ; turn off temperature&lt;br /&gt;
G28 X0  ; home X axis&lt;br /&gt;
M84     ; disable motors&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# retraction options&lt;br /&gt;
        self.retract_length         = 1    # mm&lt;br /&gt;
        self.retract_restart_extra  = 0    # mm&lt;br /&gt;
        self.retract_speed          = 30   # mm/sec&lt;br /&gt;
        self.retract_before_travel  = 2    # mm&lt;br /&gt;
        self.retract_lift           = 0    # mm&lt;br /&gt;
&lt;br /&gt;
# skirt options&lt;br /&gt;
        self.skirts             = 1&lt;br /&gt;
        self.skirt_distance     = 6    # mm&lt;br /&gt;
        self.skirt_height       = 1    # layers&lt;br /&gt;
&lt;br /&gt;
# transform options&lt;br /&gt;
        self.scale              = 1&lt;br /&gt;
        self.rotate             = 0&lt;br /&gt;
        self.duplicate_x        = 1&lt;br /&gt;
        self.duplicate_y        = 1&lt;br /&gt;
        self.duplicate_distance = 6    # mm&lt;br /&gt;
&lt;br /&gt;
    def _readFile(self):&lt;br /&gt;
        self.std()&lt;br /&gt;
        with open(self.fname,&amp;#039;r&amp;#039;) as f:&lt;br /&gt;
            for l in f.readlines():&lt;br /&gt;
                s = l.index(&amp;quot;=&amp;quot;)&lt;br /&gt;
                n = l[:s].strip()&lt;br /&gt;
                v = l[s+1:].strip()&lt;br /&gt;
                if n not in self.p_dir+self.s_dir+self.gcode_dir:&lt;br /&gt;
                    v = float(v)&lt;br /&gt;
                elif n in self.gcode_dir:&lt;br /&gt;
                    v = v.replace(&amp;quot;\\n&amp;quot;,&amp;quot;\n&amp;quot;)&lt;br /&gt;
                setattr(self, n , v)&lt;br /&gt;
&lt;br /&gt;
    def _createFlow(self):&lt;br /&gt;
        if self.extrusion_width_ratio:&lt;br /&gt;
            self.flow_width = self.layer_height * self.extrusion_width_ratio&lt;br /&gt;
        else:&lt;br /&gt;
            # here we calculate a sane default by matching the flow speed (at the nozzle)&lt;br /&gt;
            # and the feed rate&lt;br /&gt;
            volume = (self.nozzle_diameter**2) * pi/4&lt;br /&gt;
            shape_threshold = self.nozzle_diameter * self.layer_height + (self.layer_height**2) * pi/4&lt;br /&gt;
            if volume &amp;gt;= shape_threshold:&lt;br /&gt;
                # rectangle with semicircles at the ends&lt;br /&gt;
                self.flow_width = ((self.nozzle_diameter**2) * pi + (self.layer_height**2) * (4 - pi)) / (4 * self.layer_height)&lt;br /&gt;
            else:&lt;br /&gt;
                # rectangle with squished semicircles at the ends&lt;br /&gt;
                self.flow_width = self.nozzle_diameter * (self.nozzle_diameter/self.layer_height - 4/pi + 1)&lt;br /&gt;
            &lt;br /&gt;
            self.min_flow_width = self.nozzle_diameter * 1.05&lt;br /&gt;
            self.max_flow_width = self.nozzle_diameter * 1.4&lt;br /&gt;
&lt;br /&gt;
            if self.flow_width &amp;gt; self.max_flow_width:&lt;br /&gt;
                self.flow_width = self.max_flow_width&lt;br /&gt;
            if self.flow_width &amp;lt; self.min_flow_width:&lt;br /&gt;
                self.flow_width = self.min_flow_width&lt;br /&gt;
&lt;br /&gt;
        if self.flow_width &amp;gt;= (self.nozzle_diameter + self.layer_height):&lt;br /&gt;
            # rectangle with semicircles at the ends&lt;br /&gt;
            self.min_flow_spacing = self.flow_width - self.layer_height * (1 - pi/4)&lt;br /&gt;
        else:&lt;br /&gt;
            # rectangle with shrunk semicircles at the ends&lt;br /&gt;
            self.min_flow_spacing = self.flow_width * (1 - pi/4) + self.nozzle_diameter * pi/4&lt;br /&gt;
&lt;br /&gt;
        self.flow_spacing = self.flow_width - self.overlap_factor * (self.flow_width - self.min_flow_spacing)&lt;br /&gt;
&lt;br /&gt;
    def area(self, height):&lt;br /&gt;
        s = self.flow_spacing&lt;br /&gt;
        h = height&lt;br /&gt;
        w = (s - self.min_flow_spacing * self.overlap_factor) / (1 - self.overlap_factor)&lt;br /&gt;
        if w &amp;gt;= (self.nozzle_diameter + h):&lt;br /&gt;
            # rectangle with semicircles at the ends&lt;br /&gt;
            area = w * h + (h**2) / 4 * (pi - 4)&lt;br /&gt;
        else:&lt;br /&gt;
            # rectangle with shrunk semicircles at the ends&lt;br /&gt;
            area = self.nozzle_diameter * h * (1 - pi/4) + h * w * pi/4&lt;br /&gt;
&lt;br /&gt;
        return area&lt;br /&gt;
&lt;br /&gt;
    def extrutionMultiplyer(self, height):&lt;br /&gt;
        return  self.area(height) * self.extrusion_multiplier * (4 / (self.filament_diameter**2*pi))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    config = Config(&amp;#039;c.ini&amp;#039;)&lt;br /&gt;
    print &amp;quot;Flow width = %f&amp;quot;% config.flow_width&lt;br /&gt;
    print &amp;quot;Flow spacing = %f&amp;quot;%config.flow_spacing&lt;br /&gt;
    print &amp;quot;Min flow spacing = %f&amp;quot;%config.min_flow_spacing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    print &amp;quot;area(%s) = %f&amp;quot;%(config.layer_height,config.area(config.layer_height))&lt;br /&gt;
    print &amp;quot;extrutionMultiplyer(%s) = %f&amp;quot;%(config.layer_height,config.extrutionMultiplyer(config.layer_height))&lt;br /&gt;
&amp;lt;/highlightSyntax&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== gcode/gcode.py ===&lt;br /&gt;
&amp;lt;highlightSyntax language=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class GCode:&lt;br /&gt;
    def __init__(self, config):&lt;br /&gt;
        self._gcode=[]&lt;br /&gt;
        self.e=0.0&lt;br /&gt;
        self.x = 0.0&lt;br /&gt;
        self.y = 0.0&lt;br /&gt;
        self.z = 0.0&lt;br /&gt;
        self.config = config&lt;br /&gt;
        self.G92(e=0.0)&lt;br /&gt;
&lt;br /&gt;
    def begin(self):&lt;br /&gt;
       return &amp;quot;&amp;quot;&amp;quot;M109 S%s ; wait for temperature to be reached&lt;br /&gt;
G90 ; use absolute coordinates&lt;br /&gt;
G21 ; set units to millimeters&lt;br /&gt;
M82 ; use absolute distances for extrusion&amp;quot;&amp;quot;&amp;quot;%int(self.config.temperature)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def __str__(self):&lt;br /&gt;
        return &amp;quot;\n&amp;quot;.join([&amp;quot; &amp;quot;.join(g) for g in self._gcode])&lt;br /&gt;
&lt;br /&gt;
    def _updatePos(self, **kwargs):&lt;br /&gt;
        for k in kwargs:&lt;br /&gt;
            setattr(self,k,kwargs[k])&lt;br /&gt;
    &lt;br /&gt;
    def G1(self,**kwargs):&lt;br /&gt;
        g1=[&amp;quot;G1&amp;quot;]&lt;br /&gt;
        if &amp;quot;e&amp;quot; in kwargs:&lt;br /&gt;
            kwargs[&amp;quot;e&amp;quot;] += self.e&lt;br /&gt;
        for k in kwargs:&lt;br /&gt;
            g1.append(&amp;quot;%s%.5f&amp;quot;%(k.upper(),kwargs[k]))&lt;br /&gt;
        self._gcode.append(g1)&lt;br /&gt;
        self._updatePos(**kwargs)&lt;br /&gt;
     &lt;br /&gt;
    def G92(self, **kwargs):&lt;br /&gt;
        g92=[&amp;quot;G92&amp;quot;]&lt;br /&gt;
        for k in kwargs:&lt;br /&gt;
            g92.append(&amp;quot;%s%.5f&amp;quot;%(k.upper(),kwargs[k]))&lt;br /&gt;
        self._gcode.append(g92)&lt;br /&gt;
        self._updatePos(**kwargs)&lt;br /&gt;
&lt;br /&gt;
    def retract(self,**kwargs):&lt;br /&gt;
        z=self.z&lt;br /&gt;
        self.G1(e=-self.config.retract_length, f=self.config.retract_speed*60)&lt;br /&gt;
        self.G1(z=z+self.config.retract_lift, f=self.config.travel_speed*60)&lt;br /&gt;
        self.G92(e=0.0)&lt;br /&gt;
        self.G1(**kwargs)&lt;br /&gt;
        self.G1(z=z)&lt;br /&gt;
        self.G1(e=self.config.retract_length,f=self.config.retract_speed*60)&lt;br /&gt;
&amp;lt;/highlightSyntax&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hefee</name></author>
	</entry>
</feed>