From 151bcc8018d5faf1ad0cb735ce071a6877255164 Mon Sep 17 00:00:00 2001
From: Andrew Heather <a.heather@opencfd.co.uk>
Date: Fri, 10 Jun 2016 15:23:56 +0100
Subject: [PATCH] ENH: Run time post-processing updates and bug fixing.  Fixes
 #128 #121 #99

---
 .../fieldVisualisationBase.C                  | 37 +++----
 .../graphics/runTimePostProcessing/scene.C    | 98 +++++++++----------
 .../graphics/runTimePostProcessing/scene.H    | 11 +--
 3 files changed, 68 insertions(+), 78 deletions(-)

diff --git a/src/postProcessing/functionObjects/graphics/runTimePostProcessing/fieldVisualisationBase.C b/src/postProcessing/functionObjects/graphics/runTimePostProcessing/fieldVisualisationBase.C
index ed48eb60c01..ae440ca80ce 100644
--- a/src/postProcessing/functionObjects/graphics/runTimePostProcessing/fieldVisualisationBase.C
+++ b/src/postProcessing/functionObjects/graphics/runTimePostProcessing/fieldVisualisationBase.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2015-2016 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -453,31 +453,32 @@ Foam::fieldVisualisationBase::fieldVisualisationBase
     {
         case cbColour:
         {
+            scalarBar_.visible_ = false;
             break;
         }
         case cbField:
         {
             dict.lookup("range") >> range_;
+
+            if (dict.found("colourMap"))
+            {
+                colourMap_ = colourMapTypeNames.read(dict.lookup("colourMap"));
+            }
+
+            const dictionary& sbarDict = dict.subDict("scalarBar");
+            sbarDict.lookup("visible") >> scalarBar_.visible_;
+            if (scalarBar_.visible_)
+            {
+                sbarDict.lookup("vertical") >> scalarBar_.vertical_;
+                sbarDict.lookup("position") >> scalarBar_.position_;
+                sbarDict.lookup("title") >> scalarBar_.title_;
+                sbarDict.lookup("fontSize") >> scalarBar_.fontSize_;
+                sbarDict.lookup("labelFormat") >> scalarBar_.labelFormat_;
+                sbarDict.lookup("numberOfLabels") >> scalarBar_.numberOfLabels_;
+            }
             break;
         }
     }
-
-    if (dict.found("colourMap"))
-    {
-        colourMap_ = colourMapTypeNames.read(dict.lookup("colourMap"));
-    }
-
-    const dictionary& sbarDict = dict.subDict("scalarBar");
-    sbarDict.lookup("visible") >> scalarBar_.visible_;
-    if (scalarBar_.visible_)
-    {
-        sbarDict.lookup("vertical") >> scalarBar_.vertical_;
-        sbarDict.lookup("position") >> scalarBar_.position_;
-        sbarDict.lookup("title") >> scalarBar_.title_;
-        sbarDict.lookup("fontSize") >> scalarBar_.fontSize_;
-        sbarDict.lookup("labelFormat") >> scalarBar_.labelFormat_;
-        sbarDict.lookup("numberOfLabels") >> scalarBar_.numberOfLabels_;
-    }
 }
 
 
diff --git a/src/postProcessing/functionObjects/graphics/runTimePostProcessing/scene.C b/src/postProcessing/functionObjects/graphics/runTimePostProcessing/scene.C
index d471f7981ef..7808ed058f7 100644
--- a/src/postProcessing/functionObjects/graphics/runTimePostProcessing/scene.C
+++ b/src/postProcessing/functionObjects/graphics/runTimePostProcessing/scene.C
@@ -138,15 +138,6 @@ void Foam::scene::readCamera(const dictionary& dict)
         }
     }
 
-    if (dict.found("zoom"))
-    {
-        cameraZoom_.reset(DataEntry<scalar>::New("zoom", dict).ptr());
-    }
-    else
-    {
-        cameraZoom_.reset(new Constant<scalar>("zoom", 1.0));
-    }
-
     if (dict.found("viewAngle"))
     {
         cameraViewAngle_.reset(DataEntry<scalar>::New("viewAngle", dict).ptr());
@@ -172,11 +163,12 @@ void Foam::scene::readColours(const dictionary& dict)
 void Foam::scene::initialise(vtkRenderer* renderer, const word& outputName)
 {
     currentFrameI_ = 0;
+    position_ = startPosition_;
 
     outputName_ = outputName;
 
     // Set the background
-    const vector backgroundColour = colours_["background"]->value(position());
+    const vector backgroundColour = colours_["background"]->value(position_);
     renderer->SetBackground
     (
         backgroundColour.x(),
@@ -188,7 +180,7 @@ void Foam::scene::initialise(vtkRenderer* renderer, const word& outputName)
     if (colours_.found("background2"))
     {
         renderer->GradientBackgroundOn();
-        vector backgroundColour2 = colours_["background2"]->value(position());
+        vector backgroundColour2 = colours_["background2"]->value(position_);
 
         renderer->SetBackground2
         (
@@ -208,9 +200,24 @@ void Foam::scene::initialise(vtkRenderer* renderer, const word& outputName)
     camera->SetParallelProjection(parallelProjection_);
     renderer->SetActiveCamera(camera);
 
-    setCamera(renderer, true);
 
-    // Initialise the extents
+    // Initialise the camera
+    const vector up = cameraUp_->value(position_);
+    const vector pos = cameraPosition_->value(position_);
+    const point focalPoint = cameraFocalPoint_->value(position_);
+
+    camera->SetViewUp(up.x(), up.y(), up.z());
+    camera->SetPosition(pos.x(), pos.y(), pos.z());
+    camera->SetFocalPoint(focalPoint.x(), focalPoint.y(), focalPoint.z());
+    camera->Modified();
+
+
+    // Add the lights
+    vtkSmartPointer<vtkLightKit> lightKit = vtkSmartPointer<vtkLightKit>::New();
+    lightKit->AddLightsToRenderer(renderer);
+
+
+    // For static mode initialise the clip box
     if (mode_ == mtStatic)
     {
         const point& min = clipBox_.min();
@@ -232,48 +239,38 @@ void Foam::scene::initialise(vtkRenderer* renderer, const word& outputName)
 
         vtkSmartPointer<vtkActor> clipActor = vtkSmartPointer<vtkActor>::New();
         clipActor->SetMapper(clipMapper);
-        clipActor->VisibilityOn();
+        clipActor->VisibilityOff();
         renderer->AddActor(clipActor);
 
+        // Call resetCamera to fit clip box in view
+        clipActor->VisibilityOn();
         renderer->ResetCamera();
-
-        // Restore viewAngle (it might be reset by clipping)
-        vtkCamera* camera = renderer->GetActiveCamera();
-
-        if (!parallelProjection_)
-        {
-            camera->SetViewAngle(cameraViewAngle_->value(position()));
-        }
-        camera->Modified();
-
         clipActor->VisibilityOff();
     }
 }
 
 
-void Foam::scene::setCamera(vtkRenderer* renderer, const bool override) const
+void Foam::scene::setCamera(vtkRenderer* renderer) const
 {
-    if (mode_ == mtFlightPath || override)
+    if (mode_ == mtFlightPath)
     {
-        vtkCamera* camera = renderer->GetActiveCamera();
-
-        if (!parallelProjection_)
-        {
-            camera->SetViewAngle(cameraViewAngle_->value(position()));
-        }
-
-        const vector up = cameraUp_->value(position());
-        const vector pos = cameraPosition_->value(position());
-        const point focalPoint = cameraFocalPoint_->value(position());
+        const vector up = cameraUp_->value(position_);
+        const vector pos = cameraPosition_->value(position_);
+        const point focalPoint = cameraFocalPoint_->value(position_);
 
+        vtkCamera* camera = renderer->GetActiveCamera();
         camera->SetViewUp(up.x(), up.y(), up.z());
         camera->SetPosition(pos.x(), pos.y(), pos.z());
         camera->SetFocalPoint(focalPoint.x(), focalPoint.y(), focalPoint.z());
         camera->Modified();
+    }
 
-        vtkSmartPointer<vtkLightKit> lightKit =
-            vtkSmartPointer<vtkLightKit>::New();
-        lightKit->AddLightsToRenderer(renderer);
+    if (!parallelProjection_)
+    {
+        // Restore viewAngle (it might be reset by clipping)
+        vtkCamera* camera = renderer->GetActiveCamera();
+        camera->SetViewAngle(cameraViewAngle_->value(position_));
+        camera->Modified();
     }
 }
 
@@ -298,7 +295,6 @@ Foam::scene::scene(const objectRegistry& obr, const word& name)
     cameraPosition_(NULL),
     cameraFocalPoint_(NULL),
     cameraUp_(NULL),
-    cameraZoom_(NULL),
     cameraViewAngle_(NULL),
     clipBox_(),
     parallelProjection_(true),
@@ -348,8 +344,7 @@ void Foam::scene::read(const dictionary& dict)
 bool Foam::scene::loop(vtkRenderer* renderer)
 {
     static bool initialised = false;
-
-    setCamera(renderer, false);
+    setCamera(renderer);
 
     if (!initialised)
     {
@@ -357,19 +352,15 @@ bool Foam::scene::loop(vtkRenderer* renderer)
         return true;
     }
 
+    // Ensure that all objects can be seen without clipping
+    // Note: can only be done after all objects have been added!
+    renderer->ResetCameraClippingRange();
+
     // Save image from last iteration
     saveImage(renderer->GetRenderWindow());
 
     currentFrameI_++;
 
-    // Warning only if camera is in flight mode
-    if ((mode_ == mtFlightPath) && (position_ > (1 + 0.5*dPosition_)))
-    {
-        WarningInFunction
-            << "Current position "<< position_ <<" exceeded 1 - please check your setup"
-            << endl;
-    }
-
     position_ = startPosition_ + currentFrameI_*dPosition_;
 
     if (currentFrameI_ < nFrameTotal_)
@@ -378,6 +369,7 @@ bool Foam::scene::loop(vtkRenderer* renderer)
     }
     else
     {
+        initialised = false;
         return false;
     }
 }
@@ -392,9 +384,9 @@ void Foam::scene::saveImage(vtkRenderWindow* renderWindow) const
 
     const Time& runTime = obr_.time();
 
-    fileName prefix(Pstream::parRun()
-              ? runTime.path()/".."/"postProcessing"/name_/obr_.time().timeName()
-              : runTime.path()/"postProcessing"/name_/obr_.time().timeName());
+    fileName prefix(Pstream::parRun() ?
+        runTime.path()/".."/"postProcessing"/name_/obr_.time().timeName() :
+        runTime.path()/"postProcessing"/name_/obr_.time().timeName());
 
     mkDir(prefix);
 
diff --git a/src/postProcessing/functionObjects/graphics/runTimePostProcessing/scene.H b/src/postProcessing/functionObjects/graphics/runTimePostProcessing/scene.H
index d5cf0661cc0..afc40696c4b 100644
--- a/src/postProcessing/functionObjects/graphics/runTimePostProcessing/scene.H
+++ b/src/postProcessing/functionObjects/graphics/runTimePostProcessing/scene.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2016 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::camera
+    Foam::scene
 
 Description
 
@@ -116,9 +116,6 @@ protected:
             //- Up direction
             autoPtr<DataEntry<vector> > cameraUp_;
 
-            //- Zoom level
-            autoPtr<DataEntry<scalar> > cameraZoom_;
-
             //- View angle
             autoPtr<DataEntry<scalar> > cameraViewAngle_;
 
@@ -134,7 +131,7 @@ protected:
             //- Number of frames
             label nFrameTotal_;
 
-            //- startPosition [0-1]
+            //- Start position [0-1]
             scalar startPosition_;
 
             //- Position [0-1]
@@ -152,7 +149,7 @@ protected:
 
     // Protected Member Functions
 
-        void setCamera(vtkRenderer* renderer, const bool override) const;
+        void setCamera(vtkRenderer* renderer) const;
 
         string frameIndexStr() const;
 
-- 
GitLab