Skip to content

Commit

Permalink
Issue #44: fix retractless S3D gcode handling
Browse files Browse the repository at this point in the history
- properly handle none type lines
  • Loading branch information
spegelius committed Apr 18, 2018
1 parent ea04d45 commit ccc57ac
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 35 deletions.
24 changes: 14 additions & 10 deletions src/gcode_file.py
Expand Up @@ -113,8 +113,9 @@ def parse_print_settings(self):
if self.settings.get_hw_config_value("prerun.prime") == "True":
self.log.debug("Preprime enabled")
self.preprime = PrePrime(self.log, self.settings, self.max_slots, self.extruders, self.tools)
for cmd, comment in self.preprime.get_prime_lines():
self.pr_index += self.layers[0].insert_line(self.pr_index, cmd, comment)
for line in self.preprime.get_prime_lines():
if line:
self.pr_index += self.layers[0].insert_line(self.pr_index, line[0], line[1])
self.active_e = self.preprime.last_extruder
self.layers[0].start_gcode_end = self.pr_index
else:
Expand Down Expand Up @@ -280,9 +281,10 @@ def update_retract_position(pos, new_pos):
# when z height changes, check that tower height isn't too low versus layer
if layer.num != 1 and last_z < layer.z < self.last_switch_height:
added = False
for cmd, comment in self.switch_tower.check_infill(layer, e_pos, self.active_e, z_hop):
added = True
index += layer.insert_line(index, cmd, comment)
for line in self.switch_tower.check_infill(layer, e_pos, self.active_e, z_hop):
if line:
added = True
index += layer.insert_line(index, line[0], line[1])
if added:
e_pos = -self.active_e.retract
prime_needed = True
Expand All @@ -294,9 +296,10 @@ def update_retract_position(pos, new_pos):
if layer.action == ACT_INFILL and index == 0 and layer.num != 1 and layer.z < self.last_switch_height:
# update purge tower with sparse infill
added = False
for cmd, comment in self.switch_tower.get_infill_lines(layer, e_pos, self.active_e, z_hop):
added = True
index += layer.insert_line(index, cmd, comment)
for line in self.switch_tower.get_infill_lines(layer, e_pos, self.active_e, z_hop):
if line:
added = True
index += layer.insert_line(index, line[0], line[1])
if added:
e_pos = -self.active_e.retract
prime_needed = True
Expand Down Expand Up @@ -334,8 +337,9 @@ def update_retract_position(pos, new_pos):
e_pos = -self.active_e.retract

new_e = self.extruders[new_tool]
for cmd, comment in self.switch_tower.get_tower_lines(layer, e_pos, self.active_e, new_e, z_hop):
index += layer.insert_line(index, cmd, comment)
for line in self.switch_tower.get_tower_lines(layer, e_pos, self.active_e, new_e, z_hop):
if line:
index += layer.insert_line(index, line[0], line[1])
prime_needed = True
prime_ok = False
self.active_e = new_e
Expand Down
34 changes: 9 additions & 25 deletions src/switch_tower.py
Expand Up @@ -755,14 +755,10 @@ def get_tower_lines(self, layer, e_pos, old_e, new_e, z_hop):
initial_horizontal_dir = self.slots[self.slot]['horizontal_dir']

# handle retraction
retraction = self._get_retraction(old_e)
if retraction:
yield retraction
yield self._get_retraction(old_e)

# handle z-hop
hop = self._get_z_hop(layer, old_e)
if hop:
yield hop
yield self._get_z_hop(layer, old_e)

y_pos = (self.wall_height + 0.4) * self.slot
if self.slots[self.slot]['horizontal_dir'] == self.E:
Expand All @@ -781,9 +777,7 @@ def get_tower_lines(self, layer, e_pos, old_e, new_e, z_hop):
if self.settings.linear_advance != 0:
yield gcode.gen_lin_advance(0), b" turn off linear advance"

prime = self._get_prime(old_e)
if prime:
yield prime
yield self._get_prime(old_e)

new_temp = new_e.get_temperature(layer.num)
old_temp = self.temperatures.get(old_e.tool, old_e.get_temperature(layer.num))
Expand Down Expand Up @@ -848,9 +842,7 @@ def get_tower_lines(self, layer, e_pos, old_e, new_e, z_hop):
yield gcode.gen_absolute_positioning(), b" absolute positioning"
yield gcode.gen_relative_e(), b" relative E"
yield gcode.gen_extruder_reset(), b" reset extruder position"
hop = self._get_z_hop(layer, old_e)
if hop:
yield hop
yield self._get_z_hop(layer, old_e)
yield None, b" TOWER END"

# flip the directions
Expand Down Expand Up @@ -879,22 +871,18 @@ def get_infill_lines(self, layer, e_pos, extruder, z_hop):

self.get_slot(layer)

# no need to add infll if tower is already higher than layer
# no need to add infill if tower is already higher than layer
if layer.z <= self.slots[self.slot]['last_z']:
return []

self.log.debug("Adding purge tower infill")
yield None, b" TOWER INFILL START"

# handle retraction
retraction = self._get_retraction(extruder)
if retraction:
yield retraction
yield self._get_retraction(extruder)

# handle z-hop
hop = self._get_z_hop(layer, extruder)
if hop:
yield hop
yield self._get_z_hop(layer, extruder)

tower_z = layer.height + self.slots[self.slot]['last_z']
self.slots[self.slot]['last_z'] = tower_z
Expand All @@ -919,9 +907,7 @@ def get_infill_lines(self, layer, e_pos, extruder, z_hop):
yield gcode.gen_z_move(tower_z, self.settings.travel_z_speed), b" move z close"
yield gcode.gen_relative_positioning(), b" relative positioning"

prime = self._get_prime(extruder)
if prime:
yield prime
yield self._get_prime(extruder)

# wall gcode
for line in self._get_wall_gcode(extruder, layer.height, self.settings.default_speed,
Expand All @@ -948,9 +934,7 @@ def get_infill_lines(self, layer, e_pos, extruder, z_hop):

yield gcode.gen_absolute_positioning(), b" absolute positioning"
yield gcode.gen_relative_e(), b" relative E"
hop = self._get_z_hop(layer, extruder)
if hop:
yield hop
yield self._get_z_hop(layer, extruder)
yield gcode.gen_extruder_reset(), b" reset extruder position"
yield None, b" TOWER INFILL END"

Expand Down

0 comments on commit ccc57ac

Please sign in to comment.