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