1#include <Core/Asset/FileData.hpp>
2#include <Core/Asset/VolumeData.hpp>
3#include <Core/Geometry/Volume.hpp>
4#include <Core/Math/Math.hpp>
5#include <Core/Utils/Log.hpp>
6#include <IO/VolumesLoader/VolumeLoader.hpp>
7#include <catch2/catch_test_macros.hpp>
9TEST_CASE(
"IO/VolumesLoader",
"[unittests][IO]" ) {
11 using namespace Ra::Core::Asset;
12 using namespace Ra::Core::Geometry;
13 using namespace Ra::Core::Utils;
14 using namespace Ra::IO;
18 SECTION(
"Basic FileLoaderInterface" ) {
19 auto loader_name = loader.name();
20 REQUIRE( loader_name.compare(
"VolumeLoader (pbrt experimental, pvm)" ) == 0 );
22 auto supportedFiles = loader.getFileExtensions();
26 REQUIRE( support_vol !=
std::end( supportedFiles ) );
30 REQUIRE( support_pvm !=
std::end( supportedFiles ) );
34 REQUIRE( support_openvdb ==
std::end( supportedFiles ) );
36 auto handle_vol = loader.handleFileExtension(
"pvm" );
37 REQUIRE( handle_vol );
39 auto handle_pvm = loader.handleFileExtension(
"pvm" );
40 REQUIRE( handle_pvm );
42 auto handle_openvdb = loader.handleFileExtension(
"vdb" );
43 REQUIRE( !handle_openvdb );
45 SECTION(
"Loading PVM unkown file" ) {
46 auto loadedFile = loader.loadFile(
"unknown.pvm" );
47 REQUIRE( loadedFile ==
nullptr );
49 SECTION(
"Loading PVM data file" ) {
50 LOG( logINFO ) <<
"loading data/Bucky.pvm";
51 auto loadedFile = loader.loadFile(
"data/Bucky.pvm" );
52 REQUIRE( loadedFile !=
nullptr );
53 auto volumeFiledata = loadedFile->getVolumeData();
54 REQUIRE( volumeFiledata.size() == 1 );
55 auto abstractvolume = volumeFiledata[0]->volume;
56 REQUIRE( abstractvolume !=
nullptr );
57 REQUIRE( abstractvolume->getType() == AbstractVolume::VolumeStorageType::DISCRETE_DENSE );
59 auto volumeData =
dynamic_cast<VolumeGrid*
>( abstractvolume );
60 REQUIRE( volumeData !=
nullptr );
62 auto volumeSize = volumeData->size();
64 ( ( volumeSize[0] == 32 ) && ( volumeSize[1] == 32 ) && ( volumeSize[2] == 32 ) ) );
66 auto binsize = volumeData->binSize();
67 REQUIRE( ( Math::areApproxEqual( binsize[0], 1_ra ) &&
68 Math::areApproxEqual( binsize[1], 1_ra ) &&
69 Math::areApproxEqual( binsize[2], 1_ra ) ) );
70 auto hasGradient = volumeData->hasGradients();
71 REQUIRE( hasGradient ==
false );
72 LOG( logINFO ) <<
"deleting volume.";
76 SECTION(
"Loading PVM data file" ) {
77 LOG( logINFO ) <<
"loading data/Lobster.pvm";
78 auto loadedFile = loader.loadFile(
"data/Lobster.pvm" );
79 REQUIRE( loadedFile !=
nullptr );
80 auto volumeFiledata = loadedFile->getVolumeData();
81 REQUIRE( volumeFiledata.size() == 1 );
82 auto abstractvolume = volumeFiledata[0]->volume;
83 REQUIRE( abstractvolume !=
nullptr );
84 REQUIRE( abstractvolume->getType() == AbstractVolume::VolumeStorageType::DISCRETE_DENSE );
86 auto volumeData =
dynamic_cast<VolumeGrid*
>( abstractvolume );
87 REQUIRE( volumeData !=
nullptr );
89 auto volumeSize = volumeData->size();
91 ( ( volumeSize[0] == 301 ) && ( volumeSize[1] == 324 ) && ( volumeSize[2] == 56 ) ) );
93 auto binsize = volumeData->binSize();
94 REQUIRE( ( Math::areApproxEqual( binsize[0], 1._ra ) &&
95 Math::areApproxEqual( binsize[1], 1._ra ) &&
98 Math::areApproxEqual( binsize[2],
103 LOG( logINFO ) <<
"computing gradients for data/Lobster.pvm.";
104 volumeData->computeGradients();
105 auto hasGradient = volumeData->hasGradients();
106 REQUIRE( hasGradient ==
true );
108 LOG( logINFO ) <<
"deleting volume.";
Discrete volume data storing values in a regular grid.
Loads density grid for volume data. This loader support 2 file formats for density grid data.
This namespace contains everything "low level", related to data, datastuctures, and computation.