You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.6 KiB
49 lines
1.6 KiB
#include "extract_arrangement.hpp"
|
|
#include "ia_structure.hpp"
|
|
#include "robust_assert.hpp"
|
|
|
|
arrangement_t extract_arrangement(ia_complex_t&& ia_complex)
|
|
{
|
|
arrangement_t ia{};
|
|
ia.vertices = std::move(ia_complex.vertices);
|
|
|
|
auto& edges = ia_complex.edges;
|
|
auto& faces = ia_complex.faces;
|
|
size_t num_faces = faces.size();
|
|
ia.faces.resize(num_faces);
|
|
|
|
for (size_t i = 0; i < num_faces; i++) {
|
|
auto& cf = faces[i];
|
|
auto& f = ia.faces[i];
|
|
const size_t num_bd_edges = cf.edges.size();
|
|
ROBUST_ASSERT(num_bd_edges >= 3);
|
|
f.vertices.reserve(num_bd_edges);
|
|
|
|
for (size_t j = 0; j < num_bd_edges; j++) {
|
|
auto& curr_e = edges[cf.edges[j]];
|
|
auto& next_e = edges[cf.edges[(j + 1) % num_bd_edges]];
|
|
if (curr_e.vertices[0] == next_e.vertices[0] || curr_e.vertices[0] == next_e.vertices[1]) {
|
|
f.vertices.emplace_back(curr_e.vertices[0]);
|
|
} else {
|
|
ROBUST_ASSERT(curr_e.vertices[1] == next_e.vertices[0] || curr_e.vertices[1] == next_e.vertices[1]);
|
|
f.vertices.emplace_back(curr_e.vertices[1]);
|
|
}
|
|
}
|
|
|
|
f.positive_cell = cf.positive_cell;
|
|
f.negative_cell = cf.negative_cell;
|
|
f.supporting_plane = cf.supporting_plane;
|
|
}
|
|
|
|
auto& cells = ia_complex.cells;
|
|
size_t num_cells = cells.size();
|
|
ia.cells.resize(num_cells);
|
|
|
|
for (size_t i = 0; i < num_cells; i++) {
|
|
auto& cc = cells[i];
|
|
auto& c = ia.cells[i];
|
|
c.faces = std::move(cc.faces);
|
|
}
|
|
|
|
return ia;
|
|
}
|