(wire_network, print_dir, support_length,
support_thickness, tol)
| 53 | return form_mesh(vertices, faces); |
| 54 | |
| 55 | def generate_supports(wire_network, print_dir, support_length, |
| 56 | support_thickness, tol): |
| 57 | min_height = np.amin(np.dot(wire_network.vertices, print_dir)); |
| 58 | proj_dist = []; |
| 59 | vertices = []; |
| 60 | edges = []; |
| 61 | for i,v in enumerate(wire_network.vertices): |
| 62 | neighbors = wire_network.vertices[wire_network.get_vertex_neighbors(i)]; |
| 63 | neighbors = neighbors.reshape((-1, 3), order="C"); |
| 64 | h = np.dot(v, print_dir); |
| 65 | if np.any(np.dot(neighbors, print_dir) <= h + tol) and h > min_height + tol: |
| 66 | continue; |
| 67 | vertices.append(v); |
| 68 | proj_dist.append(h); |
| 69 | |
| 70 | num_supports = len(vertices); |
| 71 | base_vertices_top_end = vertices - print_dir * support_thickness; |
| 72 | base_vertices_bottom_end = vertices - np.outer( |
| 73 | (proj_dist - min_height + support_length), print_dir); |
| 74 | vertices = np.vstack((vertices + 0.05 * print_dir, |
| 75 | base_vertices_top_end, base_vertices_bottom_end)); |
| 76 | edges = np.vstack(( |
| 77 | np.arange(num_supports * 2).reshape((num_supports, 2), order="F"), |
| 78 | np.arange(num_supports, num_supports * 3).reshape((num_supports, 2), order="F"))); |
| 79 | thickness = np.hstack(( |
| 80 | np.ones(num_supports) * support_thickness * 0.5, |
| 81 | np.ones(num_supports) * support_thickness, |
| 82 | np.ones(num_supports) * support_thickness,)); |
| 83 | |
| 84 | support_wires = WireNetwork(); |
| 85 | support_wires.load(vertices, edges); |
| 86 | support_wires.add_attribute("thickness", thickness); |
| 87 | return support_wires; |
| 88 | |
| 89 | def parse_args(): |
| 90 | parser = argparse.ArgumentParser( |
no test coverage detected