def inflate_supports(support_wires): thickness = support_wires.get_attribute("thickness"); inflator = Inflator(support_wires); inflator.inflate(thickness, per_vertex_thickness=True); mesh = inflator.mesh; return mesh;
def foam_graph_to_mesh(k_foam, thickness): V, E = k_foam.vertices, k_foam.edges V_ = [] E_ = [] dups = [] for v in V: V_.append(10 * np.array(v)) nv = E[v] for ni in nv: if (ni, v) in dups: continue E_.append(np.array([V.index(v), V.index(ni)])) dups.append((ni, v)) dups.append((v, ni)) V_, E_ = np.array(V_), np.array(E_) wire_network = WireNetwork().create_from_data(V_, E_) wire_network.center_at_origin() wire_network.compute_symmetry_orbits() inflator = Inflator(wire_network) inflator.inflate(thickness, allow_self_intersection=True, per_vertex_thickness=False) return inflator.mesh
def test_simple(self): wire_network = self.get_brick5() wire_network.scale(5) inflator = Inflator(wire_network) inflator.inflate(0.5) mesh = inflator.mesh self.assertLess(0, mesh.num_vertices) self.assertLess(0, mesh.num_faces) self.assertTrue(mesh.is_closed())
def test_simple(self): wire_network = self.get_brick5(); wire_network.scale(5); inflator = Inflator(wire_network); inflator.inflate(0.5); mesh = inflator.mesh; self.assertLess(0, mesh.num_vertices); self.assertLess(0, mesh.num_faces); self.assertTrue(mesh.is_closed());
def test_periodic(self): wire_network = self.get_pattern1065() wire_network.scale(5) params = Parameters(wire_network, 0.5) inflator = Inflator(wire_network) inflator.subdivide_order = 0 inflator.inflate_periodic(params) mesh = inflator.mesh self.assertLess(0, mesh.num_vertices) self.assertLess(0, mesh.num_faces) self.assertTrue(mesh.is_closed())
def test_periodic(self): wire_network = self.get_pattern1065(); wire_network.scale(5); params = Parameters(wire_network, 0.5); inflator = Inflator(wire_network); inflator.subdivide_order = 0; inflator.inflate_periodic(params); mesh = inflator.mesh; self.assertLess(0, mesh.num_vertices); self.assertLess(0, mesh.num_faces); self.assertTrue(mesh.is_closed());
def tile_with_guide_mesh(config): options = extract_options(config); network = load_wire(str(config["wire_network"])); parameters = load_parameters(network, config); guide_mesh = pymesh.load_mesh(config["guide_mesh"]); tiler = Tiler(); tiler.set_base_pattern(network); tiler.tile_with_guide_mesh(guide_mesh, parameters); network = tiler.wire_network; inflator = Inflator(network); inflator.inflate(network.get_attribute("thickness").ravel(), parameters.per_vertex_thickness); return inflator.mesh;
def test_tiled(self): wire_network = self.get_brick5() params = Parameters(wire_network, 0.1) tiler = Tiler() tiler.set_base_pattern(wire_network) tiler.tile_with_guide_bbox(np.zeros(3), np.ones(3), np.ones(3) * 2, params) tiled_wire_network = tiler.wire_network inflator = Inflator(tiled_wire_network) inflator.inflate(tiled_wire_network.get_attribute("thickness").ravel()) mesh = inflator.mesh self.assertLess(0, mesh.num_vertices) self.assertLess(0, mesh.num_faces) self.assertTrue(mesh.is_closed())
def tile_with_mixed_patterns(config): options = extract_options(config); options["dof_type"] = str(config.get("dof_type", "isotropic")); options["thickness_type"] = str(config.get("thickness_type", "vertex")); networks = load_wires(str(config["wire_list_file"])); guide_mesh = pymesh.load_mesh(config["guide_mesh"]); per_vertex_thickness = options["thickness_type"] == "vertex"; tiler = Tiler(); tiler.tile_with_mixed_patterns(mesh, per_vertex_thickness, options["dof_type"] == "isotropic"); network = tiler.wire_network; inflator = Inflator(network); inflator.inflate(network.get_attribute("thickness").ravel(), per_vertex_thickness); return inflator.mesh;
def tile_with_guide_box(config): options = extract_options(config); network = load_wire(str(config["wire_network"])); parameters = load_parameters(network, config); tiler = Tiler(); tiler.set_base_pattern(network); tiler.tile_with_guide_bbox( config["bbox_min"][:network.dim], config["bbox_max"][:network.dim], config["repeats"][:network.dim], parameters); network = tiler.wire_network; inflator = Inflator(network); inflator.inflate(network.get_attribute("thickness").ravel(), parameters.per_vertex_thickness); return inflator.mesh;
def test_tiled(self): wire_network = self.get_brick5(); params = Parameters(wire_network, 0.1); tiler = Tiler(); tiler.set_base_pattern(wire_network); tiler.tile_with_guide_bbox( np.zeros(3), np.ones(3), np.ones(3)*2, params); tiled_wire_network = tiler.wire_network; inflator = Inflator(tiled_wire_network); inflator.inflate( tiled_wire_network.get_attribute("thickness").ravel()); mesh = inflator.mesh; self.assertLess(0, mesh.num_vertices); self.assertLess(0, mesh.num_faces); self.assertTrue(mesh.is_closed());
def tile_with_guide_mesh(config): options = extract_options(config); network = load_wire(str(config["wire_network"])); parameters = load_parameters(network, config); guide_mesh = pymesh.load_mesh(config["guide_mesh"]); tiler = Tiler(); tiler.set_base_pattern(network); tiler.tile_with_guide_mesh(guide_mesh, parameters); network = tiler.wire_network; if config.get("trim", False): network.trim(); inflator = Inflator(network); inflator.inflate(network.get_attribute("thickness").ravel(), parameters.per_vertex_thickness); return inflator.mesh;
def tile_with_mixed_patterns(config): options = extract_options(config); options["dof_type"] = str(config.get("dof_type", "isotropic")); options["thickness_type"] = str(config.get("thickness_type", "vertex")); networks = load_wires(str(config["wire_list_file"])); guide_mesh = pymesh.load_mesh(config["guide_mesh"]); per_vertex_thickness = options["thickness_type"] == "vertex"; tiler = Tiler(); tiler.tile_with_mixed_patterns(mesh, per_vertex_thickness, options["dof_type"] == "isotropic"); network = tiler.wire_network; if config.get("trim", False): network.trim(); inflator = Inflator(network); inflator.inflate(network.get_attribute("thickness").ravel(), per_vertex_thickness); return inflator.mesh;
def tile_with_guide_box(config): options = extract_options(config); network = load_wire(str(config["wire_network"])); parameters = load_parameters(network, config); tiler = Tiler(); tiler.set_base_pattern(network); tiler.tile_with_guide_bbox( config["bbox_min"][:network.dim], config["bbox_max"][:network.dim], config["repeats"][:network.dim], parameters); network = tiler.wire_network; if config.get("trim", False): network.trim(); inflator = Inflator(network); inflator.inflate(network.get_attribute("thickness").ravel(), parameters.per_vertex_thickness); return inflator.mesh;
def tile_with_guide_mesh(config): options = extract_options(config) network = load_wire(str(config["wire_network"])) parameters = load_parameters(network, config) guide_mesh = pymesh.load_mesh(config["guide_mesh"]) tiler = Tiler() tiler.set_base_pattern(network) tiler.tile_with_guide_mesh(guide_mesh, parameters) network = tiler.wire_network if config.get("trim", False): network.trim() if "output_wire_network" in config: network.write_to_file(config["output_wire_network"]) inflator = Inflator(network) inflator.subdivide_order = options["subdiv"] inflator.subdivide_method = options["subdiv_method"] inflator.inflate( network.get_attribute("thickness").ravel(), parameters.per_vertex_thickness) return inflator.mesh
def tile_with_mixed_patterns(config): options = extract_options(config) options["dof_type"] = str(config.get("dof_type", "isotropic")) options["thickness_type"] = str(config.get("thickness_type", "vertex")) networks = load_wires(str(config["wire_list_file"])) guide_mesh = pymesh.load_mesh(config["guide_mesh"]) per_vertex_thickness = options["thickness_type"] == "vertex" tiler = Tiler() tiler.tile_with_mixed_patterns(mesh, per_vertex_thickness, options["dof_type"] == "isotropic") network = tiler.wire_network if config.get("trim", False): network.trim() if "output_wire_network" in config: network.write_to_file(config["output_wire_network"]) inflator = Inflator(network) inflator.subdivide_order = options["subdiv"] inflator.subdivide_method = options["subdiv_method"] inflator.inflate( network.get_attribute("thickness").ravel(), per_vertex_thickness) return inflator.mesh