Loading [MathJax]/extensions/TeX/AMSmath.js
Radium Engine  1.5.28
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
volumeloader.cpp
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>
8
9TEST_CASE( "IO/VolumesLoader", "[unittests][IO]" ) {
10 using namespace Ra::Core;
11 using namespace Ra::Core::Asset;
12 using namespace Ra::Core::Geometry;
13 using namespace Ra::Core::Utils;
14 using namespace Ra::IO;
15
16 VolumeLoader loader;
17
18 SECTION( "Basic FileLoaderInterface" ) {
19 auto loader_name = loader.name();
20 REQUIRE( loader_name.compare( "VolumeLoader (pbrt experimental, pvm)" ) == 0 );
21
22 auto supportedFiles = loader.getFileExtensions();
23
24 auto support_vol = std::find(
25 std::begin( supportedFiles ), std::end( supportedFiles ), std::string { "*.vol" } );
26 REQUIRE( support_vol != std::end( supportedFiles ) );
27
28 auto support_pvm = std::find(
29 std::begin( supportedFiles ), std::end( supportedFiles ), std::string { "*.pvm" } );
30 REQUIRE( support_pvm != std::end( supportedFiles ) );
31
32 auto support_openvdb = std::find(
33 std::begin( supportedFiles ), std::end( supportedFiles ), std::string { "*.vdb" } );
34 REQUIRE( support_openvdb == std::end( supportedFiles ) );
35
36 auto handle_vol = loader.handleFileExtension( "pvm" );
37 REQUIRE( handle_vol );
38
39 auto handle_pvm = loader.handleFileExtension( "pvm" );
40 REQUIRE( handle_pvm );
41
42 auto handle_openvdb = loader.handleFileExtension( "vdb" );
43 REQUIRE( !handle_openvdb );
44 }
45 SECTION( "Loading PVM unkown file" ) {
46 auto loadedFile = loader.loadFile( "unknown.pvm" );
47 REQUIRE( loadedFile == nullptr );
48 }
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 );
58
59 auto volumeData = dynamic_cast<VolumeGrid*>( abstractvolume );
60 REQUIRE( volumeData != nullptr );
61
62 auto volumeSize = volumeData->size();
63 REQUIRE(
64 ( ( volumeSize[0] == 32 ) && ( volumeSize[1] == 32 ) && ( volumeSize[2] == 32 ) ) );
65
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.";
73 delete volumeData;
74 delete loadedFile;
75 }
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 );
85
86 auto volumeData = dynamic_cast<VolumeGrid*>( abstractvolume );
87 REQUIRE( volumeData != nullptr );
88
89 auto volumeSize = volumeData->size();
90 REQUIRE(
91 ( ( volumeSize[0] == 301 ) && ( volumeSize[1] == 324 ) && ( volumeSize[2] == 56 ) ) );
92
93 auto binsize = volumeData->binSize();
94 REQUIRE( ( Math::areApproxEqual( binsize[0], 1._ra ) &&
95 Math::areApproxEqual( binsize[1], 1._ra ) &&
96 // if Scalar = double, since reader use float, increase epsilon by float/double
97 // epsilon ratio (test hack ;))
98 Math::areApproxEqual( binsize[2],
99 1.4_ra,
102
103 LOG( logINFO ) << "computing gradients for data/Lobster.pvm.";
104 volumeData->computeGradients();
105 auto hasGradient = volumeData->hasGradients();
106 REQUIRE( hasGradient == true );
107
108 LOG( logINFO ) << "deleting volume.";
109 delete volumeData;
110 delete loadedFile;
111 }
112}
T begin(T... args)
Discrete volume data storing values in a regular grid.
Definition Volume.hpp:187
Loads density grid for volume data. This loader support 2 file formats for density grid data.
T end(T... args)
T epsilon(T... args)
T find(T... args)
This namespace contains everything "low level", related to data, datastuctures, and computation.
Definition Cage.cpp:5