Source code for compas_slicer.print_organization.print_organization_utilities.extruder_toggle


import compas_slicer
import logging

logger = logging.getLogger('logger')

__all__ = ['set_extruder_toggle',
           'override_extruder_toggle',
           'check_assigned_extruder_toggle']


[docs]def set_extruder_toggle(print_organizer, slicer): """Sets the extruder_toggle value for the printpoints. Parameters ---------- print_organizer: :class:`compas_slicer.print_organization.BasePrintOrganizer` slicer: :class:`compas.slicers.BaseSlicer` """ logger.info("Setting extruder toggle") pp_dict = print_organizer.printpoints_dict for i, layer in enumerate(slicer.layers): layer_key = 'layer_%d' % i is_vertical_layer = isinstance(layer, compas_slicer.geometry.VerticalLayer) is_brim_layer = layer.is_brim for j, path in enumerate(layer.paths): path_key = 'path_%d' % j is_closed_path = path.is_closed # --- decide if the path should be interrupted at the end interrupt_path = False if not is_closed_path: interrupt_path = True # open paths should always be interrupted if not is_vertical_layer and len(layer.paths) > 1: interrupt_path = True # horizontal layers with multiple paths should be interrupted so that the extruder # can travel from one path to the other, exception is added for the brim layers if is_brim_layer and (j + 1) % layer.number_of_brim_offsets != 0: interrupt_path = False if is_vertical_layer and j == len(layer.paths) - 1: interrupt_path = True # the last path of a vertical layer should be interrupted if i < len(slicer.layers)-1: if not slicer.layers[i+1].paths[0].is_closed: interrupt_path = True # --- create extruder toggles try: path_printpoints = pp_dict[layer_key][path_key] except KeyError: logger.exception("no path found for layer %s" % layer_key) else: for k, printpoint in enumerate(path_printpoints): if interrupt_path: if k == len(path_printpoints) - 1: printpoint.extruder_toggle = False else: printpoint.extruder_toggle = True else: printpoint.extruder_toggle = True # set extruder toggle of last print point to false last_layer_key = 'layer_%d' % (len(pp_dict) - 1) last_path_key = 'path_%d' % (len(pp_dict[last_layer_key]) - 1) try: pp_dict[last_layer_key][last_path_key][-1].extruder_toggle = False except KeyError as e: logger.exception(e)
[docs]def override_extruder_toggle(print_organizer, override_value): """Overrides the extruder_toggle value for the printpoints with a user-defined value. Parameters ---------- print_organizer: :class:`compas.print_organization.BasePrintOrganizer` override_value: bool Value to override the extruder_toggle values with. """ assert isinstance(override_value, bool), "Override value must be of type bool" for printpoint in print_organizer.printpoints_iterator(): printpoint.extruder_toggle = override_value
def check_assigned_extruder_toggle(print_organizer): """ Checks that all the printpoints have an assigned extruder toggle. """ all_toggles_assigned = True for printpoint in print_organizer.printpoints_iterator(): if printpoint.extruder_toggle is None: all_toggles_assigned = False return all_toggles_assigned if __name__ == "__main__": pass