From 775ef2c843bdf5777ce16b64dbdc4bffb9f8dfc0 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Sat, 2 Aug 2008 16:05:22 +0200 Subject: [PATCH] PV3FoamReader improvements - various GUI properties are now animateable="0" (meaning they no longer show up on the time-line) - move reader switches to the bottom of the GUI - move Lagrangian fields above pointFields for better visibility - basic support for multiple clouds - filter fields based on selection before looping over all the geometry bits - mesh conversion functions now return VTK mesh types for easier handling - faceZones mesh conversion had points/faces allocation reversed - updateInfo with every call to setTime() that changes the timeIndex This seems to be the only way to notice Lagrangian fields - restore displaying patchnames that got forgotten in the last commit - misc reorganization --- .../PV3FoamReader/PV3FoamReader_SM.xml | 348 ++++++------ .../PV3FoamReader/vtkPV3FoamReader.cxx | 23 +- .../PV3FoamReader/vtkPV3FoamReader.h | 108 ++-- .../PV3FoamReader/vtkPV3Foam/Make/files | 16 +- .../PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C | 248 +++++---- .../PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H | 300 +++++------ .../vtkPV3Foam/vtkPV3FoamAddToSelection.H | 9 +- .../vtkPV3Foam/vtkPV3FoamConvertFields.C | 233 --------- .../vtkPV3FoamConvertLagrangianFields.H | 151 ------ ...nvertFaceField.H => vtkPV3FoamFaceField.H} | 43 +- .../vtkPV3Foam/vtkPV3FoamFields.C | 332 ++++++++++++ ...ntField.H => vtkPV3FoamLagrangianFields.H} | 62 ++- ...kPV3FoamConvertMesh.C => vtkPV3FoamMesh.C} | 494 +++++++++--------- ...ngianMesh.C => vtkPV3FoamMeshLagrangian.C} | 79 ++- ...amAddPatchMesh.C => vtkPV3FoamMeshPatch.C} | 23 +- ...V3FoamAddSetMesh.C => vtkPV3FoamMeshSet.C} | 40 +- ...AddVolumeMesh.C => vtkPV3FoamMeshVolume.C} | 66 +-- ...FoamAddZoneMesh.C => vtkPV3FoamMeshZone.C} | 45 +- ...atchFaceField.H => vtkPV3FoamPatchField.H} | 58 +- ...tPointFields.H => vtkPV3FoamPointFields.H} | 119 ++--- ...amInsertNextPoint.H => vtkPV3FoamPoints.H} | 32 +- ...teInformation.C => vtkPV3FoamUpdateInfo.C} | 227 ++++---- ...nFields.H => vtkPV3FoamUpdateInfoFields.H} | 36 +- ...nvertVolFields.H => vtkPV3FoamVolFields.H} | 201 ++++--- 24 files changed, 1660 insertions(+), 1633 deletions(-) delete mode 100644 applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFields.C delete mode 100644 applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertLagrangianFields.H rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamConvertFaceField.H => vtkPV3FoamFaceField.H} (80%) create mode 100644 applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamConvertPatchPointField.H => vtkPV3FoamLagrangianFields.H} (63%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamConvertMesh.C => vtkPV3FoamMesh.C} (50%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamAddLagrangianMesh.C => vtkPV3FoamMeshLagrangian.C} (55%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamAddPatchMesh.C => vtkPV3FoamMeshPatch.C} (84%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamAddSetMesh.C => vtkPV3FoamMeshSet.C} (80%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamAddVolumeMesh.C => vtkPV3FoamMeshVolume.C} (85%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamAddZoneMesh.C => vtkPV3FoamMeshZone.C} (76%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamConvertPatchFaceField.H => vtkPV3FoamPatchField.H} (63%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamConvertPointFields.H => vtkPV3FoamPointFields.H} (65%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamInsertNextPoint.H => vtkPV3FoamPoints.H} (72%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamUpdateInformation.C => vtkPV3FoamUpdateInfo.C} (61%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamUpdateInformationFields.H => vtkPV3FoamUpdateInfoFields.H} (78%) rename applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/{vtkPV3FoamConvertVolFields.H => vtkPV3FoamVolFields.H} (62%) diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml index 07620fd849..d522660cc4 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml @@ -1,191 +1,189 @@ - - + - name="PV3FoamReader" - class="vtkPV3FoamReader"> + + + + + Specifies the filename for the OpenFOAM Reader + + - - - - + + + + + Available timestep values + + - + + + - - - - Available timestep values. - - + + + + + + + + + + + - - - + + + + + + + + + + + - - - - + + + + + + + + + + + - - - - + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - + + + + - - - - - - - - - - - + + + + - - - - - - - - - - - + + + + - - - - - - - - - - - + + + + - - - - - - - - - - - - + + diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx index fc12c30b8a..2ad4f68cb0 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx @@ -59,11 +59,10 @@ vtkPV3FoamReader::vtkPV3FoamReader() this->GetExecutive()->SetOutputData(1, lagrangian); lagrangian->Delete(); - TimeStep = 0; TimeStepRange[0] = 0; TimeStepRange[1] = 0; - CacheMesh = 0; + CacheMesh = 1; ExtrapolateWalls = 0; IncludeSets = 0; @@ -181,7 +180,7 @@ int vtkPV3FoamReader::RequestInformation } else { - foamData_->UpdateInformation(); + foamData_->updateInfo(); } int nTimeSteps = 0; @@ -349,6 +348,15 @@ int vtkPV3FoamReader::RequestData foamData_->Update(output, lagrangianOutput); + if (ShowPatchNames) + { + addPatchNamesToView(); + } + else + { + removePatchNamesFromView(); + } + #endif return 1; @@ -408,7 +416,13 @@ void vtkPV3FoamReader::PrintSelf(ostream& os, vtkIndent indent) os<< indent << "Time step range: " << this->TimeStepRange[0] << " - " << this->TimeStepRange[1] << "\n"; - os<< indent << "Time step: " << this->TimeStep << endl; + os<< indent << "Time step: " << this->GetTimeStep() << endl; +} + + +int vtkPV3FoamReader::GetTimeStep() +{ + return foamData_ ? foamData_->timeIndex() : -1; } @@ -446,7 +460,6 @@ int vtkPV3FoamReader::GetRegionArrayStatus(const char* name) void vtkPV3FoamReader::SetRegionArrayStatus(const char* name, int status) { vtkDebugMacro(<<"SetRegionArrayStatus"); - if (status) { RegionSelection->EnableArray(name); diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h index 77985be212..88fbae9b31 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h @@ -21,20 +21,16 @@ #ifndef __vtkPV3FoamReader_h #define __vtkPV3FoamReader_h -#include "vtkMultiBlockDataSetAlgorithm.h" - // Foam forward declarations namespace Foam { class vtkPV3Foam; } +// VTK includes +#include "vtkMultiBlockDataSetAlgorithm.h" + // VTK forward declarations -class vtkUnstructuredGrid; -class vtkPoints; -class vtkIntArray; -class vtkFloatArray; -class vtkDoubleArray; class vtkDataArraySelection; class vtkCallbackCommand; @@ -44,41 +40,31 @@ class VTK_IO_EXPORT vtkPV3FoamReader public vtkMultiBlockDataSetAlgorithm { public: + vtkTypeRevisionMacro(vtkPV3FoamReader,vtkMultiBlockDataSetAlgorithm); + void PrintSelf(ostream&, vtkIndent); static vtkPV3FoamReader* New(); - vtkTypeRevisionMacro - ( - vtkPV3FoamReader, - vtkMultiBlockDataSetAlgorithm - ); - - void PrintSelf - ( - ostream& os, - vtkIndent indent - ); + // Description: + // Get the current timestep and the timestep range. + vtkGetVector2Macro(TimeStepRange, int); // Description: // Set/Get the filename. vtkSetStringMacro(FileName); vtkGetStringMacro(FileName); - // Time control - // Set/Get the timestep and the timestep range - vtkSetMacro(TimeStep, int); - vtkGetMacro(TimeStep, int); - vtkSetVector2Macro(TimeStepRange, int); - vtkGetVector2Macro(TimeStepRange, int); - + // Description: // GUI update control vtkSetMacro(UpdateGUI, int); vtkGetMacro(UpdateGUI, int); + // Description: // FOAM mesh caching control vtkSetMacro(CacheMesh, int); vtkGetMacro(CacheMesh, int); + // Description: // FOAM extrapolate internal values onto the walls vtkSetMacro(ExtrapolateWalls, int); vtkGetMacro(ExtrapolateWalls, int); @@ -87,42 +73,53 @@ public: vtkSetMacro(IncludeSets, int); vtkGetMacro(IncludeSets, int); + // Description: // FOAM read zones control vtkSetMacro(IncludeZones, int); vtkGetMacro(IncludeZones, int); + // Description: // FOAM display patch names control vtkSetMacro(ShowPatchNames, int); vtkGetMacro(ShowPatchNames, int); + // Description: + // Get the current timestep + int GetTimeStep(); + + // Description: // Region selection list control vtkDataArraySelection* GetRegionSelection(); - int GetNumberOfRegionArrays(); - const char* GetRegionArrayName(int index); - int GetRegionArrayStatus(const char* name); + int GetNumberOfRegionArrays(); + int GetRegionArrayStatus(const char* name); void SetRegionArrayStatus(const char* name, int status); + const char* GetRegionArrayName(int index); + // Description: // volField selection list control vtkDataArraySelection* GetVolFieldSelection(); - int GetNumberOfVolFieldArrays(); - const char* GetVolFieldArrayName(int index); - int GetVolFieldArrayStatus(const char* name); + int GetNumberOfVolFieldArrays(); + int GetVolFieldArrayStatus(const char* name); void SetVolFieldArrayStatus(const char* name, int status); + const char* GetVolFieldArrayName(int index); + // Description: // pointField selection list control vtkDataArraySelection* GetPointFieldSelection(); - int GetNumberOfPointFieldArrays(); - int GetPointFieldArrayStatus(const char* name); + int GetNumberOfPointFieldArrays(); + int GetPointFieldArrayStatus(const char* name); void SetPointFieldArrayStatus(const char* name, int status); const char* GetPointFieldArrayName(int index); + // Description: // lagrangianField selection list control vtkDataArraySelection* GetLagrangianFieldSelection(); - int GetNumberOfLagrangianFieldArrays(); - int GetLagrangianFieldArrayStatus(const char* name); + int GetNumberOfLagrangianFieldArrays(); + int GetLagrangianFieldArrayStatus(const char* name); void SetLagrangianFieldArrayStatus(const char* name, int status); const char* GetLagrangianFieldArrayName(int index); + // Description: // Callback registered with the SelectionObserver // for all the selection lists static void SelectionModifiedCallback @@ -138,18 +135,13 @@ public: protected: + //- Construct null vtkPV3FoamReader(); + + //- Destructor ~vtkPV3FoamReader(); - char* FileName; - - virtual int RequestData - ( - vtkInformation*, - vtkInformationVector**, - vtkInformationVector* - ); - + //- Return information about mesh, times, etc without loading anything virtual int RequestInformation ( vtkInformation*, @@ -157,16 +149,30 @@ protected: vtkInformationVector* ); + //- Get the mesh/fields for a particular time + //- Destructor + virtual int RequestData + ( + vtkInformation*, + vtkInformationVector**, + vtkInformationVector* + ); + + //- Fill in additional port information virtual int FillOutputPortInformation(int, vtkInformation*); - // The observer to modify this object when the array selections - // are modified + // The observer to modify this object when array selections are modified vtkCallbackCommand* SelectionObserver; + char* FileName; + private: - vtkPV3FoamReader(const vtkPV3FoamReader&); // Not implemented. - void operator=(const vtkPV3FoamReader&); // Not implemented. + //- Disallow default bitwise copy construct + vtkPV3FoamReader(const vtkPV3FoamReader&); + + //- Disallow default bitwise assignment + void operator=(const vtkPV3FoamReader&); //- Add patch names to the view void addPatchNamesToView(); @@ -174,9 +180,7 @@ private: //- Remove patch names from the view void removePatchNamesFromView(); - int TimeStep; int TimeStepRange[2]; - int CacheMesh; int ExtrapolateWalls; @@ -184,7 +188,7 @@ private: int IncludeZones; int ShowPatchNames; - //- Dummy variable/switch for provoking a reader update + //- Dummy variable/switch for invoke a reader update int UpdateGUI; vtkDataArraySelection* RegionSelection; @@ -192,7 +196,7 @@ private: vtkDataArraySelection* PointFieldSelection; vtkDataArraySelection* LagrangianFieldSelection; - //- Cached data for output port0 + //- Cached data for output port0 (experimental!) vtkMultiBlockDataSet* output0_; //BTX diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files index 8fb98bc9ad..4bb4f69970 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files @@ -1,11 +1,11 @@ vtkPV3Foam.C -vtkPV3FoamAddVolumeMesh.C -vtkPV3FoamAddLagrangianMesh.C -vtkPV3FoamAddPatchMesh.C -vtkPV3FoamAddZoneMesh.C -vtkPV3FoamAddSetMesh.C -vtkPV3FoamUpdateInformation.C -vtkPV3FoamConvertMesh.C -vtkPV3FoamConvertFields.C +vtkPV3FoamFields.C +vtkPV3FoamMesh.C +vtkPV3FoamMeshLagrangian.C +vtkPV3FoamMeshPatch.C +vtkPV3FoamMeshSet.C +vtkPV3FoamMeshVolume.C +vtkPV3FoamMeshZone.C +vtkPV3FoamUpdateInfo.C LIB = $(FOAM_LIBBIN)/libvtkPV3Foam diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C index 2d6e5756ce..9595e37ff7 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C @@ -25,13 +25,12 @@ License \*---------------------------------------------------------------------------*/ #include "vtkPV3Foam.H" +#include "vtkPV3FoamReader.h" // Foam includes -#include "Time.H" #include "fvMesh.H" -#include "IOobjectList.H" +#include "Time.H" #include "patchZones.H" -#include "vtkPV3FoamReader.h" #include "IFstream.H" // VTK includes @@ -54,8 +53,7 @@ defineTypeNameAndDebug(Foam::vtkPV3Foam, 0); // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // #include "vtkPV3FoamAddToSelection.H" -#include "vtkPV3FoamUpdateInformationFields.H" - +#include "vtkPV3FoamUpdateInfoFields.H" void Foam::vtkPV3Foam::AddToBlock ( @@ -161,19 +159,19 @@ Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets void Foam::vtkPV3Foam::resetCounters() { // Reset region ids and sizes - selectInfoVolume_.reset(); - selectInfoPatches_.reset(); - selectInfoLagrangian_.reset(); - selectInfoCellZones_.reset(); - selectInfoFaceZones_.reset(); - selectInfoPointZones_.reset(); - selectInfoCellSets_.reset(); - selectInfoFaceSets_.reset(); - selectInfoPointSets_.reset(); + regionInfoVolume_.reset(); + regionInfoPatches_.reset(); + regionInfoLagrangian_.reset(); + regionInfoCellZones_.reset(); + regionInfoFaceZones_.reset(); + regionInfoPointZones_.reset(); + regionInfoCellSets_.reset(); + regionInfoFaceSets_.reset(); + regionInfoPointSets_.reset(); } -bool Foam::vtkPV3Foam::setTime(const double& requestedTime) +int Foam::vtkPV3Foam::setTime(const double& requestedTime) { if (debug) { @@ -186,17 +184,12 @@ bool Foam::vtkPV3Foam::setTime(const double& requestedTime) // Get times list instantList Times = runTime.times(); - bool found = false; - int nearestIndex = Time::findClosestTimeIndex(Times, requestedTime); + int foundIndex = Time::findClosestTimeIndex(Times, requestedTime); + int nearestIndex = foundIndex; - if (nearestIndex == -1) + if (foundIndex < 0) { nearestIndex = 0; - found = false; - } - else - { - found = true; } // see what has changed @@ -213,16 +206,17 @@ bool Foam::vtkPV3Foam::setTime(const double& requestedTime) if (meshPtr_->readUpdate() != polyMesh::UNCHANGED) { meshChanged_ = true; - reader_->UpdateProgress(0.05); - - // patches, zones etc might have changed - UpdateInformation(); } } else { meshChanged_ = true; } + + reader_->UpdateProgress(0.05); + + // this seems to be needed for catching Lagrangian fields + updateInfo(); } if (debug) @@ -233,91 +227,109 @@ bool Foam::vtkPV3Foam::setTime(const double& requestedTime) << " fieldsChanged=" << fieldsChanged_ << endl; } - return found; + return foundIndex; } -void Foam::vtkPV3Foam::updateSelectedRegions() +void Foam::vtkPV3Foam::updateRegionStatus() { if (debug) { - Info<< " Foam::vtkPV3Foam::updateSelectedRegions" << endl; + Info<< " Foam::vtkPV3Foam::updateRegionStatus" << endl; } - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); - - const label nSelect = arraySelection->GetNumberOfArrays(); - - if (selectedRegions_.size() != nSelect) + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); + const label nSelect = regionSelection->GetNumberOfArrays(); + if (regionStatus_.size() != nSelect) { - selectedRegions_.setSize(nSelect); - selectedRegions_ = 0; + regionStatus_.setSize(nSelect); + regionStatus_ = false; meshChanged_ = true; } - selectedRegionDatasetIds_.setSize(nSelect); + // this needs fixing if we wish to re-use the datasets + regionDataset_.setSize(nSelect); + regionDataset_ = -1; // Read the selected cell regions, zones, patches and add to region list - forAll (selectedRegions_, regionId) + forAll(regionStatus_, regionId) { - int setting = arraySelection->GetArraySetting(regionId); + int setting = regionSelection->GetArraySetting(regionId); - if (selectedRegions_[regionId] != setting) + if (regionStatus_[regionId] != setting) { - selectedRegions_[regionId] = setting; + regionStatus_[regionId] = setting; meshChanged_ = true; } - selectedRegionDatasetIds_[regionId] = -1; - if (debug) { Info<< " region[" << regionId << "] = " - << selectedRegions_[regionId] - << " : " << arraySelection->GetArrayName(regionId) << endl; + << regionStatus_[regionId] + << " : " << regionSelection->GetArrayName(regionId) << endl; } } if (debug) { - Info<< " Foam::vtkPV3Foam::updateSelectedRegions" << endl; + Info<< " Foam::vtkPV3Foam::updateRegionStatus" << endl; } } +Foam::wordHashSet Foam::vtkPV3Foam::getSelected +( + vtkDataArraySelection* select +) +{ + int nElem = select->GetNumberOfArrays(); + wordHashSet selections(2*nElem); + + for (int elemI=0; elemI < nElem; ++elemI) + { + if (select->GetArraySetting(elemI)) + { + word name(getFirstWord(select->GetArrayName(elemI))); + selections.insert(name); + } + } + + return selections; +} + Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries ( - vtkDataArraySelection* arraySelection, + vtkDataArraySelection* select, const bool firstWord ) { - stringList selections(arraySelection->GetNumberOfArrays()); + stringList selections(select->GetNumberOfArrays()); label nElem = 0; if (debug) { Info<< "available("; - forAll (selections, elemI) + forAll(selections, elemI) { - Info<< " \"" << arraySelection->GetArrayName(elemI) << "\""; + Info<< " \"" << select->GetArrayName(elemI) << "\""; } Info<< " )\n" << "selected("; } - forAll (selections, elemI) + forAll(selections, elemI) { - if (arraySelection->GetArraySetting(elemI)) + if (select->GetArraySetting(elemI)) { if (firstWord) { selections[nElem] = getFirstWord ( - arraySelection->GetArrayName(elemI) + select->GetArrayName(elemI) ); } else { - selections[nElem] = arraySelection->GetArrayName(elemI); + selections[nElem] = select->GetArrayName(elemI); } if (debug) @@ -341,7 +353,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries ( - vtkDataArraySelection* arraySelection, + vtkDataArraySelection* select, const selectionInfo& selector, const bool firstWord ) @@ -359,7 +371,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries ++elemI ) { - Info<< " \"" << arraySelection->GetArrayName(elemI) << "\""; + Info<< " \"" << select->GetArrayName(elemI) << "\""; } Info<< " )\n" @@ -373,18 +385,18 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries ++elemI ) { - if (arraySelection->GetArraySetting(elemI)) + if (select->GetArraySetting(elemI)) { if (firstWord) { selections[nElem] = getFirstWord ( - arraySelection->GetArrayName(elemI) + select->GetArrayName(elemI) ); } else { - selections[nElem] = arraySelection->GetArrayName(elemI); + selections[nElem] = select->GetArrayName(elemI); } if (debug) @@ -408,7 +420,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries void Foam::vtkPV3Foam::setSelectedArrayEntries ( - vtkDataArraySelection* arraySelection, + vtkDataArraySelection* select, const stringList& selections ) { @@ -416,13 +428,13 @@ void Foam::vtkPV3Foam::setSelectedArrayEntries { Info<< " Foam::vtkPV3Foam::setSelectedArrayEntries" << endl; } - const label nEntries = arraySelection->GetNumberOfArrays(); + const label nEntries = select->GetNumberOfArrays(); // Reset all current entries to 'not selected' - arraySelection->DisableAllArrays(); + select->DisableAllArrays(); // Loop through entries, setting values from selectedEntries - forAll (selections, elemI) + forAll(selections, elemI) { if (debug > 1) { @@ -432,7 +444,7 @@ void Foam::vtkPV3Foam::setSelectedArrayEntries for (label i=0; iGetArrayName(i); + string arrayName = select->GetArrayName(i); if (arrayName == selections[elemI]) { @@ -443,7 +455,7 @@ void Foam::vtkPV3Foam::setSelectedArrayEntries << endl; } - arraySelection->EnableArray(arrayName.c_str()); + select->EnableArray(arrayName.c_str()); break; } } @@ -466,20 +478,19 @@ Foam::vtkPV3Foam::vtkPV3Foam reader_(reader), dbPtr_(NULL), meshPtr_(NULL), - selectInfoVolume_("unzoned"), - selectInfoPatches_("patches"), - selectInfoLagrangian_("lagrangian"), - selectInfoCellZones_("cellZone"), - selectInfoFaceZones_("faceZone"), - selectInfoPointZones_("pointZone"), - selectInfoCellSets_("cellSet"), - selectInfoFaceSets_("faceSet"), - selectInfoPointSets_("pointSet"), - patchTextActorsPtrs_(0), nMesh_(0), timeIndex_(-1), meshChanged_(true), - fieldsChanged_(true) + fieldsChanged_(true), + regionInfoVolume_("unzoned"), + regionInfoPatches_("patches"), + regionInfoLagrangian_("lagrangian"), + regionInfoCellZones_("cellZone"), + regionInfoFaceZones_("faceZone"), + regionInfoPointZones_("pointZone"), + regionInfoCellSets_("cellSet"), + regionInfoFaceSets_("faceSet"), + regionInfoPointSets_("pointSet") { if (debug) { @@ -528,11 +539,7 @@ Foam::vtkPV3Foam::vtkPV3Foam dbPtr_().functionObjects().off(); - // Set initial cloud name - // TODO - TEMPORARY MEASURE UNTIL CAN PROCESS MULTIPLE CLOUDS - cloudName_ = ""; - - UpdateInformation(); + updateInfo(); } @@ -551,22 +558,22 @@ Foam::vtkPV3Foam::~vtkPV3Foam() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::vtkPV3Foam::UpdateInformation() +void Foam::vtkPV3Foam::updateInfo() { if (debug) { - Info<< " Foam::vtkPV3Foam::UpdateInformation" - << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "] TimeStep=" - << reader_->GetTimeStep() << endl; + Info<< " Foam::vtkPV3Foam::updateInfo" + << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "] timeIndex=" + << timeIndex_ << endl; } resetCounters(); - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); stringList selectedEntries; // enable 'internalMesh' on the first call - if (arraySelection->GetNumberOfArrays() == 0 && !meshPtr_) + if (regionSelection->GetNumberOfArrays() == 0 && !meshPtr_) { selectedEntries.setSize(1); selectedEntries[0] = "internalMesh"; @@ -576,33 +583,25 @@ void Foam::vtkPV3Foam::UpdateInformation() // preserve the enabled selections selectedEntries = getSelectedArrayEntries ( - arraySelection, + regionSelection, false ); } // Clear current region list/array - arraySelection->RemoveAllArrays(); + regionSelection->RemoveAllArrays(); - // Update region array - updateInformationInternalMesh(); - updateInformationLagrangian(); - updateInformationPatches(); - - if (reader_->GetIncludeSets()) - { - updateInformationSets(); - } - - if (reader_->GetIncludeZones()) - { - updateInformationZones(); - } + // Update region array - add Lagrangian at the bottom + updateInfoInternalMesh(); + updateInfoPatches(); + updateInfoSets(); + updateInfoZones(); + updateInfoLagrangian(); // restore the enabled selections setSelectedArrayEntries ( - arraySelection, + regionSelection, selectedEntries ); @@ -611,24 +610,20 @@ void Foam::vtkPV3Foam::UpdateInformation() fieldsChanged_ = true; } - // Update volField array - updateInformationFields + // Update volume, point and lagrangian fields + updateInfoFields ( reader_->GetVolFieldSelection() ); - - // Update pointField array - updateInformationFields + updateInfoFields ( reader_->GetPointFieldSelection() ); - - // Update lagrangian field array - updateInformationLagrangianFields(); + updateInfoLagrangianFields(); if (debug) { - Info<< " Foam::vtkPV3Foam::UpdateInformation" << endl; + Info<< " Foam::vtkPV3Foam::updateInfo" << endl; } } @@ -702,7 +697,7 @@ void Foam::vtkPV3Foam::Update reader_->UpdateProgress(0.1); // Set up region selection(s) - updateSelectedRegions(); + updateRegionStatus(); // Update the Foam mesh updateFoamMesh(); @@ -793,29 +788,25 @@ void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer) // Remove any patch names previously added to the renderer removePatchNames(renderer); - if (debug) - { - Info<< " Foam::vtkPV3Foam::addPatchNames" << endl; - } - // get the display patches, strip off any suffix const stringList selectedPatches = getSelectedArrayEntries ( reader_->GetRegionSelection(), - selectInfoPatches_, + regionInfoPatches_, true ); - if (debug) - { - Info<<"... add patches: " << selectedPatches << endl; - } - if (!selectedPatches.size()) { return; } + if (debug) + { + Info<< " Foam::vtkPV3Foam::addPatchNames" << nl + <<"... add patches: " << selectedPatches << endl; + } + const polyBoundaryMesh& pbMesh = meshPtr_->boundaryMesh(); // Find the total number of zones @@ -977,11 +968,6 @@ void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer) void Foam::vtkPV3Foam::removePatchNames(vtkRenderer* renderer) { - if (debug) - { - Info<< "removePatchNames()" << endl; - } - forAll(patchTextActorsPtrs_, patchI) { renderer->RemoveViewProp(patchTextActorsPtrs_[patchI]); diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H index f78ba346b4..3907348cc0 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H @@ -32,23 +32,22 @@ SourceFiles vtkPV3Foam.C vtkPV3Foam.H vtkPV3FoamI.H - vtkPV3FoamAddLagrangianMesh.C - vtkPV3FoamAddPatchMesh.C - vtkPV3FoamAddSetMesh.C + vtkPV3FoamFields.C + vtkPV3FoamMesh.C + vtkPV3FoamMeshLagrangian.C + vtkPV3FoamMeshPatch.C + vtkPV3FoamMeshSet.C + vtkPV3FoamMeshVolume.C + vtkPV3FoamMeshZone.C + vtkPV3FoamFaceField.H + vtkPV3FoamLagrangianFields.H + vtkPV3FoamPatchField.H + vtkPV3FoamPointFields.H + vtkPV3FoamPoints.H + vtkPV3FoamUpdateInfo.C + vtkPV3FoamUpdateInfoFields.H + vtkPV3FoamVolFields.H vtkPV3FoamAddToSelection.H - vtkPV3FoamAddVolumeMesh.C - vtkPV3FoamAddZoneMesh.C - vtkPV3FoamConvertFields.C - vtkPV3FoamConvertFaceField.H - vtkPV3FoamConvertLagrangianFields.H - vtkPV3FoamConvertMesh.C - vtkPV3FoamConvertPatchFaceField.H - vtkPV3FoamConvertPatchPointField.H - vtkPV3FoamConvertPointFields.H - vtkPV3FoamConvertVolFields.H - vtkPV3FoamInsertNextPoint.H - vtkPV3FoamUpdateInformation.C - vtkPV3FoamUpdateInformationFields.H // Needed by VTK: vtkDataArrayTemplateImplicit.txx @@ -104,9 +103,55 @@ class List; class vtkPV3Foam { -public: + // Private data - // Public data + //- Access to the controlling vtkPV3FoamReader + vtkPV3FoamReader* reader_; + + //- Foam time control + autoPtr