Skip to content
Snippets Groups Projects
Commit 48f717c5 authored by Aaron Grabowy's avatar Aaron Grabowy
Browse files

Added visualization for project

parent f8626d9b
Branches
No related tags found
1 merge request!41Visual demonstration of object properties
Pipeline #16467 failed
......@@ -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);
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment