Example #1
0
    def _slicer_task_4b(layer, ewidth, iwidth, conf, top_masks, bot_masks,
                        perims):
        # Solid Mask
        outmask = []
        for mask in top_masks:
            outmask = geom.union(outmask, geom.close_paths(mask))
        for mask in bot_masks:
            outmask = geom.union(outmask, geom.close_paths(mask))
        solid_mask = geom.clip(outmask, perims[-1])
        bounds = geom.paths_bounds(outmask)

        # Solid Infill
        solid_infill = []
        base_ang = 45 if layer % 2 == 0 else -45
        solid_mask = geom.offset(solid_mask, conf['infill_overlap'] - ewidth)
        lines = geom.make_infill_lines(bounds, base_ang, 1.0, ewidth)
        for line in lines:
            lines = [line]
            lines = geom.clip(lines, solid_mask, subj_closed=False)
            solid_infill.extend(lines)

        # Sparse Infill
        sparse_infill = []
        infill_type = conf['infill_type']
        density = conf['infill_density'] / 100.0
        if density > 0.0:
            if density >= 0.99:
                infill_type = "Lines"
            mask = geom.offset(perims[-1], conf['infill_overlap'] - iwidth)
            mask = geom.diff(mask, solid_mask)
            if infill_type == "Lines":
                base_ang = 90 * (layer % 2) + 45
                lines = geom.make_infill_lines(bounds, base_ang, density,
                                               iwidth)
            elif infill_type == "Triangles":
                base_ang = 60 * (layer % 3)
                lines = geom.make_infill_triangles(bounds, base_ang, density,
                                                   iwidth)
            elif infill_type == "Grid":
                base_ang = 90 * (layer % 2) + 45
                lines = geom.make_infill_grid(bounds, base_ang, density,
                                              iwidth)
            elif infill_type == "Hexagons":
                base_ang = 120 * (layer % 3)
                lines = geom.make_infill_hexagons(bounds, base_ang, density,
                                                  iwidth)
            else:
                lines = []
            for line in lines:
                lines = [line]
                lines = geom.clip(lines, mask, subj_closed=False)
                sparse_infill.extend(lines)
        return solid_infill, sparse_infill
Example #2
0
 def _slicer_task_2a(conf, overhangs, layer_paths):
     # Overhang Drops
     outset = conf['support_outset']
     supp_type = conf['support_type']
     if supp_type == 'None':
         return []
     layer_drops = []
     drop_paths = []
     for layer in reversed(range(len(overhangs))):
         drop_paths = geom.union(drop_paths, overhangs[layer])
         layer_mask = geom.offset(layer_paths[layer], outset)
         layer_drops.insert(0, geom.diff(drop_paths, layer_mask))
     if supp_type == 'External':
         return layer_drops
     out_paths = []
     mask_paths = []
     for layer, drop_paths in enumerate(layer_drops):
         layer_mask = geom.offset(layer_paths[layer], outset)
         mask_paths = geom.union(mask_paths, layer_mask)
         drop_paths = geom.diff(drop_paths, mask_paths)
         out_paths.append(drop_paths)
     return out_paths
Example #3
0
    def _slicer_task_1(z, ewidth, suppwidth, layer_h, conf, model):
        # Layer Slicing
        paths = model.slice_at_z(z - layer_h / 2, layer_h)
        paths = geom.orient_paths(paths)
        paths = geom.union(paths, [])

        # Overhang Masks
        supp_ang = conf['overhang_angle']
        tris = model.get_overhang_footprint_triangles(ang=supp_ang, z=z)
        overhangs = geom.diff(geom.union(tris, []), paths)

        # Perimeters
        perims = []
        for i in range(conf['shell_count']):
            shell = geom.offset(paths, -(i + 0.5) * ewidth)
            shell = geom.close_paths(shell)
            perims.append(shell)

        return paths, overhangs, perims
Example #4
0
 def _slicer_task_2b(layer, below, perim, above):
     # Top and Bottom masks
     top_mask = geom.diff(perim, above)
     bot_mask = geom.diff(perim, below)
     return top_mask, bot_mask