Design: rename 'near' lambda to 'is_near' (MSVC windows.h macro clash)

Windows minwindef.h defines legacy 'near'/'far' as empty macros, so MSVC
mangled `auto near = ...` (C2513) and every near(...) call (C2679/C2678 on
Vec2d). gcc/clang were unaffected, so only the Windows build failed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BVzKmX6Y1aEteit1HTXG4Q
This commit is contained in:
Tommaso Bianchi
2026-07-02 14:04:55 +02:00
co-authored by Claude Opus 4.8
parent 3ba6feb7a7
commit 2a9a433127
+9 -9
View File
@@ -109,15 +109,15 @@ void DesignSketchTool::rebuild_features_from_entities()
auto start = [&](int i) { return m_entities[i].p0; }; auto start = [&](int i) { return m_entities[i].p0; };
auto end = [&](int i) { const SketchEntity& e = m_entities[i]; auto end = [&](int i) { const SketchEntity& e = m_entities[i];
return (e.type == T::Line || e.type == T::Arc) ? e.p1 : e.p0; }; return (e.type == T::Line || e.type == T::Arc) ? e.p1 : e.p0; };
auto near = [](const Vec2d& a, const Vec2d& b) { auto is_near = [](const Vec2d& a, const Vec2d& b) {
return (a - b).norm() <= 0.05 + 1e-3 * std::max(a.norm(), b.norm()); }; return (a - b).norm() <= 0.05 + 1e-3 * std::max(a.norm(), b.norm()); };
int i = 0; int i = 0;
while (i < n) { while (i < n) {
int j = i; bool closed = false; // greedily extend a consecutive chain int j = i; bool closed = false; // greedily extend a consecutive chain
while (j + 1 < n && near(end(j), start(j + 1))) { while (j + 1 < n && is_near(end(j), start(j + 1))) {
++j; ++j;
if ((j - i) >= 2 && near(end(j), start(i))) { closed = true; break; } if ((j - i) >= 2 && is_near(end(j), start(i))) { closed = true; break; }
} }
const int cnt = j - i + 1; const int cnt = j - i + 1;
if (!closed || cnt < 3) { ++i; continue; } if (!closed || cnt < 3) { ++i; continue; }
@@ -139,7 +139,7 @@ void DesignSketchTool::rebuild_features_from_entities()
f.param = m_entities[i + 1].radius; f.param = m_entities[i + 1].radius;
m_features.push_back(f); m_features.push_back(f);
} else if (cnt == 4 && arcs == 4 && } else if (cnt == 4 && arcs == 4 &&
near(m_entities[i].center, m_entities[i + 2].center) && is_near(m_entities[i].center, m_entities[i + 2].center) &&
std::abs(m_entities[i + 1].radius - m_entities[i + 3].radius) <= std::abs(m_entities[i + 1].radius - m_entities[i + 3].radius) <=
0.02 * std::max(m_entities[i + 1].radius, 1e-6) && 0.02 * std::max(m_entities[i + 1].radius, 1e-6) &&
m_entities[i].radius > m_entities[i + 2].radius) { m_entities[i].radius > m_entities[i + 2].radius) {
@@ -4845,7 +4845,7 @@ DesignSketchTool::region_loops(const std::vector<SketchEntity>& ents) const
{ {
std::vector<RegionLoop> regions; std::vector<RegionLoop> regions;
const double eps2 = 1e-3 * 1e-3; const double eps2 = 1e-3 * 1e-3;
auto near = [&](const Vec2d& a, const Vec2d& b) { return (a - b).squaredNorm() < eps2; }; auto is_near = [&](const Vec2d& a, const Vec2d& b) { return (a - b).squaredNorm() < eps2; };
// Circles are self-closed regions; lines/arcs are open segments to be chained. Each // Circles are self-closed regions; lines/arcs are open segments to be chained. Each
// Seg remembers the entity index it came from. // Seg remembers the entity index it came from.
@@ -4875,15 +4875,15 @@ DesignSketchTool::region_loops(const std::vector<SketchEntity>& ents) const
const Vec2d start = loop.front(); const Vec2d start = loop.front();
Vec2d cur = loop.back(); Vec2d cur = loop.back();
bool extended = true; bool extended = true;
while (extended && !near(cur, start)) { while (extended && !is_near(cur, start)) {
extended = false; extended = false;
for (size_t t = 0; t < segs.size(); ++t) { for (size_t t = 0; t < segs.size(); ++t) {
if (segs[t].used) continue; if (segs[t].used) continue;
const std::vector<Vec2d>& q = segs[t].pts; const std::vector<Vec2d>& q = segs[t].pts;
if (near(q.front(), cur)) { if (is_near(q.front(), cur)) {
for (size_t k = 1; k < q.size(); ++k) loop.push_back(q[k]); for (size_t k = 1; k < q.size(); ++k) loop.push_back(q[k]);
cur = q.back(); cur = q.back();
} else if (near(q.back(), cur)) { } else if (is_near(q.back(), cur)) {
for (int k = int(q.size()) - 2; k >= 0; --k) loop.push_back(q[k]); for (int k = int(q.size()) - 2; k >= 0; --k) loop.push_back(q[k]);
cur = q.front(); cur = q.front();
} else { } else {
@@ -4895,7 +4895,7 @@ DesignSketchTool::region_loops(const std::vector<SketchEntity>& ents) const
break; break;
} }
} }
if (near(cur, start) && loop.size() >= 4) { if (is_near(cur, start) && loop.size() >= 4) {
loop.pop_back(); // drop the duplicate closing vertex loop.pop_back(); // drop the duplicate closing vertex
regions.push_back({ std::move(loop), std::move(loop_ents) }); regions.push_back({ std::move(loop), std::move(loop_ents) });
} }