Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,7 @@ src/geometry/closest.cpp
src/error.cpp
src/mesh_manager_interface.cpp
src/ray_tracing_interface.cpp
src/triangle_intersect.cpp
src/util/str_utils.cpp
src/tetrahedron_contain.cpp
src/overlap_check/overlap.cpp
src/element_face_accessor.cpp
src/xdg.cpp
Expand All @@ -127,6 +125,8 @@ src/xdg.cpp
if (XDG_ENABLE_EMBREE)
list(APPEND xdg_sources
src/embree/ray_tracer.cpp
src/embree/triangle_intersect.cpp
src/embree/tetrahedron_contain.cpp
)
endif()

Expand Down Expand Up @@ -187,6 +187,7 @@ endif()
add_library(xdg SHARED ${xdg_sources})

target_link_libraries(xdg indicators::indicators)
target_link_libraries(xdg fmt::fmt)

if(XDG_ENABLE_EMBREE)
# pass precompile definition depending on embree version
Expand Down Expand Up @@ -238,7 +239,7 @@ endif()
# ==========================

if (XDG_ENABLE_EMBREE)
target_link_libraries(xdg embree fmt::fmt)
target_link_libraries(xdg embree)
endif()

if (XDG_ENABLE_GPRT)
Expand Down
File renamed without changes.
File renamed without changes.
10 changes: 10 additions & 0 deletions include/xdg/embree/embree_interface.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

#ifdef XDG_EMBREE4

#include "xdg/embree/embree4.h"

#elif defined(XDG_EMBREE3)

#include "xdg/embree/embree3.h"

#endif
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#define _XDG_TRIANGLE_REF_H

#include "xdg/constants.h"
#include "xdg/embree_interface.h"
#include "xdg/embree/embree_interface.h"
#include "xdg/mesh_manager_interface.h"

namespace xdg {
Expand Down
4 changes: 2 additions & 2 deletions include/xdg/ray.h → include/xdg/embree/ray.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
#include "xdg/vec3da.h"

#include "xdg/constants.h"
#include "xdg/embree_interface.h"
#include "xdg/primitive_ref.h"
#include "xdg/embree/embree_interface.h"
#include "xdg/embree/primitive_ref.h"

namespace xdg {

Expand Down
8 changes: 4 additions & 4 deletions include/xdg/embree/ray_tracer.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
#include <unordered_map>

#include "xdg/constants.h"
#include "xdg/embree_interface.h"
#include "xdg/embree/embree_interface.h"
#include "xdg/mesh_manager_interface.h"
#include "xdg/primitive_ref.h"
#include "xdg/geometry_data.h"
#include "xdg/embree/primitive_ref.h"
#include "xdg/embree/geometry_data.h"
#include "xdg/ray_tracing_interface.h"
#include "xdg/ray.h"
#include "xdg/embree/ray.h"
#include "xdg/error.h"

namespace xdg {
Expand Down
14 changes: 0 additions & 14 deletions include/xdg/embree_interface.h

This file was deleted.

3 changes: 0 additions & 3 deletions include/xdg/gprt/ray_tracer.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@

#include "xdg/constants.h"
#include "xdg/mesh_manager_interface.h"
#include "xdg/primitive_ref.h"
#include "xdg/geometry_data.h"
#include "xdg/ray_tracing_interface.h"
#include "xdg/ray.h"
#include "xdg/error.h"
#include "gprt/gprt.h"
#include "shared_structs.h"
Expand Down
3 changes: 0 additions & 3 deletions include/xdg/ray_tracing_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@
#include <unordered_map>

#include "xdg/constants.h"
#include "xdg/embree_interface.h"
#include "xdg/mesh_manager_interface.h"
#include "xdg/primitive_ref.h"
#include "xdg/geometry_data.h"

namespace xdg
{
Expand Down
7 changes: 5 additions & 2 deletions include/xdg/xdg.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,11 @@ Direction surface_normal(MeshID surface,
}
// Private methods
private:
double _triangle_volume_contribution(const PrimitiveRef& triangle) const;
double _triangle_area_contribution(const PrimitiveRef& triangle) const;

#ifdef XDG_ENABLE_EMBREE
double _triangle_volume_contribution(const PrimitiveRef& triangle) const;
double _triangle_area_contribution(const PrimitiveRef& triangle) const;
#endif

// Data members
std::shared_ptr<RayTracer> ray_tracing_interface_ {nullptr};
Expand Down
6 changes: 3 additions & 3 deletions src/embree/ray_tracer.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#include "xdg/embree/ray_tracer.h"
#include "xdg/error.h"
#include "xdg/geometry_data.h"
#include "xdg/ray.h"
#include "xdg/tetrahedron_contain.h"
#include "xdg/embree/geometry_data.h"
#include "xdg/embree/ray.h"
#include "xdg/embree/tetrahedron_contain.h"


namespace xdg {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include "xdg/constants.h"
#include "xdg/ray_tracing_interface.h"
#include "xdg/ray.h"
#include "xdg/embree/ray.h"
#include "xdg/vec3da.h"

#include "xdg/util/linalg.h"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#include <algorithm> // for find

#include "xdg/geometry/closest.h"
#include "xdg/primitive_ref.h"
#include "xdg/geometry_data.h"
#include "xdg/embree/primitive_ref.h"
#include "xdg/embree/geometry_data.h"
#include "xdg/geometry/plucker.h"
#include "xdg/ray.h"
#include "xdg/embree/ray.h"

namespace xdg
{
Expand Down
11 changes: 8 additions & 3 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,19 @@ test_point_in_volume
test_normal
test_measure
test_no_geom
test_ray_duals
test_xdg_interface
test_tet_containment
test_tracks
test_tet_intersection
test_tally_segments
)

if (XDG_ENABLE_EMBREE)
list (APPEND TEST_NAMES
test_ray_duals
test_tet_containment
test_tet_intersection
)
endif()

if (XDG_ENABLE_MOAB)
list(APPEND TEST_NAMES test_moab)
endif()
Expand Down
40 changes: 16 additions & 24 deletions tests/test_bvh.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// for testing
#include <catch2/catch_test_macros.hpp>
#include <catch2/generators/catch_generators.hpp>

// xdg includes
#include "xdg/constants.h"
#include "xdg/mesh_manager_interface.h"
#include "xdg/embree/ray_tracer.h"

#include "util.h"
#include "mesh_mock.h"

using namespace xdg;
Expand All @@ -19,30 +19,22 @@ TEST_CASE("Test Mesh BVH")
REQUIRE(mm->num_surfaces() == 6);
REQUIRE(mm->num_volume_faces(1) == 12);

std::shared_ptr<RayTracer> rti = std::make_shared<EmbreeRayTracer>();

std::unordered_map<MeshID, TreeID> volume_to_scene_map;
for (auto volume: mm->volumes()) {
auto [volume_tree, element_tree] = rti->register_volume(mm, volume);
volume_to_scene_map[volume]= volume_tree;
}
// Generate one test run per enabled backend
auto rt_backend = GENERATE(RTLibrary::EMBREE, RTLibrary::GPRT);

REQUIRE(rti->num_registered_trees() == 2);
REQUIRE(rti->num_registered_surface_trees() == 1);
REQUIRE(rti->num_registered_element_trees() == 1);

mm = std::make_shared<MeshMock>();
mm->init(); // this should do nothing

REQUIRE(mm->num_volumes() == 1);
REQUIRE(mm->num_surfaces() == 6);
REQUIRE(mm->num_volume_faces(1) == 12);
DYNAMIC_SECTION(fmt::format("Backend = {}", rt_backend)) {
check_ray_tracer_supported(rt_backend); // skip if backend not enabled at configuration time
auto rti = create_raytracer(rt_backend);
REQUIRE(rti);

rti = std::make_shared<EmbreeRayTracer>();
std::unordered_map<MeshID, TreeID> volume_to_scene_map;
for (auto volume: mm->volumes()) {
auto [volume_tree, element_tree] = rti->register_volume(mm, volume);
volume_to_scene_map[volume]= volume_tree;
}

volume_to_scene_map.clear();
for (auto volume: mm->volumes()) {
auto [volume_tree, element_tree] = rti->register_volume(mm, volume);
volume_to_scene_map[volume] = volume_tree;
REQUIRE(rti->num_registered_trees() == 2);
REQUIRE(rti->num_registered_surface_trees() == 1);
REQUIRE(rti->num_registered_element_trees() == 1);
}
}
1 change: 0 additions & 1 deletion tests/test_closest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
// xdg test includes
#include "mesh_mock.h"
#include "util.h"
#include "xdg/embree/ray_tracer.h"

using namespace xdg;

Expand Down
48 changes: 28 additions & 20 deletions tests/test_find_element.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
// for testing
#include <catch2/catch_test_macros.hpp>
#include <catch2/generators/catch_generators.hpp>

// xdg includes
#include "xdg/constants.h"
#include "xdg/mesh_manager_interface.h"
#include "xdg/embree/ray_tracer.h"

#include "util.h"
#include "mesh_mock.h"

using namespace xdg;
Expand All @@ -20,26 +21,33 @@ TEST_CASE("Test Find Volumetric Element")
REQUIRE(mm->num_surfaces() == 6);
REQUIRE(mm->num_volume_elements(1) == 12); // should return 12 volumetric elements

std::shared_ptr<RayTracer> rti = std::make_shared<EmbreeRayTracer>();
std::unordered_map<MeshID, TreeID> volume_to_scene_map;
std::unordered_map<TreeID, TreeID> element_to_scene_map;
for (auto volume: mm->volumes()) {
auto [volume_tree, element_tree] = rti->register_volume(mm, volume);
volume_to_scene_map[volume] = volume_tree;
element_to_scene_map[volume_tree] = element_tree;
// Generate one test run per enabled backend
auto rt_backend = GENERATE(RTLibrary::EMBREE, RTLibrary::GPRT);
DYNAMIC_SECTION(fmt::format("Backend = {}", rt_backend)) {
check_ray_tracer_supported(rt_backend); // skip if backend not enabled at configuration time
auto rti = create_raytracer(rt_backend);
REQUIRE(rti);

std::unordered_map<MeshID, TreeID> volume_to_scene_map;
std::unordered_map<TreeID, TreeID> element_to_scene_map;
for (auto volume: mm->volumes()) {
auto [volume_tree, element_tree] = rti->register_volume(mm, volume);
volume_to_scene_map[volume] = volume_tree;
element_to_scene_map[volume_tree] = element_tree;
}
REQUIRE(rti->num_registered_trees() == 2);

MeshID volume = 1;

// test finding a volumetric element within the volume
Position point_inside {0.0, 0.0, 0.0}; // point inside the volume
MeshID element_id = rti->find_element(element_to_scene_map[volume], point_inside);
REQUIRE(element_id != ID_NONE); // should find an element

Position point_outside {10.0, 10.0, 10.0}; // point outside the volume
element_id = rti->find_element(element_to_scene_map[volume], point_outside);
REQUIRE(element_id == ID_NONE); // should not find an element since the point is outside the volume
}
REQUIRE(rti->num_registered_trees() == 2);

MeshID volume = 1;

// test finding a volumetric element within the volume
Position point_inside {0.0, 0.0, 0.0}; // point inside the volume
MeshID element_id = rti->find_element(element_to_scene_map[volume], point_inside);
REQUIRE(element_id != ID_NONE); // should find an element

Position point_outside {10.0, 10.0, 10.0}; // point outside the volume
element_id = rti->find_element(element_to_scene_map[volume], point_outside);
REQUIRE(element_id == ID_NONE); // should not find an element since the point is outside the volume
}


28 changes: 17 additions & 11 deletions tests/test_measure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
// for testing
#include <catch2/catch_test_macros.hpp>
#include <catch2/matchers/catch_matchers_floating_point.hpp>
#include <catch2/generators/catch_generators.hpp>

#include "xdg/xdg.h"

// xdg test includes
#include "mesh_mock.h"
#include "util.h"
#include "xdg/embree/ray_tracer.h"

using namespace xdg;

Expand All @@ -19,19 +19,25 @@ TEST_CASE("Test Mesh Mock")
std::shared_ptr<MeshManager> mm = std::make_shared<MeshMock>();
mm->init(); // this should do nothing, but it's good practice to call it

XDG xdg{mm, RTLibrary::EMBREE};
// Generate one test run per enabled backend
auto rt_backend = GENERATE(RTLibrary::EMBREE, RTLibrary::GPRT);

double volume = xdg.measure_volume(mm->volumes()[0]);
REQUIRE_THAT(volume, Catch::Matchers::WithinAbs(693., 1e-6));
DYNAMIC_SECTION(fmt::format("Backend = {}", rt_backend)) {
check_ray_tracer_supported(rt_backend); // skip if backend not enabled at configuration time

double area = xdg.measure_volume_area(mm->volumes()[0]);
REQUIRE_THAT(area, Catch::Matchers::WithinAbs(478., 1e-6));
XDG xdg{mm, rt_backend};

std::vector<double> surface_areas = {63., 63., 99., 99., 77., 77.};
double volume = xdg.measure_volume(mm->volumes()[0]);
REQUIRE_THAT(volume, Catch::Matchers::WithinAbs(693., 1e-6));

for (int i = 0; i < mm->surfaces().size(); ++i) {
double area = xdg.measure_surface_area(mm->surfaces()[i]);
REQUIRE_THAT(area, Catch::Matchers::WithinAbs(surface_areas[i], 1e-6));
}
double area = xdg.measure_volume_area(mm->volumes()[0]);
REQUIRE_THAT(area, Catch::Matchers::WithinAbs(478., 1e-6));

std::vector<double> surface_areas = {63., 63., 99., 99., 77., 77.};

for (int i = 0; i < mm->surfaces().size(); ++i) {
double area = xdg.measure_surface_area(mm->surfaces()[i]);
REQUIRE_THAT(area, Catch::Matchers::WithinAbs(surface_areas[i], 1e-6));
}
}
}
4 changes: 2 additions & 2 deletions tests/test_normal.cpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// for testing
#include <catch2/catch_test_macros.hpp>
#include <catch2/matchers/catch_matchers_floating_point.hpp>
#include <catch2/generators/catch_generators.hpp>

// xdg includes
#include "xdg/mesh_manager_interface.h"
#include "xdg/primitive_ref.h"
#include "xdg/xdg.h"

#include "mesh_mock.h"
#include "xdg/embree/ray_tracer.h"
#include "util.h"

using namespace xdg;

Expand Down
Loading
Loading