| 32 | } |
| 33 | |
| 34 | WireNetwork::Ptr MixedMeshTiler::tile() { |
| 35 | const size_t num_cells = get_num_cells(); |
| 36 | auto transforms = get_tiling_operators(); |
| 37 | auto vars_array = extract_attributes(m_mesh); |
| 38 | VectorI pattern_id = m_mesh->get_attribute("pattern_id").cast<int>(); |
| 39 | assert(pattern_id.size() == num_cells); |
| 40 | |
| 41 | m_tiled_vertices.clear(); |
| 42 | m_tiled_edges.clear(); |
| 43 | m_tiled_thicknesses.clear(); |
| 44 | m_tiled_offsets.clear(); |
| 45 | |
| 46 | size_t v_count = 0; |
| 47 | auto transform_itr = transforms.begin(); |
| 48 | for (size_t i=0; i<num_cells; i++) { |
| 49 | set_active_wire_network(pattern_id[i]); |
| 50 | scale_to_unit_box(); |
| 51 | append_vertices(*transform_itr); |
| 52 | append_edges(v_count); |
| 53 | append_thicknesses(vars_array[i]); |
| 54 | append_offsets(vars_array[i], *transform_itr); |
| 55 | |
| 56 | v_count += m_unit_wire_network->get_num_vertices(); |
| 57 | transform_itr++; |
| 58 | } |
| 59 | |
| 60 | MatrixFr vertices = vstack(m_tiled_vertices); |
| 61 | MatrixIr edges = vstack(m_tiled_edges); |
| 62 | MatrixFr thicknesses = vstack(m_tiled_thicknesses); |
| 63 | MatrixFr offsets = vstack(m_tiled_offsets); |
| 64 | assert(edges.minCoeff() >= 0); |
| 65 | assert(edges.maxCoeff() < vertices.rows()); |
| 66 | |
| 67 | WireNetwork::Ptr tiled_network = |
| 68 | WireNetwork::create_raw(vertices, edges); |
| 69 | |
| 70 | tiled_network->add_attribute("thickness", |
| 71 | m_target_type == ParameterCommon::VERTEX); |
| 72 | tiled_network->set_attribute("thickness", thicknesses); |
| 73 | tiled_network->add_attribute("vertex_offset", true); |
| 74 | tiled_network->set_attribute("vertex_offset", offsets); |
| 75 | |
| 76 | clean_up(*tiled_network); |
| 77 | return tiled_network; |
| 78 | } |
| 79 | |
| 80 | size_t MixedMeshTiler::get_num_cells() const { |
| 81 | const size_t dim = m_mesh->get_dim(); |
nothing calls this directly
no test coverage detected