diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml index 8506772e5c..18bccb0398 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml @@ -16,6 +16,17 @@ + + + + + Available timestep values. + + + - - - - + + + - Available timestep values. + Rescan for updated timesteps/fields. - + - - + + + + + Skip including the 0/ time directory + + - Searches the polyMesh/sets/ directory + Search the polyMesh/sets/ directory @@ -95,7 +121,7 @@ animateable="0"> - Show patch names in render window. + Show patch names in render window @@ -112,12 +138,13 @@ - - + @@ -129,18 +156,21 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="PartArrayInfo" + information_property="PartArrayStatus" animateable="0"> - + + + This property contains a list of the mesh parts (patches, sets, zones). + @@ -152,18 +182,21 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="VolFieldArrayInfo" + information_property="VolFieldArrayStatus" animateable="0"> - + + + This property contains a list of the volume fields + @@ -175,18 +208,21 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="LagrangianFieldArrayInfo" + information_property="LagrangianFieldArrayStatus" animateable="0"> - + + + This property contains a list of the lagrangian fields + @@ -198,19 +234,26 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="PointFieldArrayInfo" + information_property="PointFieldArrayStatus" animateable="0"> - + + + This property contains a list of the point fields + + + + + diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx index 4f12089f45..7d421cbedd 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx @@ -32,9 +32,10 @@ License #include #include #include +#include #include -// Paraview<->QT UI +// Paraview <-> QT UI #include "pqAnimationScene.h" #include "pqApplicationCore.h" #include "pqPipelineRepresentation.h" @@ -56,51 +57,169 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel QWidget *p ) : - pqAutoGeneratedObjectPanel(proxy, p), - sourceProxy_(vtkSMSourceProxy::SafeDownCast(this->proxy())) + pqAutoGeneratedObjectPanel(proxy, p) { // create first sublayout (at top of the panel) - QGridLayout *sect1 = new QGridLayout(); - this->PanelLayout->addLayout(sect1, 0, 0, 1, -1); + QGridLayout *form = new QGridLayout(); + this->PanelLayout->addLayout(form, 0, 0, 1, -1); + + vtkSMProperty* prop = 0; + + // refresh button for updating times/fields + if ((prop = this->proxy()->GetProperty("UiRefresh")) != 0) + { + prop->SetImmediateUpdate(1); + QPushButton *refresh = new QPushButton("Refresh Times"); + refresh->setToolTip("Rescan for updated times/fields."); + + form->addWidget(refresh, 0, 0, Qt::AlignLeft); + QObject::connect + ( + refresh, + SIGNAL(clicked()), + this, + SLOT(RefreshPressed()) + ); + } + + // checkbox for skip zeroTime + if ((prop = this->proxy()->GetProperty("UiZeroTime")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + ZeroTime_ = new QCheckBox("Skip Zero Time"); + ZeroTime_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + ZeroTime_->setToolTip + ( + "Skip including the 0/ time directory." + ); + + form->addWidget(ZeroTime_, 0, 1, Qt::AlignLeft); + connect + ( + ZeroTime_, + SIGNAL(stateChanged(int)), + this, + SLOT(ZeroTimeToggled()) + ); + } // checkbox for caching mesh - CacheMesh_ = new QCheckBox("Cache Mesh"); - CacheMesh_->setChecked(true); + if ((prop = this->proxy()->GetProperty("UiCacheMesh")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); - // checkbox for caching mesh - ShowPatchNames_ = new QCheckBox("Show Patch Names"); - ShowPatchNames_->setChecked(false); + CacheMesh_ = new QCheckBox("Cache Mesh"); + CacheMesh_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + CacheMesh_->setToolTip + ( + "Cache the fvMesh in memory." + ); - connect - ( - CacheMesh_, - SIGNAL(stateChanged(int)), - this, - SLOT(CacheMeshToggled()) - ); - - connect - ( - ShowPatchNames_, - SIGNAL(stateChanged(int)), - this, - SLOT(ShowPatchNamesToggled()) - ); - - sect1->addWidget(CacheMesh_); - sect1->addWidget(ShowPatchNames_); + form->addWidget(CacheMesh_, 1, 0, Qt::AlignLeft); + connect + ( + CacheMesh_, + SIGNAL(stateChanged(int)), + this, + SLOT(CacheMeshToggled()) + ); + } - // immediate update on the Server Manager side - vtkSMIntVectorProperty::SafeDownCast - ( - sourceProxy_->GetProperty("UiCacheMesh") - )->SetImmediateUpdate(true); - vtkSMIntVectorProperty::SafeDownCast - ( - sourceProxy_->GetProperty("UiShowPatchNames") - )->SetImmediateUpdate(true); + // checkbox for patch names + if ((prop = this->proxy()->GetProperty("UiShowPatchNames")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + ShowPatchNames_ = new QCheckBox("Patch Names"); + ShowPatchNames_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + ShowPatchNames_->setToolTip + ( + "Show patch names in render window." + ); + + // row/col 0,1 + form->addWidget(ShowPatchNames_, 1, 1, Qt::AlignLeft); + connect + ( + ShowPatchNames_, + SIGNAL(stateChanged(int)), + this, + SLOT(ShowPatchNamesToggled()) + ); + } + + + // checkbox for include sets + if ((prop = this->proxy()->GetProperty("UiIncludeSets")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + IncludeSets_ = new QCheckBox("Include Sets"); + IncludeSets_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + IncludeSets_->setToolTip + ( + "Search the polyMesh/sets/ directory." + ); + + // row/col 1,0 + form->addWidget(IncludeSets_, 2, 0, Qt::AlignLeft); + connect + ( + IncludeSets_, + SIGNAL(stateChanged(int)), + this, + SLOT(IncludeSetsToggled()) + ); + } + + + // checkbox for include zones + if ((prop = this->proxy()->GetProperty("UiIncludeZones")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + IncludeZones_ = new QCheckBox("Include Zones"); + IncludeZones_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + IncludeZones_->setToolTip + ( + "ZoneMesh information is used to find {cell,face,point}Zones. " + "The polyMesh/ directory is only checked on startup." + ); + + // row/col 1,1 + form->addWidget(IncludeZones_, 2, 1, Qt::AlignLeft); + connect + ( + IncludeZones_, + SIGNAL(stateChanged(int)), + this, + SLOT(IncludeZonesToggled()) + ); + } + } @@ -110,16 +229,43 @@ void pqPV3FoamReaderPanel::CacheMeshToggled() { vtkSMIntVectorProperty::SafeDownCast ( - sourceProxy_->GetProperty("UiCacheMesh") + this->proxy()->GetProperty("UiCacheMesh") )->SetElement(0, CacheMesh_->isChecked()); } +void pqPV3FoamReaderPanel::RefreshPressed() +{ + // update everything + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiRefresh") + )->Modified(); + + vtkSMSourceProxy::SafeDownCast(this->proxy())->UpdatePipeline(); + + // render all views + pqApplicationCore::instance()->render(); +} + + +void pqPV3FoamReaderPanel::ZeroTimeToggled() +{ + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiZeroTime") + )->SetElement(0, ZeroTime_->isChecked()); + + // update everything + RefreshPressed(); +} + + void pqPV3FoamReaderPanel::ShowPatchNamesToggled() { vtkSMIntVectorProperty::SafeDownCast ( - sourceProxy_->GetProperty("UiShowPatchNames") + this->proxy()->GetProperty("UiShowPatchNames") )->SetElement(0, ShowPatchNames_->isChecked()); // update the active view @@ -132,4 +278,37 @@ void pqPV3FoamReaderPanel::ShowPatchNamesToggled() } +void pqPV3FoamReaderPanel::IncludeSetsToggled() +{ + vtkSMProperty* prop; + + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiIncludeSets") + )->SetElement(0, IncludeSets_->isChecked()); + + if ((prop = this->proxy()->GetProperty("PartArrayStatus")) != 0) + { + this->proxy()->UpdatePropertyInformation(prop); + } +} + + +void pqPV3FoamReaderPanel::IncludeZonesToggled() +{ + vtkSMProperty* prop; + + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiIncludeZones") + )->SetElement(0, IncludeZones_->isChecked()); + + if ((prop = this->proxy()->GetProperty("PartArrayStatus")) != 0) + { + this->proxy()->UpdatePropertyInformation(prop); + } + +} + + // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h index fc4f5f9ada..49a3e11eda 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h @@ -37,6 +37,7 @@ SourceFiles #ifndef pqPV3FoamReaderPanel_h #define pqPV3FoamReaderPanel_h + #include "pqAutoGeneratedObjectPanel.h" // Forward declaration of QT classes @@ -62,8 +63,8 @@ class pqPV3FoamReaderPanel Q_OBJECT; typedef pqAutoGeneratedObjectPanel Superclass; - //- Server Manager Source Proxy - vtkSMSourceProxy* sourceProxy_; + //- ZeroTime checkbox + QCheckBox* ZeroTime_; //- CacheMesh checkbox QCheckBox* CacheMesh_; @@ -71,10 +72,20 @@ class pqPV3FoamReaderPanel //- Show Patch Names checkbox QCheckBox* ShowPatchNames_; + //- IncludeSets checkbox + QCheckBox* IncludeSets_; + + //- IncludeZones checkbox + QCheckBox* IncludeZones_; + protected slots: void CacheMeshToggled(); + void ZeroTimeToggled(); + void RefreshPressed(); void ShowPatchNamesToggled(); + void IncludeSetsToggled(); + void IncludeZonesToggled(); public: diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx index 32b01eb795..4e5806b99c 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx @@ -79,7 +79,9 @@ vtkPV3FoamReader::vtkPV3FoamReader() TimeStepRange[1] = 0; CacheMesh = 1; + Refresh = 0; + SkipZeroTime = 0; ExtrapolatePatches = 0; IncludeSets = 0; IncludeZones = 0; @@ -336,7 +338,6 @@ int vtkPV3FoamReader::RequestData foamData_->setTime(nRequestTime, requestTime); } - vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::SafeDownCast ( outputVector->GetInformationObject(0)->Get @@ -420,7 +421,39 @@ int vtkPV3FoamReader::RequestData } -void vtkPV3FoamReader::SetShowPatchNames(const int val) +void vtkPV3FoamReader::SetRefresh(int val) +{ + Modified(); +} + + +void vtkPV3FoamReader::SetIncludeSets(int val) +{ + if (IncludeSets != val) + { + IncludeSets = val; + if (foamData_) + { + foamData_->updateInfo(); + } + } +} + + +void vtkPV3FoamReader::SetIncludeZones(int val) +{ + if (IncludeZones != val) + { + IncludeZones = val; + if (foamData_) + { + foamData_->updateInfo(); + } + } +} + + +void vtkPV3FoamReader::SetShowPatchNames(int val) { if (ShowPatchNames != val) { @@ -430,7 +463,6 @@ void vtkPV3FoamReader::SetShowPatchNames(const int val) } - void vtkPV3FoamReader::updatePatchNamesView(const bool show) { pqApplicationCore* appCore = pqApplicationCore::instance(); @@ -452,7 +484,7 @@ void vtkPV3FoamReader::updatePatchNamesView(const bool show) // Get all the pqRenderView instances QList renderViews = smModel->findItems(); - for (int viewI=0; viewIrenderPatchNames ( @@ -521,7 +553,8 @@ int vtkPV3FoamReader::GetPartArrayStatus(const char* name) void vtkPV3FoamReader::SetPartArrayStatus(const char* name, int status) { - vtkDebugMacro(<<"SetPartArrayStatus"); + vtkDebugMacro("Set mesh part \"" << name << "\" status to: " << status); + if (status) { PartSelection->EnableArray(name); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h index df73979205..f3ac8a5d92 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h @@ -83,6 +83,15 @@ public: vtkSetMacro(CacheMesh, int); vtkGetMacro(CacheMesh, int); + // Description: + // FOAM refresh times/fields + virtual void SetRefresh(int); + + // Description: + // FOAM Skip/include the 0/ time directory + vtkSetMacro(SkipZeroTime, int); + vtkGetMacro(SkipZeroTime, int); + // Description: // GUI update control vtkSetMacro(UpdateGUI, int); @@ -93,13 +102,14 @@ public: vtkSetMacro(ExtrapolatePatches, int); vtkGetMacro(ExtrapolatePatches, int); + // Description: // FOAM read sets control - vtkSetMacro(IncludeSets, int); + virtual void SetIncludeSets(int); vtkGetMacro(IncludeSets, int); // Description: // FOAM read zones control - vtkSetMacro(IncludeZones, int); + virtual void SetIncludeZones(int); vtkGetMacro(IncludeZones, int); // Description: @@ -113,7 +123,7 @@ public: // Description: // Parts selection list control - vtkDataArraySelection* GetPartSelection(); + virtual vtkDataArraySelection* GetPartSelection(); int GetNumberOfPartArrays(); int GetPartArrayStatus(const char* name); void SetPartArrayStatus(const char* name, int status); @@ -121,7 +131,7 @@ public: // Description: // volField selection list control - vtkDataArraySelection* GetVolFieldSelection(); + virtual vtkDataArraySelection* GetVolFieldSelection(); int GetNumberOfVolFieldArrays(); int GetVolFieldArrayStatus(const char* name); void SetVolFieldArrayStatus(const char* name, int status); @@ -129,7 +139,7 @@ public: // Description: // pointField selection list control - vtkDataArraySelection* GetPointFieldSelection(); + virtual vtkDataArraySelection* GetPointFieldSelection(); int GetNumberOfPointFieldArrays(); int GetPointFieldArrayStatus(const char* name); void SetPointFieldArrayStatus(const char* name, int status); @@ -137,7 +147,7 @@ public: // Description: // lagrangianField selection list control - vtkDataArraySelection* GetLagrangianFieldSelection(); + virtual vtkDataArraySelection* GetLagrangianFieldSelection(); int GetNumberOfLagrangianFieldArrays(); int GetLagrangianFieldArrayStatus(const char* name); void SetLagrangianFieldArrayStatus(const char* name, int status); @@ -156,7 +166,6 @@ public: void SelectionModified(); - protected: //- Construct null @@ -185,9 +194,10 @@ protected: //- Fill in additional port information virtual int FillOutputPortInformation(int, vtkInformation*); - // The observer to modify this object when array selections are modified + //- The observer to modify this object when array selections are modified vtkCallbackCommand* SelectionObserver; + //- The file name for this case char* FileName; private: @@ -202,14 +212,16 @@ private: void updatePatchNamesView(const bool show); int TimeStepRange[2]; + int Refresh; int CacheMesh; + int SkipZeroTime; int ExtrapolatePatches; int IncludeSets; int IncludeZones; int ShowPatchNames; - //- Dummy variable/switch for invoke a reader update + //- Dummy variable/switch to invoke a reader update int UpdateGUI; vtkDataArraySelection* PartSelection; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C index 8989a110cb..41933d5ebf 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C @@ -50,16 +50,16 @@ defineTypeNameAndDebug(Foam::vtkPV3Foam, 0); void Foam::vtkPV3Foam::resetCounters() { - // Reset mesh part ids and sizes - partInfoVolume_.reset(); - partInfoPatches_.reset(); - partInfoLagrangian_.reset(); - partInfoCellZones_.reset(); - partInfoFaceZones_.reset(); - partInfoPointZones_.reset(); - partInfoCellSets_.reset(); - partInfoFaceSets_.reset(); - partInfoPointSets_.reset(); + // Reset array range information (ids and sizes) + arrayRangeVolume_.reset(); + arrayRangePatches_.reset(); + arrayRangeLagrangian_.reset(); + arrayRangeCellZones_.reset(); + arrayRangeFaceZones_.reset(); + arrayRangePointZones_.reset(); + arrayRangeCellSets_.reset(); + arrayRangeFaceSets_.reset(); + arrayRangePointSets_.reset(); } @@ -92,21 +92,6 @@ void Foam::vtkPV3Foam::reduceMemory() int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[]) { - if (debug) - { - Info<< " Foam::vtkPV3Foam::setTime("; - for (int requestI = 0; requestI < nRequest; ++requestI) - { - if (requestI) - { - Info<< ", "; - } - - Info<< requestTimes[requestI]; - } - Info<< ") - previousIndex = " << timeIndex_ << endl; - } - Time& runTime = dbPtr_(); // Get times list @@ -128,6 +113,22 @@ int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[]) nearestIndex = 0; } + if (debug) + { + Info<< " Foam::vtkPV3Foam::setTime("; + for (int requestI = 0; requestI < nRequest; ++requestI) + { + if (requestI) + { + Info<< ", "; + } + + Info<< requestTimes[requestI]; + } + Info<< ") - previousIndex = " << timeIndex_ + << ", nearestIndex = " << nearestIndex << endl; + } + // see what has changed if (timeIndex_ != nearestIndex) @@ -230,15 +231,15 @@ Foam::vtkPV3Foam::vtkPV3Foam timeIndex_(-1), meshChanged_(true), fieldsChanged_(true), - partInfoVolume_("unzoned"), - partInfoPatches_("patches"), - partInfoLagrangian_("lagrangian"), - partInfoCellZones_("cellZone"), - partInfoFaceZones_("faceZone"), - partInfoPointZones_("pointZone"), - partInfoCellSets_("cellSet"), - partInfoFaceSets_("faceSet"), - partInfoPointSets_("pointSet") + arrayRangeVolume_("unzoned"), + arrayRangePatches_("patches"), + arrayRangeLagrangian_("lagrangian"), + arrayRangeCellZones_("cellZone"), + arrayRangeFaceZones_("faceZone"), + arrayRangePointZones_("pointZone"), + arrayRangeCellSets_("cellSet"), + arrayRangeFaceSets_("faceSet"), + arrayRangePointSets_("pointSet") { if (debug) { @@ -288,7 +289,7 @@ Foam::vtkPV3Foam::vtkPV3Foam meshRegion_ = caseName.substr(beg+1, end-beg-1); // some safety - if (!meshRegion_.size()) + if (meshRegion_.empty()) { meshRegion_ = polyMesh::defaultRegion; } @@ -352,6 +353,14 @@ void Foam::vtkPV3Foam::updateInfo() vtkDataArraySelection* partSelection = reader_->GetPartSelection(); + // there are two ways to ensure we have the correct list of parts: + // 1. remove everything and then set particular entries 'on' + // 2. build a 'char **' list and call SetArraysWithDefault() + // + // Nr. 2 has the potential advantage of not touching the modification + // time of the vtkDataArraySelection, but the qt/paraview proxy + // layer doesn't care about that anyhow. + // enable 'internalMesh' on the first call // or preserve the enabled selections stringList enabledEntries; @@ -369,11 +378,11 @@ void Foam::vtkPV3Foam::updateInfo() partSelection->RemoveAllArrays(); // Update mesh parts list - add Lagrangian at the bottom - updateInfoInternalMesh(); - updateInfoPatches(); - updateInfoSets(); - updateInfoZones(); - updateInfoLagrangian(); + updateInfoInternalMesh(partSelection); + updateInfoPatches(partSelection); + updateInfoSets(partSelection); + updateInfoZones(partSelection); + updateInfoLagrangian(partSelection); // restore the enabled selections setSelectedArrayEntries(partSelection, enabledEntries); @@ -396,6 +405,8 @@ void Foam::vtkPV3Foam::updateInfo() if (debug) { + // just for debug info + getSelectedArrayEntries(partSelection); Info<< " Foam::vtkPV3Foam::updateInfo" << endl; } @@ -559,11 +570,25 @@ double* Foam::vtkPV3Foam::findTimes(int& nTimeSteps) nTimes = timeLst.size() - timeI; - // always skip "constant" time if possible + // skip "constant" time whenever possible if (timeI == 0 && nTimes > 1) { - timeI = 1; - --nTimes; + if (timeLst[timeI].name() == "constant") + { + ++timeI; + --nTimes; + } + } + + + // skip "0/" time if requested and possible + if (nTimes > 1 && reader_->GetSkipZeroTime()) + { + if (mag(timeLst[timeI].value()) < SMALL) + { + ++timeI; + --nTimes; + } } if (nTimes) @@ -607,10 +632,10 @@ void Foam::vtkPV3Foam::renderPatchNames(vtkRenderer* renderer, const bool show) wordHashSet selectedPatches = getSelected ( reader_->GetPartSelection(), - partInfoPatches_ + arrayRangePatches_ ); - if (!selectedPatches.size()) + if (selectedPatches.empty()) { return; } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H index 05c8474477..6037e78781 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H @@ -111,7 +111,7 @@ class vtkPV3Foam // Private classes //- Bookkeeping for GUI checklists and the multi-block organization - class partInfo + class arrayRange { const char *name_; int block_; @@ -120,11 +120,11 @@ class vtkPV3Foam public: - partInfo(const char *name, const int blockNo=0) + arrayRange(const char *name, const int blockNo=0) : name_(name), block_(blockNo), - start_(-1), + start_(0), size_(0) {} @@ -142,21 +142,25 @@ class vtkPV3Foam return prev; } + //- Return block name const char* name() const { return name_; } + //- Return array start index int start() const { return start_; } + //- Return array end index int end() const { return start_ + size_; } + //- Return sublist size int size() const { return size_; @@ -167,16 +171,10 @@ class vtkPV3Foam return !size_; } - void reset() + //- Reset the size to zero and optionally assign a new start + void reset(const int startAt = 0) { - start_ = -1; - size_ = 0; - } - - //- Assign new start and reset the size - void operator=(const int i) - { - start_ = i; + start_ = startAt; size_ = 0; } @@ -282,15 +280,15 @@ class vtkPV3Foam //- First instance and size of various mesh parts // used to index into partStatus_ and partDataset_ - partInfo partInfoVolume_; - partInfo partInfoPatches_; - partInfo partInfoLagrangian_; - partInfo partInfoCellZones_; - partInfo partInfoFaceZones_; - partInfo partInfoPointZones_; - partInfo partInfoCellSets_; - partInfo partInfoFaceSets_; - partInfo partInfoPointSets_; + arrayRange arrayRangeVolume_; + arrayRange arrayRangePatches_; + arrayRange arrayRangeLagrangian_; + arrayRange arrayRangeCellZones_; + arrayRange arrayRangeFaceZones_; + arrayRange arrayRangePointZones_; + arrayRange arrayRangeCellSets_; + arrayRange arrayRangeFaceSets_; + arrayRange arrayRangePointSets_; //- Decomposed cells information (mesh regions) // TODO: regions @@ -313,7 +311,7 @@ class vtkPV3Foam ( vtkMultiBlockDataSet* output, vtkDataSet* dataset, - const partInfo&, + const arrayRange&, const label datasetNo, const std::string& datasetName ); @@ -323,7 +321,7 @@ class vtkPV3Foam static vtkDataSet* GetDataSetFromBlock ( vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -332,7 +330,7 @@ class vtkPV3Foam static label GetNumberOfDataSets ( vtkMultiBlockDataSet* output, - const partInfo& + const arrayRange& ); //- Reset data counters @@ -344,19 +342,19 @@ class vtkPV3Foam void updateMeshPartsStatus(); //- Internal mesh info - void updateInfoInternalMesh(); + void updateInfoInternalMesh(vtkDataArraySelection*); //- Lagrangian info - void updateInfoLagrangian(); + void updateInfoLagrangian(vtkDataArraySelection*); //- Patch info - void updateInfoPatches(); + void updateInfoPatches(vtkDataArraySelection*); //- Set info - void updateInfoSets(); + void updateInfoSets(vtkDataArraySelection*); //- Zone info - void updateInfoZones(); + void updateInfoZones(vtkDataArraySelection*); //- Read zone names for zoneType from file wordList readZoneNames(const word& zoneType); @@ -511,7 +509,7 @@ class vtkPV3Foam const GeometricField&, autoPtr >&, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange&, const List& decompLst ); @@ -521,7 +519,7 @@ class vtkPV3Foam ( const GeometricField&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo, const polyDecomp& ); @@ -533,7 +531,7 @@ class vtkPV3Foam const word& name, const Field&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -543,7 +541,7 @@ class vtkPV3Foam ( const GeometricField&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo, const fvMesh&, const labelList& faceLabels @@ -555,7 +553,7 @@ class vtkPV3Foam ( const GeometricField&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo, const fvMesh&, const faceSet& @@ -576,7 +574,7 @@ class vtkPV3Foam ( const IOField&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -596,7 +594,7 @@ class vtkPV3Foam ( const GeometricField&, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange&, const List& ); @@ -607,7 +605,7 @@ class vtkPV3Foam const GeometricField&, const GeometricField&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo, const polyDecomp& ); @@ -619,7 +617,7 @@ class vtkPV3Foam const word& name, const Field&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -640,7 +638,7 @@ class vtkPV3Foam static wordHashSet getSelected ( vtkDataArraySelection*, - const partInfo& + const arrayRange& ); //- Retrieve the current selections @@ -650,7 +648,7 @@ class vtkPV3Foam static stringList getSelectedArrayEntries ( vtkDataArraySelection*, - const partInfo& + const arrayRange& ); //- Set selection(s) @@ -661,7 +659,7 @@ class vtkPV3Foam ); //- Get the first word from the mesh parts selection - word getPartName(int); + word getPartName(const int); //- Disallow default bitwise copy construct diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H index d6b1f1ed52..b945d6c6a0 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H @@ -50,11 +50,17 @@ Foam::label Foam::vtkPV3Foam::addToSelection { if (suffix.size()) { - select->AddArray((names[nameI] + suffix).c_str()); + select->AddArray + ( + (names[nameI] + suffix).c_str() + ); } else { - select->AddArray(names[nameI].c_str()); + select->AddArray + ( + (names[nameI]).c_str() + ); } } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H index 14c0d5f9b9..68f551ae5a 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H @@ -43,7 +43,7 @@ void Foam::vtkPV3Foam::convertFaceField ( const GeometricField& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const fvMesh& mesh, const labelList& faceLabels @@ -100,7 +100,7 @@ void Foam::vtkPV3Foam::convertFaceField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetCellData() ->AddArray(cellData); @@ -113,7 +113,7 @@ void Foam::vtkPV3Foam::convertFaceField ( const GeometricField& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const fvMesh& mesh, const faceSet& fSet @@ -173,7 +173,7 @@ void Foam::vtkPV3Foam::convertFaceField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetCellData() ->AddArray(cellData); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C index 38cc52f680..b712fdebfe 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C @@ -51,7 +51,7 @@ void Foam::vtkPV3Foam::pruneObjectList ) { // hash all the selected field names - if (!selected.size()) + if (selected.empty()) { objects.clear(); } @@ -79,7 +79,7 @@ void Foam::vtkPV3Foam::convertVolFields reader_->GetVolFieldSelection() ); - if (!selectedFields.size()) + if (selectedFields.empty()) { return; } @@ -89,7 +89,7 @@ void Foam::vtkPV3Foam::convertVolFields IOobjectList objects(mesh, dbPtr_().timeName()); pruneObjectList(objects, selectedFields); - if (!objects.size()) + if (objects.empty()) { return; } @@ -164,7 +164,7 @@ void Foam::vtkPV3Foam::convertPointFields reader_->GetPointFieldSelection() ); - if (!selectedFields.size()) + if (selectedFields.empty()) { return; } @@ -174,7 +174,7 @@ void Foam::vtkPV3Foam::convertPointFields IOobjectList objects(mesh, dbPtr_().timeName()); pruneObjectList(objects, selectedFields); - if (!objects.size()) + if (objects.empty()) { return; } @@ -229,7 +229,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields vtkMultiBlockDataSet* output ) { - partInfo& selector = partInfoLagrangian_; + arrayRange& range = arrayRangeLagrangian_; const fvMesh& mesh = *meshPtr_; wordHashSet selectedFields = getSelected @@ -237,7 +237,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields reader_->GetLagrangianFieldSelection() ); - if (!selectedFields.size()) + if (selectedFields.empty()) { return; } @@ -248,7 +248,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word cloudName = getPartName(partId); const label datasetNo = partDataset_[partId]; @@ -270,7 +270,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields ); pruneObjectList(objects, selectedFields); - if (!objects.size()) + if (objects.empty()) { continue; } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H index 58422d69f4..1b6e2a1568 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H @@ -42,7 +42,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields const label datasetNo ) { - const partInfo& selector = partInfoLagrangian_; + const arrayRange& range = arrayRangeLagrangian_; forAllConstIter(IOobjectList, objects, iter) { @@ -50,7 +50,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields if (iter()->headerClassName() == IOField::typeName) { IOField tf(*iter()); - convertLagrangianField(tf, output, selector, datasetNo); + convertLagrangianField(tf, output, range, datasetNo); } } } @@ -61,7 +61,7 @@ void Foam::vtkPV3Foam::convertLagrangianField ( const IOField& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { @@ -97,7 +97,7 @@ void Foam::vtkPV3Foam::convertLagrangianField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetPointData() ->AddArray(pointData); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C index 6550a960e1..516b29d3ef 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C @@ -49,13 +49,13 @@ void Foam::vtkPV3Foam::convertMeshVolume int& blockNo ) { - partInfo& selector = partInfoVolume_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeVolume_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; // resize for decomposed polyhedra - regionPolyDecomp_.setSize(selector.size()); + regionPolyDecomp_.setSize(range.size()); if (debug) { @@ -65,7 +65,7 @@ void Foam::vtkPV3Foam::convertMeshVolume // Convert the internalMesh // this looks like more than one part, but it isn't - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word partName = "internalMesh"; @@ -82,7 +82,7 @@ void Foam::vtkPV3Foam::convertMeshVolume if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, partName); + AddToBlock(output, vtkmesh, range, datasetNo, partName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -109,8 +109,8 @@ void Foam::vtkPV3Foam::convertMeshLagrangian int& blockNo ) { - partInfo& selector = partInfoLagrangian_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeLagrangian_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; @@ -120,7 +120,7 @@ void Foam::vtkPV3Foam::convertMeshLagrangian printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word cloudName = getPartName(partId); @@ -133,7 +133,7 @@ void Foam::vtkPV3Foam::convertMeshLagrangian if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, cloudName); + AddToBlock(output, vtkmesh, range, datasetNo, cloudName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -160,8 +160,8 @@ void Foam::vtkPV3Foam::convertMeshPatches int& blockNo ) { - partInfo& selector = partInfoPatches_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangePatches_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; const polyBoundaryMesh& patches = mesh.boundaryMesh(); @@ -172,7 +172,7 @@ void Foam::vtkPV3Foam::convertMeshPatches printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word patchName = getPartName(partId); const label patchId = patches.findPatchID(patchName); @@ -192,7 +192,7 @@ void Foam::vtkPV3Foam::convertMeshPatches if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, patchName); + AddToBlock(output, vtkmesh, range, datasetNo, patchName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -219,15 +219,15 @@ void Foam::vtkPV3Foam::convertMeshCellZones int& blockNo ) { - partInfo& selector = partInfoCellZones_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeCellZones_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; // resize for decomposed polyhedra - zonePolyDecomp_.setSize(selector.size()); + zonePolyDecomp_.setSize(range.size()); - if (!selector.size()) + if (range.empty()) { return; } @@ -239,7 +239,7 @@ void Foam::vtkPV3Foam::convertMeshCellZones } const cellZoneMesh& zMesh = mesh.cellZones(); - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word zoneName = getPartName(partId); const label zoneId = zMesh.findZoneID(zoneName); @@ -281,7 +281,7 @@ void Foam::vtkPV3Foam::convertMeshCellZones // copy pointMap as well, otherwise pointFields fail zonePolyDecomp_[datasetNo].pointMap() = subsetter.pointMap(); - AddToBlock(output, vtkmesh, selector, datasetNo, zoneName); + AddToBlock(output, vtkmesh, range, datasetNo, zoneName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -308,13 +308,13 @@ void Foam::vtkPV3Foam::convertMeshCellSets int& blockNo ) { - partInfo& selector = partInfoCellSets_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeCellSets_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; // resize for decomposed polyhedra - csetPolyDecomp_.setSize(selector.size()); + csetPolyDecomp_.setSize(range.size()); if (debug) { @@ -322,7 +322,7 @@ void Foam::vtkPV3Foam::convertMeshCellSets printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word partName = getPartName(partId); @@ -363,7 +363,7 @@ void Foam::vtkPV3Foam::convertMeshCellSets // copy pointMap as well, otherwise pointFields fail csetPolyDecomp_[datasetNo].pointMap() = subsetter.pointMap(); - AddToBlock(output, vtkmesh, selector, datasetNo, partName); + AddToBlock(output, vtkmesh, range, datasetNo, partName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -390,12 +390,12 @@ void Foam::vtkPV3Foam::convertMeshFaceZones int& blockNo ) { - partInfo& selector = partInfoFaceZones_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeFaceZones_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; - if (!selector.size()) + if (range.empty()) { return; } @@ -407,7 +407,7 @@ void Foam::vtkPV3Foam::convertMeshFaceZones } const faceZoneMesh& zMesh = mesh.faceZones(); - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word zoneName = getPartName(partId); const label zoneId = zMesh.findZoneID(zoneName); @@ -426,7 +426,7 @@ void Foam::vtkPV3Foam::convertMeshFaceZones vtkPolyData* vtkmesh = faceZoneVTKMesh(mesh, zMesh[zoneId]); if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, zoneName); + AddToBlock(output, vtkmesh, range, datasetNo, zoneName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -453,8 +453,8 @@ void Foam::vtkPV3Foam::convertMeshFaceSets int& blockNo ) { - partInfo& selector = partInfoFaceSets_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeFaceSets_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; @@ -464,7 +464,7 @@ void Foam::vtkPV3Foam::convertMeshFaceSets printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word partName = getPartName(partId); @@ -483,7 +483,7 @@ void Foam::vtkPV3Foam::convertMeshFaceSets vtkPolyData* vtkmesh = faceSetVTKMesh(mesh, fSet); if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, partName); + AddToBlock(output, vtkmesh, range, datasetNo, partName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -510,8 +510,8 @@ void Foam::vtkPV3Foam::convertMeshPointZones int& blockNo ) { - partInfo& selector = partInfoPointZones_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangePointZones_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; @@ -521,10 +521,10 @@ void Foam::vtkPV3Foam::convertMeshPointZones printMemory(); } - if (selector.size()) + if (range.size()) { const pointZoneMesh& zMesh = mesh.pointZones(); - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { word zoneName = getPartName(partId); label zoneId = zMesh.findZoneID(zoneName); @@ -537,7 +537,7 @@ void Foam::vtkPV3Foam::convertMeshPointZones vtkPolyData* vtkmesh = pointZoneVTKMesh(mesh, zMesh[zoneId]); if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, zoneName); + AddToBlock(output, vtkmesh, range, datasetNo, zoneName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -566,8 +566,8 @@ void Foam::vtkPV3Foam::convertMeshPointSets int& blockNo ) { - partInfo& selector = partInfoPointSets_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangePointSets_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; @@ -577,7 +577,7 @@ void Foam::vtkPV3Foam::convertMeshPointSets printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { word partName = getPartName(partId); @@ -596,7 +596,7 @@ void Foam::vtkPV3Foam::convertMeshPointSets vtkPolyData* vtkmesh = pointSetVTKMesh(mesh, pSet); if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, partName); + AddToBlock(output, vtkmesh, range, datasetNo, partName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -616,4 +616,5 @@ void Foam::vtkPV3Foam::convertMeshPointSets } } + // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H index bfa2d1ac46..7e473a7c74 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H @@ -45,7 +45,7 @@ void Foam::vtkPV3Foam::convertPatchField const word& name, const Field& ptf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { @@ -70,7 +70,7 @@ void Foam::vtkPV3Foam::convertPatchField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetCellData() ->AddArray(cellData); @@ -85,7 +85,7 @@ void Foam::vtkPV3Foam::convertPatchPointField const word& name, const Field& pptf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { @@ -111,7 +111,7 @@ void Foam::vtkPV3Foam::convertPatchPointField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetPointData() ->AddArray(pointData); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H index 5e3ae1df42..697044bc6b 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H @@ -77,7 +77,7 @@ void Foam::vtkPV3Foam::convertPointFields ( ptf, output, - partInfoVolume_, + arrayRangeVolume_, regionPolyDecomp_ ); @@ -86,7 +86,7 @@ void Foam::vtkPV3Foam::convertPointFields ( ptf, output, - partInfoCellZones_, + arrayRangeCellZones_, zonePolyDecomp_ ); @@ -95,7 +95,7 @@ void Foam::vtkPV3Foam::convertPointFields ( ptf, output, - partInfoCellSets_, + arrayRangeCellSets_, csetPolyDecomp_ ); @@ -105,8 +105,8 @@ void Foam::vtkPV3Foam::convertPointFields // for ( - int partId = partInfoPatches_.start(); - partId < partInfoPatches_.end(); + int partId = arrayRangePatches_.start(); + partId < arrayRangePatches_.end(); ++partId ) { @@ -124,7 +124,7 @@ void Foam::vtkPV3Foam::convertPointFields fieldName, ptf.boundaryField()[patchId].patchInternalField()(), output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); } @@ -137,11 +137,11 @@ void Foam::vtkPV3Foam::convertPointFieldBlock ( const GeometricField& ptf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const List& decompLst ) { - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const label datasetNo = partDataset_[partId]; @@ -152,7 +152,7 @@ void Foam::vtkPV3Foam::convertPointFieldBlock ptf, GeometricField::null(), output, - selector, + range, datasetNo, decompLst[datasetNo] ); @@ -167,7 +167,7 @@ void Foam::vtkPV3Foam::convertPointField const GeometricField& ptf, const GeometricField& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const polyDecomp& decomp ) @@ -260,7 +260,7 @@ void Foam::vtkPV3Foam::convertPointField vtkUnstructuredGrid::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetPointData() ->AddArray(pointData); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C index 5bb2143c2a..2bed6fabd4 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C @@ -118,32 +118,39 @@ Foam::wordList Foam::vtkPV3Foam::readZoneNames(const word& zoneType) } -void Foam::vtkPV3Foam::updateInfoInternalMesh() +void Foam::vtkPV3Foam::updateInfoInternalMesh +( + vtkDataArraySelection* arraySelection +) { if (debug) { Info<< " Foam::vtkPV3Foam::updateInfoInternalMesh" << endl; } - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); - // Determine mesh parts (internalMesh, patches...) //- Add internal mesh as first entry - partInfoVolume_ = partSelection->GetNumberOfArrays(); - partSelection->AddArray("internalMesh"); - partInfoVolume_ += 1; + arrayRangeVolume_.reset( arraySelection->GetNumberOfArrays() ); + arraySelection->AddArray + ( + "internalMesh" + ); + arrayRangeVolume_ += 1; if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< " Foam::vtkPV3Foam::updateInfoInternalMesh" << endl; } } -void Foam::vtkPV3Foam::updateInfoLagrangian() +void Foam::vtkPV3Foam::updateInfoLagrangian +( + vtkDataArraySelection* arraySelection +) { if (debug) { @@ -166,34 +173,35 @@ void Foam::vtkPV3Foam::updateInfoLagrangian() readDir(dbPtr_->timePath()/lagrangianPrefix, fileName::DIRECTORY) ); - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); - partInfoLagrangian_ = partSelection->GetNumberOfArrays(); + arrayRangeLagrangian_.reset( arraySelection->GetNumberOfArrays() ); int nClouds = 0; forAll(cloudDirs, cloudI) { // Add cloud to GUI list - partSelection->AddArray + arraySelection->AddArray ( (cloudDirs[cloudI] + " - lagrangian").c_str() ); ++nClouds; } - - partInfoLagrangian_ += nClouds; + arrayRangeLagrangian_ += nClouds; if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< " Foam::vtkPV3Foam::updateInfoLagrangian" << endl; } } -void Foam::vtkPV3Foam::updateInfoPatches() +void Foam::vtkPV3Foam::updateInfoPatches +( + vtkDataArraySelection* arraySelection +) { if (debug) { @@ -201,8 +209,7 @@ void Foam::vtkPV3Foam::updateInfoPatches() << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); - partInfoPatches_ = partSelection->GetNumberOfArrays(); + arrayRangePatches_.reset( arraySelection->GetNumberOfArrays() ); int nPatches = 0; if (meshPtr_) @@ -215,7 +222,7 @@ void Foam::vtkPV3Foam::updateInfoPatches() if (pp.size()) { // Add patch to GUI list - partSelection->AddArray + arraySelection->AddArray ( (pp.name() + " - patch").c_str() ); @@ -260,7 +267,7 @@ void Foam::vtkPV3Foam::updateInfoPatches() // Valid patch if nFace > 0 - add patch to GUI list if (nFaces) { - partSelection->AddArray + arraySelection->AddArray ( (patchEntries[entryI].keyword() + " - patch").c_str() ); @@ -270,19 +277,22 @@ void Foam::vtkPV3Foam::updateInfoPatches() } } } - partInfoPatches_ += nPatches; + arrayRangePatches_ += nPatches; if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< " Foam::vtkPV3Foam::updateInfoPatches" << endl; } } -void Foam::vtkPV3Foam::updateInfoZones() +void Foam::vtkPV3Foam::updateInfoZones +( + vtkDataArraySelection* arraySelection +) { if (!reader_->GetIncludeZones()) { @@ -295,7 +305,6 @@ void Foam::vtkPV3Foam::updateInfoZones() << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); wordList namesLst; // @@ -310,12 +319,15 @@ void Foam::vtkPV3Foam::updateInfoZones() namesLst = readZoneNames("cellZones"); } - partInfoCellZones_ = partSelection->GetNumberOfArrays(); + arrayRangeCellZones_.reset( arraySelection->GetNumberOfArrays() ); forAll(namesLst, elemI) { - partSelection->AddArray((namesLst[elemI] + " - cellZone").c_str()); + arraySelection->AddArray + ( + (namesLst[elemI] + " - cellZone").c_str() + ); } - partInfoCellZones_ += namesLst.size(); + arrayRangeCellZones_ += namesLst.size(); // @@ -330,15 +342,15 @@ void Foam::vtkPV3Foam::updateInfoZones() namesLst = readZoneNames("faceZones"); } - partInfoFaceZones_ = partSelection->GetNumberOfArrays(); + arrayRangeFaceZones_.reset( arraySelection->GetNumberOfArrays() ); forAll(namesLst, elemI) { - partSelection->AddArray + arraySelection->AddArray ( (namesLst[elemI] + " - faceZone").c_str() ); } - partInfoFaceZones_ += namesLst.size(); + arrayRangeFaceZones_ += namesLst.size(); // @@ -353,28 +365,30 @@ void Foam::vtkPV3Foam::updateInfoZones() namesLst = readZoneNames("pointZones"); } - partInfoPointZones_ = partSelection->GetNumberOfArrays(); + arrayRangePointZones_.reset( arraySelection->GetNumberOfArrays() ); forAll(namesLst, elemI) { - partSelection->AddArray + arraySelection->AddArray ( (namesLst[elemI] + " - pointZone").c_str() ); } - partInfoPointZones_ += namesLst.size(); - + arrayRangePointZones_ += namesLst.size(); if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< " Foam::vtkPV3Foam::updateInfoZones" << endl; } } -void Foam::vtkPV3Foam::updateInfoSets() +void Foam::vtkPV3Foam::updateInfoSets +( + vtkDataArraySelection* arraySelection +) { if (!reader_->GetIncludeSets()) { @@ -386,8 +400,6 @@ void Foam::vtkPV3Foam::updateInfoSets() Info<< " Foam::vtkPV3Foam::updateInfoSets" << endl; } - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); - // Add names of sets IOobjectList objects ( @@ -397,26 +409,26 @@ void Foam::vtkPV3Foam::updateInfoSets() ); - partInfoCellSets_ = partSelection->GetNumberOfArrays(); - partInfoCellSets_ += addToSelection + arrayRangeCellSets_.reset( arraySelection->GetNumberOfArrays() ); + arrayRangeCellSets_ += addToSelection ( - partSelection, + arraySelection, objects, " - cellSet" ); - partInfoFaceSets_ = partSelection->GetNumberOfArrays(); - partInfoFaceSets_ += addToSelection + arrayRangeFaceSets_.reset( arraySelection->GetNumberOfArrays() ); + arrayRangeFaceSets_ += addToSelection ( - partSelection, + arraySelection, objects, " - faceSet" ); - partInfoPointSets_ = partSelection->GetNumberOfArrays(); - partInfoPointSets_ += addToSelection + arrayRangePointSets_.reset( arraySelection->GetNumberOfArrays() ); + arrayRangePointSets_ += addToSelection ( - partSelection, + arraySelection, objects, " - pointSet" ); @@ -424,7 +436,7 @@ void Foam::vtkPV3Foam::updateInfoSets() if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< " Foam::vtkPV3Foam::updateInfoSets" << endl; } @@ -450,14 +462,13 @@ void Foam::vtkPV3Foam::updateInfoLagrangianFields() // have to decide if the second set of fields get mixed in // or dealt with separately - const partInfo& selector = partInfoLagrangian_; - int partId = selector.start(); - - if (!selector.size() || partId < 0) + const arrayRange& range = arrayRangeLagrangian_; + if (range.empty()) { return; } + int partId = range.start(); word cloudName = getPartName(partId); // use the db directly since this might be called without a mesh, diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUtils.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUtils.C index f911222944..74a57fb559 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUtils.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUtils.C @@ -76,12 +76,12 @@ void Foam::vtkPV3Foam::AddToBlock ( vtkMultiBlockDataSet* output, vtkDataSet* dataset, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const std::string& datasetName ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -117,7 +117,7 @@ void Foam::vtkPV3Foam::AddToBlock output->GetMetaData(blockNo)->Set ( vtkCompositeDataSet::NAME(), - selector.name() + range.name() ); } @@ -135,11 +135,11 @@ void Foam::vtkPV3Foam::AddToBlock vtkDataSet* Foam::vtkPV3Foam::GetDataSetFromBlock ( vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -157,10 +157,10 @@ vtkDataSet* Foam::vtkPV3Foam::GetDataSetFromBlock Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets ( vtkMultiBlockDataSet* output, - const partInfo& selector + const arrayRange& range ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -173,7 +173,7 @@ Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets } -Foam::word Foam::vtkPV3Foam::getPartName(int partId) +Foam::word Foam::vtkPV3Foam::getPartName(const int partId) { return getFirstWord(reader_->GetPartArrayName(partId)); } @@ -202,13 +202,13 @@ Foam::wordHashSet Foam::vtkPV3Foam::getSelected Foam::wordHashSet Foam::vtkPV3Foam::getSelected ( vtkDataArraySelection* select, - const partInfo& selector + const arrayRange& range ) { int nElem = select->GetNumberOfArrays(); wordHashSet selections(2*nElem); - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { if (select->GetArraySetting(elemI)) { @@ -262,13 +262,13 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries ( vtkDataArraySelection* select, - const partInfo& selector + const arrayRange& range ) { - stringList selections(selector.size()); + stringList selections(range.size()); label nElem = 0; - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { if (select->GetArraySetting(elemI)) { @@ -281,7 +281,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries if (debug) { Info<< "available("; - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { Info<< " \"" << select->GetArrayName(elemI) << "\""; } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H index d5387be61f..e28e3940a8 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H @@ -81,7 +81,7 @@ void Foam::vtkPV3Foam::convertVolFields tf, ptfPtr, output, - partInfoVolume_, + arrayRangeVolume_, regionPolyDecomp_ ); @@ -91,7 +91,7 @@ void Foam::vtkPV3Foam::convertVolFields tf, ptfPtr, output, - partInfoCellZones_, + arrayRangeCellZones_, zonePolyDecomp_ ); @@ -101,7 +101,7 @@ void Foam::vtkPV3Foam::convertVolFields tf, ptfPtr, output, - partInfoCellSets_, + arrayRangeCellSets_, csetPolyDecomp_ ); @@ -117,8 +117,8 @@ void Foam::vtkPV3Foam::convertVolFields for ( - int partId = partInfoPatches_.start(); - partId < partInfoPatches_.end(); + int partId = arrayRangePatches_.start(); + partId < arrayRangePatches_.end(); ++partId ) { @@ -155,7 +155,7 @@ void Foam::vtkPV3Foam::convertVolFields tf.name(), tpptf(), output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); @@ -164,7 +164,7 @@ void Foam::vtkPV3Foam::convertVolFields pointFldName, ppInterpList[patchId].faceToPointInterpolate(tpptf)(), output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); } @@ -175,7 +175,7 @@ void Foam::vtkPV3Foam::convertVolFields tf.name(), ptf, output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); @@ -184,7 +184,7 @@ void Foam::vtkPV3Foam::convertVolFields pointFldName, ppInterpList[patchId].faceToPointInterpolate(ptf)(), output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); } @@ -195,8 +195,8 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int partId = partInfoFaceZones_.start(); - partId < partInfoFaceZones_.end(); + int partId = arrayRangeFaceZones_.start(); + partId < arrayRangeFaceZones_.end(); ++partId ) { @@ -220,7 +220,7 @@ void Foam::vtkPV3Foam::convertVolFields ( tf, output, - partInfoFaceZones_, + arrayRangeFaceZones_, datasetNo, mesh, zMesh[zoneId] @@ -234,8 +234,8 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int partId = partInfoFaceSets_.start(); - partId < partInfoFaceSets_.end(); + int partId = arrayRangeFaceSets_.start(); + partId < arrayRangeFaceSets_.end(); ++partId ) { @@ -253,7 +253,7 @@ void Foam::vtkPV3Foam::convertVolFields ( tf, output, - partInfoFaceSets_, + arrayRangeFaceSets_, datasetNo, mesh, fSet @@ -271,11 +271,11 @@ void Foam::vtkPV3Foam::convertVolFieldBlock const GeometricField& tf, autoPtr >& ptfPtr, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const List& decompLst ) { - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const label datasetNo = partDataset_[partId]; @@ -285,7 +285,7 @@ void Foam::vtkPV3Foam::convertVolFieldBlock ( tf, output, - selector, + range, datasetNo, decompLst[datasetNo] ); @@ -309,7 +309,7 @@ void Foam::vtkPV3Foam::convertVolFieldBlock ptfPtr(), tf, output, - selector, + range, datasetNo, decompLst[datasetNo] ); @@ -323,7 +323,7 @@ void Foam::vtkPV3Foam::convertVolField ( const GeometricField& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const polyDecomp& decompInfo ) @@ -359,7 +359,7 @@ void Foam::vtkPV3Foam::convertVolField vtkUnstructuredGrid::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetCellData() ->AddArray(celldata); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/PV3blockMeshReader_SM.xml b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/PV3blockMeshReader_SM.xml index 2ac4774ff0..b5bb304a65 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/PV3blockMeshReader_SM.xml +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/PV3blockMeshReader_SM.xml @@ -43,34 +43,40 @@ - - + + + - + - + + + This property contains a list of the blocks + - + @@ -82,13 +88,16 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="CurvedEdgesArrayInfo" + information_property="CurvedEdgesArrayStatus" animateable="0"> - + + + This property contains a list of the curved edges + diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.cxx index 8114a14709..6a56583134 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.cxx @@ -32,9 +32,10 @@ License #include #include #include +#include #include -// Paraview<->QT UI +// Paraview <-> QT UI #include "pqAnimationScene.h" #include "pqApplicationCore.h" #include "pqPipelineRepresentation.h" @@ -56,34 +57,35 @@ pqPV3blockMeshReaderPanel::pqPV3blockMeshReaderPanel QWidget *p ) : - pqAutoGeneratedObjectPanel(proxy, p), - sourceProxy_(vtkSMSourceProxy::SafeDownCast(this->proxy())) + pqAutoGeneratedObjectPanel(proxy, p) { // create first sublayout (at top of the panel) - QGridLayout *sect1 = new QGridLayout(); - this->PanelLayout->addLayout(sect1, 0, 0, 1, -1); - + QGridLayout *form = new QGridLayout(); + this->PanelLayout->addLayout(form, 0, 0, 1, -1); + vtkSMProperty* prop = 0; // checkbox for showing point numbers - ShowPointNumbers_ = new QCheckBox("Show Point Numbers"); - ShowPointNumbers_->setChecked(true); + if ((prop = this->proxy()->GetProperty("UiShowPointNumbers")) != 0) + { + prop->SetImmediateUpdate(true); - connect - ( - ShowPointNumbers_, - SIGNAL(stateChanged(int)), - this, - SLOT(ShowPointNumbersToggled()) - ); + ShowPointNumbers_ = new QCheckBox("Show Point Numbers"); + ShowPointNumbers_->setToolTip("Show point numbers in render window."); + ShowPointNumbers_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); - sect1->addWidget(ShowPointNumbers_); + form->addWidget(ShowPointNumbers_); - - // immediate update on the Server Manager side - vtkSMIntVectorProperty::SafeDownCast - ( - sourceProxy_->GetProperty("UiShowPointNumbers") - )->SetImmediateUpdate(true); + connect + ( + ShowPointNumbers_, + SIGNAL(stateChanged(int)), + this, + SLOT(ShowPointNumbersToggled()) + ); + } } @@ -93,7 +95,7 @@ void pqPV3blockMeshReaderPanel::ShowPointNumbersToggled() { vtkSMIntVectorProperty::SafeDownCast ( - sourceProxy_->GetProperty("UiShowPointNumbers") + this->proxy()->GetProperty("UiShowPointNumbers") )->SetElement(0, ShowPointNumbers_->isChecked()); // update the active view diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.h index 8096338315..0b1929af6d 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.h @@ -62,9 +62,6 @@ class pqPV3blockMeshReaderPanel Q_OBJECT; typedef pqAutoGeneratedObjectPanel Superclass; - //- Server Manager Source Proxy - vtkSMSourceProxy* sourceProxy_; - //- Show Point Numbers checkbox QCheckBox* ShowPointNumbers_; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.cxx index bf17a60ca3..ab38d1bf4a 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.cxx @@ -64,7 +64,7 @@ vtkPV3blockMeshReader::vtkPV3blockMeshReader() ShowPointNumbers = 1; UpdateGUI = 0; - PartSelection = vtkDataArraySelection::New(); + BlockSelection = vtkDataArraySelection::New(); CurvedEdgesSelection = vtkDataArraySelection::New(); // Setup the selection callback to modify this object when an array @@ -77,7 +77,7 @@ vtkPV3blockMeshReader::vtkPV3blockMeshReader() SelectionObserver->SetClientData(this); - PartSelection->AddObserver + BlockSelection->AddObserver ( vtkCommand::ModifiedEvent, this->SelectionObserver @@ -109,11 +109,11 @@ vtkPV3blockMeshReader::~vtkPV3blockMeshReader() delete [] FileName; } - PartSelection->RemoveObserver(this->SelectionObserver); + BlockSelection->RemoveObserver(this->SelectionObserver); CurvedEdgesSelection->RemoveObserver(this->SelectionObserver); SelectionObserver->Delete(); - PartSelection->Delete(); + BlockSelection->Delete(); } @@ -292,50 +292,50 @@ void vtkPV3blockMeshReader::PrintSelf(ostream& os, vtkIndent indent) // ---------------------------------------------------------------------- -// Parts selection list control +// Block selection list control -vtkDataArraySelection* vtkPV3blockMeshReader::GetPartSelection() +vtkDataArraySelection* vtkPV3blockMeshReader::GetBlockSelection() { - vtkDebugMacro(<<"GetPartSelection"); - return PartSelection; + vtkDebugMacro(<<"GetBlockSelection"); + return BlockSelection; } -int vtkPV3blockMeshReader::GetNumberOfPartArrays() +int vtkPV3blockMeshReader::GetNumberOfBlockArrays() { - vtkDebugMacro(<<"GetNumberOfPartArrays"); - return PartSelection->GetNumberOfArrays(); + vtkDebugMacro(<<"GetNumberOfBlockArrays"); + return BlockSelection->GetNumberOfArrays(); } -const char* vtkPV3blockMeshReader::GetPartArrayName(int index) +const char* vtkPV3blockMeshReader::GetBlockArrayName(int index) { - vtkDebugMacro(<<"GetPartArrayName"); - return PartSelection->GetArrayName(index); + vtkDebugMacro(<<"GetBlockArrayName"); + return BlockSelection->GetArrayName(index); } -int vtkPV3blockMeshReader::GetPartArrayStatus(const char* name) +int vtkPV3blockMeshReader::GetBlockArrayStatus(const char* name) { - vtkDebugMacro(<<"GetPartArrayStatus"); - return PartSelection->ArrayIsEnabled(name); + vtkDebugMacro(<<"GetBlockArrayStatus"); + return BlockSelection->ArrayIsEnabled(name); } -void vtkPV3blockMeshReader::SetPartArrayStatus +void vtkPV3blockMeshReader::SetBlockArrayStatus ( const char* name, int status ) { - vtkDebugMacro(<<"SetPartArrayStatus"); + vtkDebugMacro(<<"SetBlockArrayStatus"); if (status) { - PartSelection->EnableArray(name); + BlockSelection->EnableArray(name); } else { - PartSelection->DisableArray(name); + BlockSelection->DisableArray(name); } } @@ -399,14 +399,7 @@ void vtkPV3blockMeshReader::SelectionModifiedCallback void* ) { - static_cast(clientdata)->SelectionModified(); -} - - -void vtkPV3blockMeshReader::SelectionModified() -{ - vtkDebugMacro(<<"SelectionModified"); - Modified(); + static_cast(clientdata)->Modified(); } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.h index ae704d4a3b..ee2228f5da 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.h @@ -84,15 +84,15 @@ public: // Description: - // Parts (blocks) selection list control - vtkDataArraySelection* GetPartSelection(); - int GetNumberOfPartArrays(); - int GetPartArrayStatus(const char*); - void SetPartArrayStatus(const char*, int status); - const char* GetPartArrayName(int index); + // Blocks selection list control + vtkDataArraySelection* GetBlockSelection(); + int GetNumberOfBlockArrays(); + int GetBlockArrayStatus(const char*); + void SetBlockArrayStatus(const char*, int status); + const char* GetBlockArrayName(int index); // Description: - // Parts (blocks) selection list control + // CurvedEdges selection list control vtkDataArraySelection* GetCurvedEdgesSelection(); int GetNumberOfCurvedEdgesArrays(); int GetCurvedEdgesArrayStatus(const char*); @@ -110,8 +110,6 @@ public: void* calldata ); - void SelectionModified(); - protected: @@ -164,7 +162,7 @@ private: //- Dummy variable/switch to invoke a reader update int UpdateGUI; - vtkDataArraySelection* PartSelection; + vtkDataArraySelection* BlockSelection; vtkDataArraySelection* CurvedEdgesSelection; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C index e9d36ec91e..b039087398 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C @@ -49,13 +49,16 @@ defineTypeNameAndDebug(Foam::vtkPV3blockMesh, 0); void Foam::vtkPV3blockMesh::resetCounters() { // Reset mesh part ids and sizes - partInfoBlocks_.reset(); - partInfoEdges_.reset(); - partInfoCorners_.reset(); + arrayRangeBlocks_.reset(); + arrayRangeEdges_.reset(); + arrayRangeCorners_.reset(); } -void Foam::vtkPV3blockMesh::updateInfoBlocks() +void Foam::vtkPV3blockMesh::updateInfoBlocks +( + vtkDataArraySelection* arraySelection +) { if (debug) { @@ -63,8 +66,7 @@ void Foam::vtkPV3blockMesh::updateInfoBlocks() << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection* selection = reader_->GetPartSelection(); - partInfoBlocks_ = selection->GetNumberOfArrays(); + arrayRangeBlocks_.reset( arraySelection->GetNumberOfArrays() ); const blockMesh& blkMesh = *meshPtr_; const int nBlocks = blkMesh.size(); @@ -81,22 +83,25 @@ void Foam::vtkPV3blockMesh::updateInfoBlocks() } // Add blockId and zoneName to GUI list - selection->AddArray(partName.c_str()); + arraySelection->AddArray(partName.c_str()); } - partInfoBlocks_ += nBlocks; + arrayRangeBlocks_ += nBlocks; if (debug) { // just for debug info - getSelectedArrayEntries(selection); + getSelectedArrayEntries(arraySelection); Info<< " Foam::vtkPV3blockMesh::updateInfoBlocks" << endl; } } -void Foam::vtkPV3blockMesh::updateInfoEdges() +void Foam::vtkPV3blockMesh::updateInfoEdges +( + vtkDataArraySelection* arraySelection +) { if (debug) { @@ -104,8 +109,7 @@ void Foam::vtkPV3blockMesh::updateInfoEdges() << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection* selection = reader_->GetCurvedEdgesSelection(); - partInfoEdges_ = selection->GetNumberOfArrays(); + arrayRangeEdges_.reset( arraySelection->GetNumberOfArrays() ); const blockMesh& blkMesh = *meshPtr_; const curvedEdgeList& edges = blkMesh.edges(); @@ -119,15 +123,15 @@ void Foam::vtkPV3blockMesh::updateInfoEdges() << edges[edgeI].type(); // Add "beg:end - type" to GUI list - selection->AddArray(ostr.str().c_str()); + arraySelection->AddArray(ostr.str().c_str()); } - partInfoEdges_ += nEdges; + arrayRangeEdges_ += nEdges; if (debug) { // just for debug info - getSelectedArrayEntries(selection); + getSelectedArrayEntries(arraySelection); Info<< " Foam::vtkPV3blockMesh::updateInfoEdges" << endl; } @@ -145,9 +149,9 @@ Foam::vtkPV3blockMesh::vtkPV3blockMesh reader_(reader), dbPtr_(NULL), meshPtr_(NULL), - partInfoBlocks_("block"), - partInfoEdges_("edges"), - partInfoCorners_("corners") + arrayRangeBlocks_("block"), + arrayRangeEdges_("edges"), + arrayRangeCorners_("corners") { if (debug) { @@ -243,7 +247,7 @@ void Foam::vtkPV3blockMesh::updateInfo() resetCounters(); - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); + vtkDataArraySelection* blockSelection = reader_->GetBlockSelection(); vtkDataArraySelection* edgeSelection = reader_->GetCurvedEdgesSelection(); // enable 'internalMesh' on the first call @@ -251,33 +255,33 @@ void Foam::vtkPV3blockMesh::updateInfo() stringList enabledParts; stringList enabledEdges; bool firstTime = false; - if (!partSelection->GetNumberOfArrays() && !meshPtr_) + if (!blockSelection->GetNumberOfArrays() && !meshPtr_) { firstTime = true; } else { - enabledParts = getSelectedArrayEntries(partSelection); + enabledParts = getSelectedArrayEntries(blockSelection); enabledEdges = getSelectedArrayEntries(edgeSelection); } // Clear current mesh parts list - partSelection->RemoveAllArrays(); + blockSelection->RemoveAllArrays(); edgeSelection->RemoveAllArrays(); // need a blockMesh updateFoamMesh(); // Update mesh parts list - updateInfoBlocks(); + updateInfoBlocks( blockSelection ); // Update curved edges list - updateInfoEdges(); + updateInfoEdges( edgeSelection ); // restore the enabled selections if (!firstTime) { - setSelectedArrayEntries(partSelection, enabledParts); + setSelectedArrayEntries(blockSelection, enabledParts); setSelectedArrayEntries(edgeSelection, enabledEdges); } @@ -337,7 +341,7 @@ void Foam::vtkPV3blockMesh::Update reader_->UpdateProgress(0.1); // Set up mesh parts selection(s) - updateBoolListStatus(partStatus_, reader_->GetPartSelection()); + updateBoolListStatus(blockStatus_, reader_->GetBlockSelection()); // Set up curved edges selection(s) updateBoolListStatus(edgeStatus_, reader_->GetCurvedEdgesSelection()); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H index a159b3cba5..fc612c27b8 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H @@ -88,7 +88,7 @@ class vtkPV3blockMesh // Private classes //- Bookkeeping for GUI checklists and the multi-block organization - class partInfo + class arrayRange { const char *name_; int block_; @@ -97,11 +97,11 @@ class vtkPV3blockMesh public: - partInfo(const char *name, const int blockNo=0) + arrayRange(const char *name, const int blockNo=0) : name_(name), block_(blockNo), - start_(-1), + start_(0), size_(0) {} @@ -119,21 +119,25 @@ class vtkPV3blockMesh return prev; } + //- Return block name const char* name() const { return name_; } + //- Return array start index int start() const { return start_; } + //- Return array end index int end() const { return start_ + size_; } + //- Return sublist size int size() const { return size_; @@ -144,16 +148,10 @@ class vtkPV3blockMesh return !size_; } - void reset() + //- Reset the size to zero and optionally assign a new start + void reset(const int startAt = 0) { - start_ = -1; - size_ = 0; - } - - //- Assign new start and reset the size - void operator=(const int i) - { - start_ = i; + start_ = startAt; size_ = 0; } @@ -177,22 +175,20 @@ class vtkPV3blockMesh blockMesh* meshPtr_; //- Selected geometrical parts - boolList partStatus_; + boolList blockStatus_; //- Selected curved edges boolList edgeStatus_; //- First instance and size of bleckMesh blocks - // used to index into partStatus_ - partInfo partInfoBlocks_; + // used to index into blockStatus_ + arrayRange arrayRangeBlocks_; - //- First instance and size of CurvedEdges - // only partially used - partInfo partInfoEdges_; + //- First instance and size of CurvedEdges (only partially used) + arrayRange arrayRangeEdges_; - //- First instance and size of block corners - // only partially used - partInfo partInfoCorners_; + //- First instance and size of block corners (only partially used) + arrayRange arrayRangeCorners_; //- List of point numbers for rendering to window List pointNumberTextActorsPtrs_; @@ -205,7 +201,7 @@ class vtkPV3blockMesh ( vtkMultiBlockDataSet* output, vtkDataSet* dataset, - const partInfo&, + const arrayRange&, const label datasetNo, const std::string& datasetName ); @@ -215,7 +211,7 @@ class vtkPV3blockMesh static vtkDataSet* GetDataSetFromBlock ( vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -224,7 +220,7 @@ class vtkPV3blockMesh static label GetNumberOfDataSets ( vtkMultiBlockDataSet* output, - const partInfo& + const arrayRange& ); //- Update boolList from GUI selection @@ -240,10 +236,10 @@ class vtkPV3blockMesh // Update information helper functions //- Internal block info - void updateInfoBlocks(); + void updateInfoBlocks(vtkDataArraySelection*); //- block curved edges info - void updateInfoEdges(); + void updateInfoEdges(vtkDataArraySelection*); // Update helper functions @@ -271,7 +267,7 @@ class vtkPV3blockMesh static wordHashSet getSelected ( vtkDataArraySelection*, - const partInfo& + const arrayRange& ); //- Retrieve the current selections @@ -281,7 +277,7 @@ class vtkPV3blockMesh static stringList getSelectedArrayEntries ( vtkDataArraySelection*, - const partInfo& + const arrayRange& ); //- Set selection(s) diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C index 4f76f5ebf2..67a9cdbed7 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C @@ -52,9 +52,9 @@ void Foam::vtkPV3blockMesh::convertMeshBlocks int& blockNo ) { - vtkDataArraySelection* selection = reader_->GetPartSelection(); - partInfo& selector = partInfoBlocks_; - selector.block(blockNo); // set output block + vtkDataArraySelection* selection = reader_->GetBlockSelection(); + arrayRange& range = arrayRangeBlocks_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const blockMesh& blkMesh = *meshPtr_; @@ -70,25 +70,18 @@ void Foam::vtkPV3blockMesh::convertMeshBlocks for ( - int partId = selector.start(); - partId < selector.end(); + int partId = range.start(); + partId < range.end(); ++partId, ++blockI ) { - if (!partStatus_[partId]) + if (!blockStatus_[partId]) { continue; } const blockDescriptor& blockDef = blkMesh[blockI].blockDef(); - word partName("block"); -// // append the (optional) zone name -// if (!blockDef.zoneName().empty()) -// { -// partName += " - " + blockDef.zoneName(); -// } -// vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New(); // Convert Foam mesh vertices to VTK @@ -123,7 +116,7 @@ void Foam::vtkPV3blockMesh::convertMeshBlocks AddToBlock ( - output, vtkmesh, selector, datasetNo, + output, vtkmesh, range, datasetNo, selection->GetArrayName(partId) ); @@ -152,9 +145,9 @@ void Foam::vtkPV3blockMesh::convertMeshEdges ) { vtkDataArraySelection* selection = reader_->GetCurvedEdgesSelection(); - partInfo& selector = partInfoEdges_; + arrayRange& range = arrayRangeEdges_; - selector.block(blockNo); // set output block + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const blockMesh& blkMesh = *meshPtr_; @@ -165,8 +158,8 @@ void Foam::vtkPV3blockMesh::convertMeshEdges for ( - int partId = selector.start(); - partId < selector.end(); + int partId = range.start(); + partId < range.end(); ++partId, ++edgeI ) { @@ -187,9 +180,7 @@ void Foam::vtkPV3blockMesh::convertMeshEdges edgeList blkEdges = blockDef.blockShape().edges(); - // find the corresponding edge within the block - label foundEdgeI = -1; forAll(blkEdges, blkEdgeI) { @@ -236,7 +227,7 @@ void Foam::vtkPV3blockMesh::convertMeshEdges AddToBlock ( - output, vtkmesh, selector, datasetNo, + output, vtkmesh, range, datasetNo, selection->GetArrayName(partId) ); @@ -269,8 +260,8 @@ void Foam::vtkPV3blockMesh::convertMeshCorners int& blockNo ) { - partInfo& selector = partInfoCorners_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeCorners_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const pointField& blockPoints = meshPtr_->blockPointField(); @@ -310,7 +301,11 @@ void Foam::vtkPV3blockMesh::convertMeshCorners vtkmesh->SetVerts(vtkcells); vtkcells->Delete(); - AddToBlock(output, vtkmesh, selector, datasetNo, partInfoCorners_.name()); + AddToBlock + ( + output, vtkmesh, range, datasetNo, + arrayRangeCorners_.name() + ); vtkmesh->Delete(); datasetNo++; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshUtils.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshUtils.C index bde724d9a7..5a84dd2c77 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshUtils.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshUtils.C @@ -71,12 +71,12 @@ void Foam::vtkPV3blockMesh::AddToBlock ( vtkMultiBlockDataSet* output, vtkDataSet* dataset, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const std::string& datasetName ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -112,7 +112,7 @@ void Foam::vtkPV3blockMesh::AddToBlock output->GetMetaData(blockNo)->Set ( vtkCompositeDataSet::NAME(), - selector.name() + range.name() ); } @@ -130,11 +130,11 @@ void Foam::vtkPV3blockMesh::AddToBlock vtkDataSet* Foam::vtkPV3blockMesh::GetDataSetFromBlock ( vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -152,10 +152,10 @@ vtkDataSet* Foam::vtkPV3blockMesh::GetDataSetFromBlock Foam::label Foam::vtkPV3blockMesh::GetNumberOfDataSets ( vtkMultiBlockDataSet* output, - const partInfo& selector + const arrayRange& range ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -191,13 +191,13 @@ Foam::wordHashSet Foam::vtkPV3blockMesh::getSelected Foam::wordHashSet Foam::vtkPV3blockMesh::getSelected ( vtkDataArraySelection* select, - const partInfo& selector + const arrayRange& range ) { int nElem = select->GetNumberOfArrays(); wordHashSet selections(2*nElem); - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { if (select->GetArraySetting(elemI)) { @@ -251,13 +251,13 @@ Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries ( vtkDataArraySelection* select, - const partInfo& selector + const arrayRange& range ) { - stringList selections(selector.size()); + stringList selections(range.size()); label nElem = 0; - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { if (select->GetArraySetting(elemI)) { @@ -270,7 +270,7 @@ Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries if (debug) { Info<< "available("; - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { Info<< " \"" << select->GetArrayName(elemI) << "\""; } diff --git a/doc/Doxygen/Doxyfile b/doc/Doxygen/Doxyfile index 908fa543b9..68ff8430b2 100644 --- a/doc/Doxygen/Doxyfile +++ b/doc/Doxygen/Doxyfile @@ -689,13 +689,13 @@ HTML_FILE_EXTENSION = .html # each generated HTML page. If it is left blank doxygen will generate a # standard header. -HTML_HEADER = FoamHeader.html +HTML_HEADER = $(WM_PROJECT_DIR)/doc/Doxygen/FoamHeader.html # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. -HTML_FOOTER = FoamFooter.html +HTML_FOOTER = $(WM_PROJECT_DIR)/doc/Doxygen/FoamFooter.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to diff --git a/src/mesh/blockMesh/Make/files b/src/mesh/blockMesh/Make/files index cc7a1c1bb5..d68caa1c24 100644 --- a/src/mesh/blockMesh/Make/files +++ b/src/mesh/blockMesh/Make/files @@ -1,13 +1,17 @@ +curvedEdges/CatmullRomSpline.C +curvedEdges/polyLine.C + +curvedEdges/arcEdge.C curvedEdges/curvedEdge.C curvedEdges/lineEdge.C -curvedEdges/polyLine.C curvedEdges/polyLineEdge.C -curvedEdges/arcEdge.C -curvedEdges/spline.C -curvedEdges/BSpline.C -curvedEdges/simpleSplineEdge.C -curvedEdges/polySplineEdge.C curvedEdges/lineDivide.C +curvedEdges/splineEdge.C + +curvedEdges/legacy/spline.C +curvedEdges/legacy/BSpline.C +curvedEdges/legacy/simpleSplineEdge.C +curvedEdges/legacy/polySplineEdge.C blockDescriptor/blockDescriptor.C blockDescriptor/blockDescriptorEdges.C diff --git a/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C b/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C index 599a108c3c..335fc824b8 100644 --- a/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C +++ b/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C @@ -89,7 +89,7 @@ Foam::blockDescriptor::blockDescriptor { zoneName_ = t.wordToken(); - // Get the next token + // Examine next token is >> t; } is.putBack(t); @@ -129,7 +129,12 @@ Foam::blockDescriptor::blockDescriptor scalarList expRatios(is); - if (expRatios.size() == 3) + if (expRatios.size() == 1) + { + // identical in x/y/z-directions + expand_ = expRatios[0]; + } + else if (expRatios.size() == 3) { // x-direction expand_[0] = expRatios[0]; diff --git a/src/mesh/blockMesh/blockDescriptor/blockDescriptorEdges.C b/src/mesh/blockMesh/blockDescriptor/blockDescriptorEdges.C index 5fcf31f421..afc8fcd078 100644 --- a/src/mesh/blockMesh/blockDescriptor/blockDescriptorEdges.C +++ b/src/mesh/blockMesh/blockDescriptor/blockDescriptorEdges.C @@ -120,8 +120,8 @@ void Foam::blockDescriptor::setEdge // divide the line lineDivide divEdge(cedge, dim, 1.0/(gExp+SMALL)); - pointField p = divEdge.points(); - scalarList d = divEdge.lambdaDivisions(); + const pointField& p = divEdge.points(); + const scalarList& d = divEdge.lambdaDivisions(); edgePoints_[edgeI].setSize(p.size()); edgeWeights_[edgeI].setSize(d.size()); diff --git a/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.C b/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.C new file mode 100644 index 0000000000..711ae8da67 --- /dev/null +++ b/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.C @@ -0,0 +1,131 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "error.H" +#include "CatmullRomSpline.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::CatmullRomSpline::CatmullRomSpline +( + const pointField& Knots, + const vector&, + const vector& +) +: + polyLine(Knots) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::point Foam::CatmullRomSpline::position(const scalar mu) const +{ + // endpoints + if (mu < SMALL) + { + return points().first(); + } + else if (mu > 1 - SMALL) + { + return points().last(); + } + + scalar lambda = mu; + label segment = localParameter(lambda); + return position(segment, lambda); +} + + +Foam::point Foam::CatmullRomSpline::position +( + const label segment, + const scalar mu +) const +{ + const point& p0 = points()[segment]; + const point& p1 = points()[segment+1]; + + // special cases - no calculation needed + if (segment < 0 || mu < 0.0) + { + return p0; + } + else if (segment > nSegments() || mu >= 1.0) + { + return p1; + } + + // determine the end points + point e0; + point e1; + + if (segment == 0) + { + // end: simple reflection + e0 = 2.0 * p0 - p1; + } + else + { + e0 = points()[segment-1]; + } + + if (segment+1 == nSegments()) + { + // end: simple reflection + e1 = 2.0 * p1 - p0; + } + else + { + e1 = points()[segment+2]; + } + + + return 0.5 * + ( + ( 2 * p0 ) + + mu * + ( + ( -e0 + p1 ) + + mu * + ( + ( 2*e0 - 5*p0 + 4*p1 - e1 ) + + mu * + ( -e0 + 3*p0 - 3*p1 + e1 ) + ) + ) + ); +} + + +Foam::scalar Foam::CatmullRomSpline::length() const +{ + notImplemented("CatmullRomSpline::length() const"); + return 1.0; +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.H b/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.H new file mode 100644 index 0000000000..6f1851a7a6 --- /dev/null +++ b/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.H @@ -0,0 +1,128 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::CatmullRomSpline + +Description + An implementation of Catmull-Rom splines (sometime as known as + Overhauser splines). + + In this implementation, the end tangents are created + automatically by reflection. + + In matrix form, the @e local interpolation on the interval t=[0..1] is + described as follows: + @verbatim + P(t) = 0.5 * [ t^3 t^2 t 1 ] * [ -1 3 -3 1 ] * [ P-1 ] + [ 2 -5 4 -1 ] [ P0 ] + [ -1 0 1 0 ] [ P1 ] + [ 0 2 0 0 ] [ P2 ] + @endverbatim + + Where P-1 and P2 represent the neighbouring points or the + extrapolated end points. Simple reflection is used to + automatically create the end points. + + The spline is discretized based on the chord length of the + individual segments. In rare cases (sections with very high + curvatures), the resulting distribution may be sub-optimal. + +SeeAlso + http://www.algorithmist.net/catmullrom.html provides a nice + introduction + +ToDo + A future implementation could also handle closed splines - either + when the start/end points are identically or when specified. + +SourceFiles + CatmullRomSpline.C + +\*---------------------------------------------------------------------------*/ + +#ifndef CatmullRomSpline_H +#define CatmullRomSpline_H + +#include "polyLine.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class CatmullRomSpline Declaration +\*---------------------------------------------------------------------------*/ + +class CatmullRomSpline +: + public polyLine +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + CatmullRomSpline(const CatmullRomSpline&); + + //- Disallow default bitwise assignment + void operator=(const CatmullRomSpline&); + + +public: + + // Constructors + + //- Construct from components + CatmullRomSpline + ( + const pointField& knots, + const vector& begTangentNotImplemented = vector::zero, + const vector& endTangentNotImplemented = vector::zero + ); + + + // Member Functions + + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar lambda) const; + + //- Return the point position corresponding to the local parameter + // 0 <= lambda <= 1 on the given segment + point position(const label segment, const scalar lambda) const; + + //- Return the length of the curve + scalar length() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/curvedEdges/arcEdge.C b/src/mesh/blockMesh/curvedEdges/arcEdge.C index afb62a8f8b..21143ac43a 100644 --- a/src/mesh/blockMesh/curvedEdges/arcEdge.C +++ b/src/mesh/blockMesh/curvedEdges/arcEdge.C @@ -61,7 +61,7 @@ Foam::cylindricalCS Foam::arcEdge::calcAngle() scalar fact = 0.5*(bsqr - adotb)/denom; - vector centre = 0.5*a + fact*((a ^ b) ^ a); + point centre = 0.5*a + fact*((a ^ b) ^ a); centre += p1_; @@ -71,11 +71,10 @@ Foam::cylindricalCS Foam::arcEdge::calcAngle() vector r3(p3_ - centre); // find angles - scalar tmp = (r3&r1)/(mag(r3)*mag(r1)); - angle_ = radToDeg(acos(tmp)); + angle_ = radToDeg(acos((r3 & r1)/(mag(r3) * mag(r1)))); // check if the vectors define an exterior or an interior arcEdge - if (((r1 ^ r2)&(r1 ^ r3)) < 0.0) + if (((r1 ^ r2) & (r1 ^ r3)) < 0.0) { angle_ = 360.0 - angle_; } @@ -99,7 +98,7 @@ Foam::cylindricalCS Foam::arcEdge::calcAngle() radius_ = mag(r3); // set up and return the local coordinate system - return cylindricalCS("tmpCS", centre, tempAxis, r1); + return cylindricalCS("arcEdgeCS", centre, tempAxis, r1); } @@ -133,7 +132,7 @@ Foam::arcEdge::arcEdge(const pointField& points, Istream& is) // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::arcEdge::position(const scalar lambda) const +Foam::point Foam::arcEdge::position(const scalar lambda) const { if (lambda < 0 || lambda > 1) { @@ -146,7 +145,7 @@ Foam::vector Foam::arcEdge::position(const scalar lambda) const { return p1_; } - else if (lambda > 1-SMALL) + else if (lambda > 1 - SMALL) { return p3_; } diff --git a/src/mesh/blockMesh/curvedEdges/arcEdge.H b/src/mesh/blockMesh/curvedEdges/arcEdge.H index da96d150fc..194e5c634b 100644 --- a/src/mesh/blockMesh/curvedEdges/arcEdge.H +++ b/src/mesh/blockMesh/curvedEdges/arcEdge.H @@ -54,15 +54,16 @@ class arcEdge { // Private data - vector p1_, p2_, p3_; + point p1_, p2_, p3_; + cylindricalCS cs_; scalar angle_; scalar radius_; - cylindricalCS cs_; - - cylindricalCS calcAngle(); // Private Member Functions + //- Calculate the coordinate system, angle and radius + cylindricalCS calcAngle(); + //- Disallow default bitwise copy construct arcEdge(const arcEdge&); @@ -96,9 +97,9 @@ public: // Member Functions - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/curvedEdge.C b/src/mesh/blockMesh/curvedEdges/curvedEdge.C index 4b80a221dd..35e58b7692 100644 --- a/src/mesh/blockMesh/curvedEdges/curvedEdge.C +++ b/src/mesh/blockMesh/curvedEdges/curvedEdge.C @@ -108,27 +108,27 @@ Foam::autoPtr Foam::curvedEdge::New // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::pointField Foam::curvedEdge::knotlist +Foam::pointField Foam::curvedEdge::appendEndPoints ( const pointField& points, const label start, const label end, - const pointField& otherknots + const pointField& otherKnots ) { - pointField newPoints(otherknots.size() + 2); + pointField allKnots(otherKnots.size() + 2); // start/end knots - newPoints[0] = points[start]; - newPoints[otherknots.size() + 1] = points[end]; + allKnots[0] = points[start]; + allKnots[otherKnots.size() + 1] = points[end]; // intermediate knots - forAll(otherknots, knotI) + forAll(otherKnots, knotI) { - newPoints[knotI+1] = otherknots[knotI]; + allKnots[knotI+1] = otherKnots[knotI]; } - return newPoints; + return allKnots; } diff --git a/src/mesh/blockMesh/curvedEdges/curvedEdge.H b/src/mesh/blockMesh/curvedEdges/curvedEdge.H index 49ad047e45..bd1ad3246a 100644 --- a/src/mesh/blockMesh/curvedEdges/curvedEdge.H +++ b/src/mesh/blockMesh/curvedEdges/curvedEdge.H @@ -26,8 +26,8 @@ Class Foam::curvedEdge Description - Define a curved edge in space that is parameterised for - 0 1) { @@ -71,13 +71,13 @@ Foam::vector Foam::lineEdge::position(const scalar lambda) const << abort(FatalError); } - return startPoint_ + lambda*direction_; + return points_[start_] + lambda * (points_[end_] - points_[start_]); } Foam::scalar Foam::lineEdge::length() const { - return mag(direction_); + return mag(points_[end_] - points_[start_]); } diff --git a/src/mesh/blockMesh/curvedEdges/lineEdge.H b/src/mesh/blockMesh/curvedEdges/lineEdge.H index a601830f7f..3d29591232 100644 --- a/src/mesh/blockMesh/curvedEdges/lineEdge.H +++ b/src/mesh/blockMesh/curvedEdges/lineEdge.H @@ -26,7 +26,7 @@ Class Foam::lineEdge Description - Defines a straight line between the start point and the end point. + A straight edge between the start point and the end point. SourceFiles lineEdge.C @@ -52,14 +52,6 @@ class lineEdge : public curvedEdge { - // Private data - - //- Avoid repetitive calculation of the start point - const vector startPoint_; - - //- Avoid repetitive calculation of the direction (end - start) - const vector direction_; - // Private Member Functions //- Disallow default bitwise copy construct @@ -68,7 +60,6 @@ class lineEdge //- Disallow default bitwise assignment void operator=(const lineEdge&); - public: //- Runtime type information @@ -79,20 +70,19 @@ public: //- Construct from components lineEdge(const pointField&, const label start, const label end); - //- Construct from Istream setting pointsList + //- Construct from Istream with a pointField lineEdge(const pointField&, Istream&); - // Destructor - - virtual ~lineEdge(){} + //- Destructor + virtual ~lineEdge(); // Member Functions - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/polyLine.C b/src/mesh/blockMesh/curvedEdges/polyLine.C index a08ab8fc40..08083041f2 100644 --- a/src/mesh/blockMesh/curvedEdges/polyLine.C +++ b/src/mesh/blockMesh/curvedEdges/polyLine.C @@ -29,29 +29,26 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// calcDistances generates the distances_ lookup table (cumulative -// distance along the line) from the individual vectors to the points - -void Foam::polyLine::calcDistances() +void Foam::polyLine::calcParam() { - distances_.setSize(controlPoints_.size()); + param_.setSize(points_.size()); - if (distances_.size()) + if (param_.size()) { - distances_[0] = 0.0; + param_[0] = 0.0; - for (label i=1; i 1) + { + FatalErrorIn("polyLine::localParameter(scalar&)") + << "Parameter out-of-range, " + << "lambda = " << lambda + << abort(FatalError); + } + // check endpoints + if (lambda < SMALL) + { + lambda = 0; + return 0; + } + else if (lambda > 1 - SMALL) + { + lambda = 1; + return nSegments(); + } + + // search table of cumulative distances to find which line-segment + // we are on. Check the upper bound. + + label segmentI = 1; + while (param_[segmentI] < lambda) + { + segmentI++; + } + segmentI--; // we want the corresponding lower bound + + // the local parameter [0-1] on this line segment + lambda = + ( + ( lambda - param_[segmentI] ) + / ( param_[segmentI+1] - param_[segmentI] ) + ); + + return segmentI; +} + + +Foam::point Foam::polyLine::position(const scalar lambda) const +{ + // check range of lambda if (lambda < 0 || lambda > 1) { FatalErrorIn("polyLine::position(const scalar)") @@ -87,37 +139,36 @@ Foam::vector Foam::polyLine::position(const scalar lambda) const << abort(FatalError); } - // Quick calc of endpoints - + // check endpoints if (lambda < SMALL) { - return controlPoints_[0]; + return points_[0]; } else if (lambda > 1 - SMALL) { - return controlPoints_.last(); + return points_.last(); } - // search table of cumulative distance to find which linesegment we - // are on + // search table of cumulative distances to find which line-segment + // we are on. Check the upper bound. - label i(0); - do + label segmentI = 1; + while (param_[segmentI] < lambda) { - i++; - } while (distances_[i] < lambda); + ++segmentI; + } + --segmentI; // we now want the lower bound - i--; // we overshot! - // construct position vector - scalar offsetDist = - (lambda - distances_[i]) - /(distances_[i+1] - distances_[i]); - - vector offsetV = controlPoints_[i+1] - controlPoints_[i]; - - return controlPoints_[i] + offsetDist*offsetV; + // linear interpolation + return + ( + points_[segmentI] + + ( points_[segmentI+1] - points_[segmentI] ) + * ( lambda - param_[segmentI] ) + / ( param_[segmentI+1] - param_[segmentI] ) + ); } diff --git a/src/mesh/blockMesh/curvedEdges/polyLine.H b/src/mesh/blockMesh/curvedEdges/polyLine.H index 4ef97f3052..ea8c59e389 100644 --- a/src/mesh/blockMesh/curvedEdges/polyLine.H +++ b/src/mesh/blockMesh/curvedEdges/polyLine.H @@ -26,10 +26,8 @@ Class Foam::polyLine Description - Defines a curvedEdge in terms of a series of straight line segments. - - This is the basic polyLine class which implements just the line - (no topology - it is not derived from curvedEdge) + A series of straight line segments, which can also be interpreted as + a series of control points for splines, etc. SourceFiles polyLine.C @@ -66,15 +64,26 @@ protected: // Protected data - pointField controlPoints_; - scalarList distances_; + //- The control points or ends of each segments + pointField points_; + + //- The real line length scalar lineLength_; + //- The rational (0-1) cumulative parameter value for each point + scalarList param_; + // Protected member functions - void calcDistances(); + //- Precalculate the rational cumulative parameter value + // and the line-length + void calcParam(); + //- Return the line segment and the local parameter [0..1] + // corresponding to the global lambda [0..1] + label localParameter(scalar& lambda) const; + public: // Constructors @@ -85,9 +94,15 @@ public: // Member Functions - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar) const; + //- Return const-access to the control-points + const pointField& points() const; + + //- Return the number of line segments + label nSegments() const; + + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/polyLineEdge.C b/src/mesh/blockMesh/curvedEdges/polyLineEdge.C index 89029d1af9..1f038a78a8 100644 --- a/src/mesh/blockMesh/curvedEdges/polyLineEdge.C +++ b/src/mesh/blockMesh/curvedEdges/polyLineEdge.C @@ -44,24 +44,30 @@ Foam::polyLineEdge::polyLineEdge const pointField& ps, const label start, const label end, - const pointField& otherpoints + const pointField& otherPoints ) : curvedEdge(ps, start, end), - polyLine(knotlist(ps, start, end, otherpoints)) + polyLine(appendEndPoints(ps, start_, end_, otherPoints)) {} Foam::polyLineEdge::polyLineEdge(const pointField& ps, Istream& is) : curvedEdge(ps, is), - polyLine(knotlist(ps, start_, end_, pointField(is))) + polyLine(appendEndPoints(ps, start_, end_, pointField(is))) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::polyLineEdge::~polyLineEdge() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::polyLineEdge::position(const scalar lambda) const +Foam::point Foam::polyLineEdge::position(const scalar lambda) const { return polyLine::position(lambda); } diff --git a/src/mesh/blockMesh/curvedEdges/polyLineEdge.H b/src/mesh/blockMesh/curvedEdges/polyLineEdge.H index 532a91ad5d..e941bba716 100644 --- a/src/mesh/blockMesh/curvedEdges/polyLineEdge.H +++ b/src/mesh/blockMesh/curvedEdges/polyLineEdge.H @@ -26,8 +26,7 @@ Class Foam::polyLineEdge Description - Defines a curvedEdge in terms of a series of straight line segments. - This is the public face of polyLine + A curvedEdge defined in terms of a series of straight line segments. SourceFiles polyLineEdge.C @@ -84,16 +83,15 @@ public: polyLineEdge(const pointField&, Istream&); - // Destructor - - virtual ~polyLineEdge(){} + //- Destructor + virtual ~polyLineEdge(); // Member Functions - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar lambda) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar lambda) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/splineEdge.C b/src/mesh/blockMesh/curvedEdges/splineEdge.C new file mode 100644 index 0000000000..6c5df771a9 --- /dev/null +++ b/src/mesh/blockMesh/curvedEdges/splineEdge.C @@ -0,0 +1,86 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "splineEdge.H" +#include "addToRunTimeSelectionTable.H" + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(splineEdge, 0); + addToRunTimeSelectionTable(curvedEdge, splineEdge, Istream); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::splineEdge::splineEdge +( + const pointField& points, + const label start, + const label end, + const pointField& otherknots +) +: + curvedEdge(points, start, end), + CatmullRomSpline(appendEndPoints(points, start, end, otherknots)) +{} + + +Foam::splineEdge::splineEdge(const pointField& points, Istream& is) +: + curvedEdge(points, is), + CatmullRomSpline(appendEndPoints(points, start_, end_, pointField(is))) +{ + token t(is); + is.putBack(t); + + // might have start/end tangents that we currently ignore + if (t == token::BEGIN_LIST) + { + vector fstend(is); + vector sndend(is); + } +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::point Foam::splineEdge::position(const scalar mu) const +{ + return CatmullRomSpline::position(mu); +} + + +Foam::scalar Foam::splineEdge::length() const +{ + return CatmullRomSpline::length(); +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/curvedEdges/splineEdge.H b/src/mesh/blockMesh/curvedEdges/splineEdge.H new file mode 100644 index 0000000000..c1ad9f5f76 --- /dev/null +++ b/src/mesh/blockMesh/curvedEdges/splineEdge.H @@ -0,0 +1,111 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::splineEdge + +Description + A curvedEdge interface for Catmull-Rom splines. + +SourceFiles + splineEdge.C + +\*---------------------------------------------------------------------------*/ + +#ifndef splineEdge_H +#define splineEdge_H + +#include "curvedEdge.H" +#include "CatmullRomSpline.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class splineEdge Declaration +\*---------------------------------------------------------------------------*/ + +class splineEdge +: + public curvedEdge, + public CatmullRomSpline +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + splineEdge(const splineEdge&); + + //- Disallow default bitwise assignment + void operator=(const splineEdge&); + + +public: + + //- Runtime type information + TypeName("spline"); + + + // Constructors + + //- Construct from components + splineEdge + ( + const pointField&, + const label start, + const label end, + const pointField& otherKnots + ); + + //- Construct from Istream setting pointsList + splineEdge(const pointField&, Istream&); + + + // Destructor + + virtual ~splineEdge() + {} + + + // Member Functions + + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + virtual point position(const scalar) const; + + //- Return the length of the simple spline curve + virtual scalar length() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //