From 48f717c51742126055f5d1df2a5c6ef8dd0cd9c2 Mon Sep 17 00:00:00 2001 From: Aaron Grabowy <aaron.grabowy@rwth-aachen.de> Date: Mon, 18 Jan 2021 13:28:40 +0100 Subject: [PATCH] Added visualization for project --- samples/04-object-properties/main.cc | 35 ++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/samples/04-object-properties/main.cc b/samples/04-object-properties/main.cc index 810c107..e277c37 100644 --- a/samples/04-object-properties/main.cc +++ b/samples/04-object-properties/main.cc @@ -7,8 +7,15 @@ template <class Obj> void test_obj(Obj const& obj) { tg::rng rng; - const int domainD = tg::object_traits<Obj>::domain_dimension; - const int objectD = tg::object_traits<Obj>::object_dimension; + auto const domainD = tg::object_traits<Obj>::domain_dimension; + auto const objectD = tg::object_traits<Obj>::object_dimension; + auto const solidD = [&objectD] { + if constexpr (tg::object_traits<Obj>::is_boundary) + return objectD + 1; + return objectD; + }(); + using TraitsT = typename tg::object_traits<Obj>::tag_t; + if constexpr (tg::object_traits<Obj>::is_finite) { float size; @@ -26,6 +33,7 @@ void test_obj(Obj const& obj) uniformPts.emplace_back(uniform(rng, obj)); auto const aabb = aabb_of(obj); + auto const aabbBigger = tg::aabb(aabb.min - 0.25f, aabb.max + 0.25f); tg::aabb3 aabb3; if constexpr (domainD == 3) aabb3 = aabb; @@ -53,11 +61,10 @@ void test_obj(Obj const& obj) gv::view(gv::lines(aabb3)); // normal_of - if constexpr (domainD == 3 && ((objectD == 2 && !tg::object_traits<Obj>::is_boundary) || (objectD == 1 && tg::object_traits<Obj>::is_boundary))) + if constexpr (domainD == 3 && solidD == 2) gv::view(tg::segment3(centroid, centroid + normal_of(obj)), tg::color4::green); } { - auto const aabbBigger = tg::aabb(aabb.min - 0.25f, aabb.max + 0.25f); auto pointsInside = std::vector<tg::pos3>(); auto pointsOutside = std::vector<tg::pos3>(); auto const numPts = tg::pow(20.f, domainD); @@ -73,9 +80,27 @@ void test_obj(Obj const& obj) // contains auto v = gv::view(); - view(pointsInside, gv::maybe_empty, tg::color4::green); + view(pointsInside, gv::maybe_empty, tg::color4::green, "contains (+-" + tg::to_string(tolerance) + ")"); gv::view(gv::points(pointsOutside).point_size_px(5.f)); } + if constexpr (!std::is_same_v<Obj, tg::ellipse<solidD, float, domainD, TraitsT>>) { + auto points = std::vector<tg::pos3>(); + auto lines = std::vector<tg::segment3>(); + auto const numPts = tg::pow(20.f, domainD); + for (auto i = 0; i < numPts; ++i) + { + auto const p = uniform(rng, aabbBigger); + auto const pProj = tg::pos3(project(p, obj)); + points.emplace_back(pProj); + if (!contains(obj, p)) + lines.emplace_back(tg::pos3(p), pProj); + } + + // project + auto v = gv::view(); + gv::view(points, "project"); + gv::view(lines); + } } } -- GitLab