Cleanup: Various changes for calc_area_normal_and_center
* Remove `_r` suffix from internal variable * Use bitflag instead of two booleans for function parameter Pull Request: https://projects.blender.org/blender/blender/pulls/144597
This commit is contained in:
@@ -1355,13 +1355,20 @@ struct SampleLocalData {
|
||||
Vector<float> distances;
|
||||
};
|
||||
|
||||
enum class AverageDataFlags : uint8_t {
|
||||
Position = 1 << 0,
|
||||
Normal = 1 << 1,
|
||||
|
||||
All = Position | Normal
|
||||
};
|
||||
ENUM_OPERATORS(AverageDataFlags, AverageDataFlags::Normal);
|
||||
|
||||
static void calc_area_normal_and_center_node_mesh(const Object &object,
|
||||
const Span<float3> vert_positions,
|
||||
const Span<float3> vert_normals,
|
||||
const Span<bool> hide_vert,
|
||||
const Brush &brush,
|
||||
const bool use_area_nos,
|
||||
const bool use_area_cos,
|
||||
const AverageDataFlags flag,
|
||||
const bke::pbvh::MeshNode &node,
|
||||
SampleLocalData &tls,
|
||||
AreaNormalCenterData &anctd)
|
||||
@@ -1395,19 +1402,21 @@ static void calc_area_normal_and_center_node_mesh(const Object &object,
|
||||
if (!hide_vert.is_empty() && hide_vert[vert]) {
|
||||
continue;
|
||||
}
|
||||
const bool normal_test_r = use_area_nos && distances_sq[i] <= normal_radius_sq;
|
||||
const bool area_test_r = use_area_cos && distances_sq[i] <= position_radius_sq;
|
||||
if (!normal_test_r && !area_test_r) {
|
||||
const bool needs_normal = bool(flag & AverageDataFlags::Normal) &&
|
||||
distances_sq[i] <= normal_radius_sq;
|
||||
const bool needs_center = bool(flag & AverageDataFlags::Position) &&
|
||||
distances_sq[i] <= position_radius_sq;
|
||||
if (!needs_normal && !needs_center) {
|
||||
continue;
|
||||
}
|
||||
const float3 &normal = orig_normals[i];
|
||||
const float distance = std::sqrt(distances_sq[i]);
|
||||
const int flip_index = math::dot(view_normal, normal) <= 0.0f;
|
||||
if (area_test_r) {
|
||||
if (needs_center) {
|
||||
accumulate_area_center(
|
||||
location, orig_positions[i], distance, position_radius_inv, flip_index, anctd);
|
||||
}
|
||||
if (normal_test_r) {
|
||||
if (needs_normal) {
|
||||
accumulate_area_normal(normal, distance, normal_radius_inv, flip_index, anctd);
|
||||
}
|
||||
}
|
||||
@@ -1425,19 +1434,21 @@ static void calc_area_normal_and_center_node_mesh(const Object &object,
|
||||
if (!hide_vert.is_empty() && hide_vert[vert]) {
|
||||
continue;
|
||||
}
|
||||
const bool normal_test_r = distances_sq[i] <= normal_radius_sq;
|
||||
const bool area_test_r = distances_sq[i] <= position_radius_sq;
|
||||
if (!normal_test_r && !area_test_r) {
|
||||
const bool needs_normal = bool(flag & AverageDataFlags::Normal) &&
|
||||
distances_sq[i] <= normal_radius_sq;
|
||||
const bool needs_center = bool(flag & AverageDataFlags::Position) &&
|
||||
distances_sq[i] <= position_radius_sq;
|
||||
if (!needs_normal && !needs_center) {
|
||||
continue;
|
||||
}
|
||||
const float3 &normal = vert_normals[vert];
|
||||
const float distance = std::sqrt(distances_sq[i]);
|
||||
const int flip_index = math::dot(view_normal, normal) <= 0.0f;
|
||||
if (area_test_r) {
|
||||
if (needs_center) {
|
||||
accumulate_area_center(
|
||||
location, vert_positions[vert], distance, position_radius_inv, flip_index, anctd);
|
||||
}
|
||||
if (normal_test_r) {
|
||||
if (needs_normal) {
|
||||
accumulate_area_normal(normal, distance, normal_radius_inv, flip_index, anctd);
|
||||
}
|
||||
}
|
||||
@@ -1445,8 +1456,7 @@ static void calc_area_normal_and_center_node_mesh(const Object &object,
|
||||
|
||||
static void calc_area_normal_and_center_node_grids(const Object &object,
|
||||
const Brush &brush,
|
||||
const bool use_area_nos,
|
||||
const bool use_area_cos,
|
||||
const AverageDataFlags flag,
|
||||
const bke::pbvh::GridsNode &node,
|
||||
SampleLocalData &tls,
|
||||
AreaNormalCenterData &anctd)
|
||||
@@ -1488,15 +1498,17 @@ static void calc_area_normal_and_center_node_grids(const Object &object,
|
||||
}
|
||||
const int node_vert = grid_range_node[offset];
|
||||
|
||||
const bool normal_test_r = use_area_nos && distances_sq[node_vert] <= normal_radius_sq;
|
||||
const bool area_test_r = use_area_cos && distances_sq[node_vert] <= position_radius_sq;
|
||||
if (!normal_test_r && !area_test_r) {
|
||||
const bool needs_normal = bool(flag & AverageDataFlags::Normal) &&
|
||||
distances_sq[node_vert] <= normal_radius_sq;
|
||||
const bool needs_center = bool(flag & AverageDataFlags::Position) &&
|
||||
distances_sq[node_vert] <= position_radius_sq;
|
||||
if (!needs_normal && !needs_center) {
|
||||
continue;
|
||||
}
|
||||
const float3 &normal = orig_normals[node_vert];
|
||||
const float distance = std::sqrt(distances_sq[node_vert]);
|
||||
const int flip_index = math::dot(view_normal, normal) <= 0.0f;
|
||||
if (area_test_r) {
|
||||
if (needs_center) {
|
||||
accumulate_area_center(location,
|
||||
orig_positions[node_vert],
|
||||
distance,
|
||||
@@ -1504,7 +1516,7 @@ static void calc_area_normal_and_center_node_grids(const Object &object,
|
||||
flip_index,
|
||||
anctd);
|
||||
}
|
||||
if (normal_test_r) {
|
||||
if (needs_normal) {
|
||||
accumulate_area_normal(normal, distance, normal_radius_inv, flip_index, anctd);
|
||||
}
|
||||
}
|
||||
@@ -1530,19 +1542,21 @@ static void calc_area_normal_and_center_node_grids(const Object &object,
|
||||
const int node_vert = grid_range_node[offset];
|
||||
const int vert = grid_range[offset];
|
||||
|
||||
const bool normal_test_r = use_area_nos && distances_sq[node_vert] <= normal_radius_sq;
|
||||
const bool area_test_r = use_area_cos && distances_sq[node_vert] <= position_radius_sq;
|
||||
if (!normal_test_r && !area_test_r) {
|
||||
const bool needs_normal = uint8_t(flag & AverageDataFlags::Normal) != 0 &&
|
||||
distances_sq[node_vert] <= normal_radius_sq;
|
||||
const bool needs_center = uint8_t(flag & AverageDataFlags::Position) != 0 &&
|
||||
distances_sq[node_vert] <= position_radius_sq;
|
||||
if (!needs_normal && !needs_center) {
|
||||
continue;
|
||||
}
|
||||
const float3 &normal = normals[vert];
|
||||
const float distance = std::sqrt(distances_sq[node_vert]);
|
||||
const int flip_index = math::dot(view_normal, normal) <= 0.0f;
|
||||
if (area_test_r) {
|
||||
if (needs_center) {
|
||||
accumulate_area_center(
|
||||
location, positions[node_vert], distance, position_radius_inv, flip_index, anctd);
|
||||
}
|
||||
if (normal_test_r) {
|
||||
if (needs_normal) {
|
||||
accumulate_area_normal(normal, distance, normal_radius_inv, flip_index, anctd);
|
||||
}
|
||||
}
|
||||
@@ -1551,8 +1565,7 @@ static void calc_area_normal_and_center_node_grids(const Object &object,
|
||||
|
||||
static void calc_area_normal_and_center_node_bmesh(const Object &object,
|
||||
const Brush &brush,
|
||||
const bool use_area_nos,
|
||||
const bool use_area_cos,
|
||||
const AverageDataFlags flag,
|
||||
const bool has_bm_orco,
|
||||
const bke::pbvh::BMeshNode &node,
|
||||
SampleLocalData &tls,
|
||||
@@ -1597,9 +1610,11 @@ static void calc_area_normal_and_center_node_bmesh(const Object &object,
|
||||
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances_sq);
|
||||
|
||||
for (const int i : orig_tris.index_range()) {
|
||||
const bool normal_test_r = use_area_nos && distances_sq[i] <= normal_radius_sq;
|
||||
const bool area_test_r = use_area_cos && distances_sq[i] <= position_radius_sq;
|
||||
if (!normal_test_r && !area_test_r) {
|
||||
const bool needs_normal = bool(flag & AverageDataFlags::Normal) &&
|
||||
distances_sq[i] <= normal_radius_sq;
|
||||
const bool needs_center = bool(flag & AverageDataFlags::Position) &&
|
||||
distances_sq[i] <= position_radius_sq;
|
||||
if (!needs_normal && !needs_center) {
|
||||
continue;
|
||||
}
|
||||
const float3 normal = math::normal_tri(float3(orig_positions[orig_tris[i][0]]),
|
||||
@@ -1608,11 +1623,11 @@ static void calc_area_normal_and_center_node_bmesh(const Object &object,
|
||||
|
||||
const float distance = std::sqrt(distances_sq[i]);
|
||||
const int flip_index = math::dot(view_normal, normal) <= 0.0f;
|
||||
if (area_test_r) {
|
||||
if (needs_center) {
|
||||
accumulate_area_center(
|
||||
location, positions[i], distance, position_radius_inv, flip_index, anctd);
|
||||
}
|
||||
if (normal_test_r) {
|
||||
if (needs_normal) {
|
||||
accumulate_area_normal(normal, distance, normal_radius_inv, flip_index, anctd);
|
||||
}
|
||||
}
|
||||
@@ -1638,20 +1653,22 @@ static void calc_area_normal_and_center_node_bmesh(const Object &object,
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
const bool normal_test_r = use_area_nos && distances_sq[i] <= normal_radius_sq;
|
||||
const bool area_test_r = use_area_cos && distances_sq[i] <= position_radius_sq;
|
||||
if (!normal_test_r && !area_test_r) {
|
||||
const bool needs_normal = bool(flag & AverageDataFlags::Normal) &&
|
||||
distances_sq[i] <= normal_radius_sq;
|
||||
const bool needs_center = bool(flag & AverageDataFlags::Position) &&
|
||||
distances_sq[i] <= position_radius_sq;
|
||||
if (!needs_normal && !needs_center) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
const float3 &normal = normals[i];
|
||||
const float distance = std::sqrt(distances_sq[i]);
|
||||
const int flip_index = math::dot(view_normal, normal) <= 0.0f;
|
||||
if (area_test_r) {
|
||||
if (needs_center) {
|
||||
accumulate_area_center(
|
||||
location, positions[i], distance, position_radius_inv, flip_index, anctd);
|
||||
}
|
||||
if (normal_test_r) {
|
||||
if (needs_normal) {
|
||||
accumulate_area_normal(normal, distance, normal_radius_inv, flip_index, anctd);
|
||||
}
|
||||
i++;
|
||||
@@ -1672,20 +1689,22 @@ static void calc_area_normal_and_center_node_bmesh(const Object &object,
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
const bool normal_test_r = use_area_nos && distances_sq[i] <= normal_radius_sq;
|
||||
const bool area_test_r = use_area_cos && distances_sq[i] <= position_radius_sq;
|
||||
if (!normal_test_r && !area_test_r) {
|
||||
const bool needs_normal = bool(flag & AverageDataFlags::Normal) &&
|
||||
distances_sq[i] <= normal_radius_sq;
|
||||
const bool needs_center = bool(flag & AverageDataFlags::Position) &&
|
||||
distances_sq[i] <= position_radius_sq;
|
||||
if (!needs_normal && !needs_center) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
const float3 normal = vert->no;
|
||||
const float distance = std::sqrt(distances_sq[i]);
|
||||
const int flip_index = math::dot(view_normal, normal) <= 0.0f;
|
||||
if (area_test_r) {
|
||||
if (needs_center) {
|
||||
accumulate_area_center(
|
||||
location, positions[i], distance, position_radius_inv, flip_index, anctd);
|
||||
}
|
||||
if (normal_test_r) {
|
||||
if (needs_normal) {
|
||||
accumulate_area_normal(normal, distance, normal_radius_inv, flip_index, anctd);
|
||||
}
|
||||
i++;
|
||||
@@ -1743,8 +1762,7 @@ void calc_area_center(const Depsgraph &depsgraph,
|
||||
vert_normals,
|
||||
hide_vert,
|
||||
brush,
|
||||
false,
|
||||
true,
|
||||
AverageDataFlags::Position,
|
||||
nodes[i],
|
||||
tls,
|
||||
anctd);
|
||||
@@ -1766,7 +1784,7 @@ void calc_area_center(const Depsgraph &depsgraph,
|
||||
SampleLocalData &tls = all_tls.local();
|
||||
node_mask.slice(range).foreach_index([&](const int i) {
|
||||
calc_area_normal_and_center_node_bmesh(
|
||||
ob, brush, false, true, has_bm_orco, nodes[i], tls, anctd);
|
||||
ob, brush, AverageDataFlags::Position, has_bm_orco, nodes[i], tls, anctd);
|
||||
});
|
||||
return anctd;
|
||||
},
|
||||
@@ -1782,7 +1800,8 @@ void calc_area_center(const Depsgraph &depsgraph,
|
||||
[&](const IndexRange range, AreaNormalCenterData anctd) {
|
||||
SampleLocalData &tls = all_tls.local();
|
||||
node_mask.slice(range).foreach_index([&](const int i) {
|
||||
calc_area_normal_and_center_node_grids(ob, brush, false, true, nodes[i], tls, anctd);
|
||||
calc_area_normal_and_center_node_grids(
|
||||
ob, brush, AverageDataFlags::Position, nodes[i], tls, anctd);
|
||||
});
|
||||
return anctd;
|
||||
},
|
||||
@@ -1843,8 +1862,7 @@ std::optional<float3> calc_area_normal(const Depsgraph &depsgraph,
|
||||
vert_normals,
|
||||
hide_vert,
|
||||
brush,
|
||||
true,
|
||||
false,
|
||||
AverageDataFlags::Normal,
|
||||
nodes[i],
|
||||
tls,
|
||||
anctd);
|
||||
@@ -1868,8 +1886,7 @@ std::optional<float3> calc_area_normal(const Depsgraph &depsgraph,
|
||||
calc_area_normal_and_center_node_bmesh(
|
||||
ob,
|
||||
brush,
|
||||
true,
|
||||
false,
|
||||
AverageDataFlags::Normal,
|
||||
has_bm_orco,
|
||||
static_cast<const blender::bke::pbvh::BMeshNode &>(nodes[i]),
|
||||
tls,
|
||||
@@ -1889,7 +1906,8 @@ std::optional<float3> calc_area_normal(const Depsgraph &depsgraph,
|
||||
[&](const IndexRange range, AreaNormalCenterData anctd) {
|
||||
SampleLocalData &tls = all_tls.local();
|
||||
node_mask.slice(range).foreach_index([&](const int i) {
|
||||
calc_area_normal_and_center_node_grids(ob, brush, true, false, nodes[i], tls, anctd);
|
||||
calc_area_normal_and_center_node_grids(
|
||||
ob, brush, AverageDataFlags::Normal, nodes[i], tls, anctd);
|
||||
});
|
||||
return anctd;
|
||||
},
|
||||
@@ -2042,8 +2060,7 @@ void calc_area_normal_and_center(const Depsgraph &depsgraph,
|
||||
vert_normals,
|
||||
hide_vert,
|
||||
brush,
|
||||
true,
|
||||
true,
|
||||
AverageDataFlags::All,
|
||||
nodes[i],
|
||||
tls,
|
||||
anctd);
|
||||
@@ -2065,7 +2082,7 @@ void calc_area_normal_and_center(const Depsgraph &depsgraph,
|
||||
SampleLocalData &tls = all_tls.local();
|
||||
node_mask.slice(range).foreach_index([&](const int i) {
|
||||
calc_area_normal_and_center_node_bmesh(
|
||||
ob, brush, true, true, has_bm_orco, nodes[i], tls, anctd);
|
||||
ob, brush, AverageDataFlags::All, has_bm_orco, nodes[i], tls, anctd);
|
||||
});
|
||||
return anctd;
|
||||
},
|
||||
@@ -2081,7 +2098,8 @@ void calc_area_normal_and_center(const Depsgraph &depsgraph,
|
||||
[&](const IndexRange range, AreaNormalCenterData anctd) {
|
||||
SampleLocalData &tls = all_tls.local();
|
||||
node_mask.slice(range).foreach_index([&](const int i) {
|
||||
calc_area_normal_and_center_node_grids(ob, brush, true, true, nodes[i], tls, anctd);
|
||||
calc_area_normal_and_center_node_grids(
|
||||
ob, brush, AverageDataFlags::All, nodes[i], tls, anctd);
|
||||
});
|
||||
return anctd;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user