1 // Copyright 2009-2021 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 
4 #include "Importer.h"
5 // ospcommon
6 #include "rkcommon/os/FileName.h"
7 #include "sg/scene/volume/Vdb.h"
8 
9 namespace ospray {
10 namespace sg {
11 
12 struct VDBImporter : public Importer
13 {
14   VDBImporter() = default;
15   ~VDBImporter() override = default;
16 
17   void importScene() override;
18 };
19 
20 OSP_REGISTER_SG_NODE_NAME(VDBImporter, importer_vdb);
21 
22 // vdbImporter definitions /////////////////////////////////////////////
23 
importScene()24 void VDBImporter::importScene()
25 {
26 #if USE_OPENVDB
27   // Create a root Transform/Instance off the Importer, under which to build
28   // the import hierarchy
29   auto rootName = fileName.name() + "_rootXfm";
30   auto nodeName = fileName.name() + "_volume";
31 
32   auto rootNode = createNode(rootName, "transform");
33   auto volumeImport = createNodeAs<VdbVolume>(nodeName, "volume_vdb");
34 
35   volumeImport->load(fileName);
36 
37   auto tf = createNode("transferFunction", "transfer_function_turbo");
38   auto valueRange = volumeImport->child("valueRange").valueAs<range1f>();
39   tf->child("valueRange") = valueRange.toVec2();
40   volumeImport->add(tf);
41 
42   rootNode->add(volumeImport);
43 
44   // Finally, add node hierarchy to importer parent
45   add(rootNode);
46 
47   std::cout << "...finished import!\n";
48 #else
49   std::cout << "OpenVDB not enabled in build.  Rebuild Studio, selecting "
50                "ENABLE_OPENVDB in cmake."
51             << std::endl;
52 #endif
53 }
54 
55 } // namespace sg
56 } // namespace ospray
57