From 1d5db36901afb6d0dee61c126270d87b86acfbf1 Mon Sep 17 00:00:00 2001
From: acdemiralp <demiralpali@gmail.com>
Date: Thu, 4 Mar 2021 01:22:00 +0100
Subject: [PATCH] This should do it.

---
 offline_ray_tracer/source/main.cpp | 103 ++++++++++++++---------------
 1 file changed, 51 insertions(+), 52 deletions(-)

diff --git a/offline_ray_tracer/source/main.cpp b/offline_ray_tracer/source/main.cpp
index d5a9dc7..10f5750 100644
--- a/offline_ray_tracer/source/main.cpp
+++ b/offline_ray_tracer/source/main.cpp
@@ -2,12 +2,10 @@
 #include <iostream>
 
 #include <vtkActor.h>
+#include <vtkAVIWriter.h>
 #include <vtkCamera.h>
 #include <vtkCameraInterpolator.h>
-#include <vtkColorTransferFunction.h>
-#include <vtkOggTheoraWriter.h>
 #include <vtkOSPRayPass.h>
-#include <vtkPiecewiseFunction.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkRenderer.h>
 #include <vtkRenderWindow.h>
@@ -16,16 +14,17 @@
 #include <vtkVolume.h>
 #include <vtkVolumeProperty.h>
 #include <vtkWindowToImageFilter.h>
+#include <vtkXMLPolyDataReader.h>
+#include <vtkXMLUnstructuredGridReader.h>
 
-#include <poly_data_io.hpp>
 #include <settings.hpp>
 #include <transfer_function.hpp>
-#include <unstructured_grid_io.hpp>
 
 std::int32_t main(std::int32_t argc, char** argv)
 {
   std::cout << "Parsing settings.\n";
   auto settings = rt::settings(argv[1]);
+  auto tf       = rt::transfer_function(settings.transfer_function);
 
   std::cout << "Setting up renderer.\n";
   auto renderer    = vtkSmartPointer<vtkRenderer>    ::New();
@@ -39,7 +38,7 @@ std::int32_t main(std::int32_t argc, char** argv)
 
   std::cout << "Setting up camera interpolator.\n";
   auto interpolator = vtkSmartPointer<vtkCameraInterpolator>::New();
-  interpolator->SetInterpolationType (vtkCameraInterpolator::INTERPOLATION_TYPE_SPLINE);
+  interpolator->SetInterpolationType(vtkCameraInterpolator::INTERPOLATION_TYPE_SPLINE);
   for (auto& key_frame : settings.key_frames)
   {
     auto camera = renderer->GetActiveCamera();
@@ -52,17 +51,19 @@ std::int32_t main(std::int32_t argc, char** argv)
   }
 
   std::cout << "Setting up geometry and volume.\n";
+  auto pd_reader = vtkSmartPointer<vtkXMLPolyDataReader>                  ();
   auto pd_mapper = vtkSmartPointer<vtkPolyDataMapper>                     ();
   auto pd_actor  = vtkSmartPointer<vtkActor>                              ();
+  auto ug_reader = vtkSmartPointer<vtkXMLUnstructuredGridReader>          ();
   auto ug_mapper = vtkSmartPointer<vtkUnstructuredGridVolumeRayCastMapper>();
   auto ug_volume = vtkSmartPointer<vtkVolume>                             ();
 
   std::cout << "Setting up video writer.\n";
   auto window_to_image = vtkSmartPointer<vtkWindowToImageFilter>::New();
-  auto video_writer    = vtkSmartPointer<vtkOggTheoraWriter>    ::New();
+  auto video_writer    = vtkSmartPointer<vtkAVIWriter>          ::New();
   window_to_image->SetInput          (window);
   video_writer   ->SetInputConnection(window_to_image->GetOutputPort());
-  video_writer   ->SetFileName       ("video.ogg");
+  video_writer   ->SetFileName       ("video.avi");
   video_writer   ->SetQuality        (1);
   video_writer   ->SetRate           (1000.0 / settings.update_rate);
   video_writer   ->Start             ();
@@ -77,55 +78,53 @@ std::int32_t main(std::int32_t argc, char** argv)
 
     if (last_slice != slice)
     {
-      last_slice = slice;
-
-      std::cout << "Clearing previous slice.\n";
-      renderer ->RemoveActor (pd_actor );
-      pd_actor ->SetMapper   (nullptr  );
-      renderer ->RemoveVolume(ug_volume);
-      ug_volume->SetMapper   (nullptr  );
-      
-      pd_mapper = nullptr;
-      pd_actor  = nullptr;
-      ug_mapper = nullptr;
-      ug_volume = nullptr;
-
-      
-    auto reader = vtkSmartPointer<vtkXMLPolyDataReader>::New();
-    auto data   = vtkSmartPointer<vtkPolyData>         ::New();
-    reader->SetFileName(filepath.c_str());
-    reader->Update     ();
-    data  ->ShallowCopy(reader->GetOutput());
-    return data;
-
-      
-    auto reader = vtkSmartPointer<vtkXMLUnstructuredGridReader>::New();
-    auto data   = vtkSmartPointer<vtkUnstructuredGrid>         ::New();
-    reader->SetFileName(filepath.c_str());
-
-    if (field_name)
-      reader->SetInputArrayToProcess(0, 0, 0, vtkDataObject::FIELD_ASSOCIATION_CELLS, field_name->c_str());
-
-    reader->Update     ();
-    data  ->ShallowCopy(reader->GetOutput());
-    return data;
-
-      std::cout << "Loading next slice (" << slice << ").\n";
-      if (!settings.data_filepaths[slice].geometry.empty())
-        pd_mapper->SetInputData(rt::poly_data_io        ::read(settings.data_filepaths[slice].geometry));
-      if (!settings.data_filepaths[slice].volume  .empty())
-        ug_mapper->SetInputData(rt::unstructured_grid_io::read(settings.data_filepaths[slice].volume  , "Q"));
-
-      auto tf = rt::transfer_function(settings.transfer_function);
-      pd_actor->SetMapper                       (pd_mapper);
-      renderer->AddActor                        (pd_actor );
+      if (last_slice != -1)
+      {
+        std::cout << "Clearing previous slice.\n";
+
+        renderer ->RemoveActor          (pd_actor );
+        pd_actor ->SetMapper            (nullptr  );
+        pd_mapper->RemoveInputConnection(0, pd_reader->GetOutputPort());
+
+        renderer ->RemoveVolume         (ug_volume);
+        ug_volume->SetMapper            (nullptr  );
+        ug_mapper->RemoveInputConnection(0, ug_reader->GetOutputPort());
+        
+        pd_reader = nullptr;
+        pd_mapper = nullptr;
+        pd_actor  = nullptr;
+
+        ug_reader = nullptr;
+        ug_mapper = nullptr;
+        ug_volume = nullptr;
+      }
+
+      pd_reader = vtkSmartPointer<vtkXMLPolyDataReader>                  ::New();
+      pd_mapper = vtkSmartPointer<vtkPolyDataMapper>                     ::New();
+      pd_actor  = vtkSmartPointer<vtkActor>                              ::New();
+
+      ug_reader = vtkSmartPointer<vtkXMLUnstructuredGridReader>          ::New();
+      ug_mapper = vtkSmartPointer<vtkUnstructuredGridVolumeRayCastMapper>::New();
+      ug_volume = vtkSmartPointer<vtkVolume>                             ::New();
+
+      std::cout << "Loading next slice: " << slice << ".\n";
+      pd_reader->SetFileName                    (settings.data_filepaths[slice].geometry.c_str());
+      pd_mapper->SetInputConnection             (pd_reader->GetOutputPort());
+      pd_actor ->SetMapper                      (pd_mapper);
+      renderer ->AddActor                       (pd_actor );
+
+      ug_reader->SetFileName                    (settings.data_filepaths[slice].volume  .c_str());
+      ug_reader->SetInputArrayToProcess         (0, 0, 0, vtkDataObject::FIELD_ASSOCIATION_CELLS, "Q");
+      ug_mapper->SetInputConnection             (ug_reader->GetOutputPort());
+      ug_volume->SetMapper                      (ug_mapper);
       ug_volume->GetProperty()->SetScalarOpacity(tf.opacity_function);
       ug_volume->GetProperty()->SetColor        (tf.color_function  );
-      ug_volume->SetMapper                      (ug_mapper);
       renderer ->AddVolume                      (ug_volume);
+
+      last_slice = slice;
     }
 
-    std::cout << "Rendering frame " << current_time << ".\n";
+    std::cout << "Rendering frame: " << current_time << ".\n";
     interpolator   ->InterpolateCamera       (current_time, renderer->GetActiveCamera());
     renderer       ->ResetCameraClippingRange();
     window         ->Render                  ();
-- 
GitLab