diff --git a/offline_ray_tracer/include/settings.hpp b/offline_ray_tracer/include/settings.hpp index 90655bdb69595d4bf84b7cd7fa0102050a786fe7..41d7a5f51851a5bc4294958fe23bbfc1bea1beca 100644 --- a/offline_ray_tracer/include/settings.hpp +++ b/offline_ray_tracer/include/settings.hpp @@ -40,13 +40,15 @@ struct settings if (iteratee.isMember("volume" )) entry.volume = iteratee["volume" ].asString(); } - transfer_function = root["transfer_function"] .asString(); - time_scale = root["time_scale" ] .asFloat (); - loop = root["loop" ] .asBool (); - image_size = {root["image_size" ][0].asUInt (), - root["image_size" ][1].asUInt ()}; - samples = root["samples" ] .asUInt (); - update_rate = root["update_rate" ] .asFloat (); + if (root.isMember("transfer_function")) + transfer_function = root["transfer_function"] .asString(); + + time_scale = root["time_scale" ] .asFloat (); + loop = root["loop" ] .asBool (); + image_size = {root["image_size" ][0].asUInt (), + root["image_size" ][1].asUInt ()}; + samples = root["samples" ] .asUInt (); + update_rate = root["update_rate" ] .asFloat (); for (auto& iteratee : root["key_frames"]) { @@ -74,7 +76,7 @@ struct settings // Input settings. std::vector<data_filepath> data_filepaths = {}; - std::string transfer_function = ""; + std::string transfer_function = std::string(); float time_scale = 1000.0f; bool loop = true; diff --git a/offline_ray_tracer/source/main.cpp b/offline_ray_tracer/source/main.cpp index 432b1d53f01d70eabdc5c9f1561e3bbc10b42fdc..3724831d3063c7922af172dc9842004ed07193b3 100644 --- a/offline_ray_tracer/source/main.cpp +++ b/offline_ray_tracer/source/main.cpp @@ -25,8 +25,7 @@ std::int32_t main(std::int32_t argc, char** argv) { std::cout << "Parsing settings.\n"; - auto settings = rt::settings(argv[1]); - auto transfer_function = rt::transfer_function(settings.transfer_function); + auto settings = rt::settings(argv[1]); std::cout << "Setting up renderer.\n"; auto renderer = vtkSmartPointer<vtkRenderer> ::New(); @@ -52,17 +51,26 @@ std::int32_t main(std::int32_t argc, char** argv) interpolator->AddCamera (key_frame.time, camera); } - std::cout << "Setting up actors and volumes.\n"; - auto pd_mapper = vtkSmartPointer<vtkPolyDataMapper> ::New(); - auto ug_mapper = vtkSmartPointer<vtkUnstructuredGridVolumeRayCastMapper>::New(); - auto pd_actor = vtkSmartPointer<vtkActor> ::New(); - auto ug_volume = vtkSmartPointer<vtkVolume> ::New(); - pd_actor ->SetMapper (pd_mapper); - ug_volume->SetMapper (ug_mapper); - renderer ->AddActor (pd_actor ); - renderer ->AddVolume (ug_volume); - ug_volume->GetProperty()->SetScalarOpacity(transfer_function.opacity_function); - ug_volume->GetProperty()->SetColor (transfer_function.color_function ); + std::cout << "Setting up geometry.\n"; + auto pd_mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); + auto pd_actor = vtkSmartPointer<vtkActor> ::New(); + if (!settings.data_filepaths[0].geometry.empty()) + { + pd_actor->SetMapper(pd_mapper); + renderer->AddActor (pd_actor ); + } + + std::cout << "Setting up volume.\n"; + auto ug_mapper = vtkSmartPointer<vtkUnstructuredGridVolumeRayCastMapper>::New(); + auto ug_volume = vtkSmartPointer<vtkVolume> ::New(); + if (!settings.data_filepaths[0].volume.empty()) + { + auto tf = rt::transfer_function(settings.transfer_function); + ug_volume->GetProperty()->SetScalarOpacity(tf.opacity_function); + ug_volume->GetProperty()->SetColor (tf.color_function ); + ug_volume->SetMapper (ug_mapper); + renderer ->AddVolume (ug_volume); + } std::cout << "Setting up video writer.\n"; auto window_to_image = vtkSmartPointer<vtkWindowToImageFilter>::New();