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

Added visualization for project

parent f8626d9b
No related branches found
No related tags found
1 merge request!41Visual demonstration of object properties
Pipeline #16467 failed
...@@ -7,8 +7,15 @@ template <class Obj> ...@@ -7,8 +7,15 @@ template <class Obj>
void test_obj(Obj const& obj) void test_obj(Obj const& obj)
{ {
tg::rng rng; tg::rng rng;
const int domainD = tg::object_traits<Obj>::domain_dimension; auto const domainD = tg::object_traits<Obj>::domain_dimension;
const int objectD = tg::object_traits<Obj>::object_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) if constexpr (tg::object_traits<Obj>::is_finite)
{ {
float size; float size;
...@@ -26,6 +33,7 @@ void test_obj(Obj const& obj) ...@@ -26,6 +33,7 @@ void test_obj(Obj const& obj)
uniformPts.emplace_back(uniform(rng, obj)); uniformPts.emplace_back(uniform(rng, obj));
auto const aabb = aabb_of(obj); auto const aabb = aabb_of(obj);
auto const aabbBigger = tg::aabb(aabb.min - 0.25f, aabb.max + 0.25f);
tg::aabb3 aabb3; tg::aabb3 aabb3;
if constexpr (domainD == 3) if constexpr (domainD == 3)
aabb3 = aabb; aabb3 = aabb;
...@@ -53,11 +61,10 @@ void test_obj(Obj const& obj) ...@@ -53,11 +61,10 @@ void test_obj(Obj const& obj)
gv::view(gv::lines(aabb3)); gv::view(gv::lines(aabb3));
// normal_of // 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); 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 pointsInside = std::vector<tg::pos3>();
auto pointsOutside = std::vector<tg::pos3>(); auto pointsOutside = std::vector<tg::pos3>();
auto const numPts = tg::pow(20.f, domainD); auto const numPts = tg::pow(20.f, domainD);
...@@ -73,9 +80,27 @@ void test_obj(Obj const& obj) ...@@ -73,9 +80,27 @@ void test_obj(Obj const& obj)
// contains // contains
auto v = gv::view(); 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)); 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