Mesh: Replace MLoop struct with generic attributes #104424
|
@ -159,34 +159,34 @@ static Array<Vector<int>> build_edge_to_edge_by_vert_map(const Span<MEdge> edges
|
|||
}
|
||||
|
||||
static Array<Vector<int>> build_face_to_edge_by_loop_map(const Span<MPoly> polys,
|
||||
const Span<MLoop> loops,
|
||||
const Span<int> corner_edges,
|
||||
const int edges_num)
|
||||
{
|
||||
Array<Vector<int>> map(edges_num);
|
||||
for (const int i : polys.index_range()) {
|
||||
const MPoly &poly = polys[i];
|
||||
for (const MLoop &loop : loops.slice(poly.loopstart, poly.totloop)) {
|
||||
map[loop.e].append(i);
|
||||
for (const int edge : corner_edges.slice(poly.loopstart, poly.totloop)) {
|
||||
map[edge].append(i);
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
static Array<Vector<int>> build_face_to_face_by_edge_map(const Span<MPoly> polys,
|
||||
const Span<MLoop> loops,
|
||||
const Span<int> corner_edges,
|
||||
const int edges_num,
|
||||
const IndexMask poly_mask)
|
||||
{
|
||||
Array<Vector<int>> map(polys.size());
|
||||
Array<Vector<int>> faces_by_edge = build_face_to_edge_by_loop_map(polys, loops, edges_num);
|
||||
Array<Vector<int>> faces_by_edge = build_face_to_edge_by_loop_map(
|
||||
polys, corner_edges, edges_num);
|
||||
|
||||
threading::parallel_for(poly_mask.index_range(), 1024, [&](IndexRange range) {
|
||||
for (const int poly_i : poly_mask.slice(range)) {
|
||||
const MPoly &poly = polys[poly_i];
|
||||
for (const MLoop &loop : loops.slice(poly.loopstart, poly.totloop)) {
|
||||
const int edge_i = loop.e;
|
||||
if (faces_by_edge[edge_i].size() > 1) {
|
||||
for (const int neighbor : faces_by_edge[edge_i]) {
|
||||
for (const int edge : corner_edges.slice(poly.loopstart, poly.totloop)) {
|
||||
if (faces_by_edge[edge].size() > 1) {
|
||||
for (const int neighbor : faces_by_edge[edge]) {
|
||||
if (neighbor != poly_i) {
|
||||
map[poly_i].append(neighbor);
|
||||
}
|
||||
|
@ -215,9 +215,9 @@ static Array<Vector<int>> create_mesh_map(const Mesh &mesh,
|
|||
}
|
||||
case ATTR_DOMAIN_FACE: {
|
||||
const Span<MPoly> polys = mesh.polys();
|
||||
const Span<MLoop> loops = mesh.loops();
|
||||
const Span<int> corner_edges = mesh.corner_edges();
|
||||
const int edges_num = mesh.totedge;
|
||||
return build_face_to_face_by_edge_map(polys, loops, edges_num, mask);
|
||||
return build_face_to_face_by_edge_map(polys, corner_edges, edges_num, mask);
|
||||
}
|
||||
case ATTR_DOMAIN_CORNER: {
|
||||
return {};
|
||||
|
|
Loading…
Reference in New Issue