Merge commit 'bundle/home' into olesenm

This commit is contained in:
Mark Olesen
2009-11-30 08:12:04 +01:00
54 changed files with 1519 additions and 674 deletions

View File

@ -16,6 +16,17 @@
</Documentation> </Documentation>
</StringVectorProperty> </StringVectorProperty>
<!-- Send discrete time info to the animation panel -->
<DoubleVectorProperty
name="TimestepValues"
repeatable="1"
information_only="1">
<TimeStepsInformationHelper/>
<Documentation>
Available timestep values.
</Documentation>
</DoubleVectorProperty>
<!-- Cache Mesh check-box --> <!-- Cache Mesh check-box -->
<IntVectorProperty <IntVectorProperty
name="UiCacheMesh" name="UiCacheMesh"
@ -30,20 +41,33 @@
</Documentation> </Documentation>
</IntVectorProperty> </IntVectorProperty>
<!-- Refresh button -->
<!-- Send discrete time info to the animation panel --> <IntVectorProperty
<DoubleVectorProperty name="UiRefresh"
name="TimestepValues" command="SetRefresh"
repeatable="1" number_of_elements="1"
information_only="1"> is_internal="0"
<TimeStepsInformationHelper/> default_values="0"
animateable="0">
<BooleanDomain name="bool"/>
<Documentation> <Documentation>
Available timestep values. Rescan for updated timesteps/fields.
</Documentation> </Documentation>
</DoubleVectorProperty> </IntVectorProperty>
<!-- Skip Zero Time check-box -->
<!-- Global settings --> <IntVectorProperty
name="UiZeroTime"
command="SetSkipZeroTime"
number_of_elements="1"
is_internal="1"
default_values="0"
animateable="0">
<BooleanDomain name="bool"/>
<Documentation>
Skip including the 0/ time directory
</Documentation>
</IntVectorProperty>
<!-- Extrapolate Patches check-box --> <!-- Extrapolate Patches check-box -->
<IntVectorProperty <IntVectorProperty
@ -60,22 +84,24 @@
<!-- Include Sets check-box --> <!-- Include Sets check-box -->
<IntVectorProperty <IntVectorProperty
name="IncludeSets" name="UiIncludeSets"
command="SetIncludeSets" command="SetIncludeSets"
number_of_elements="1" number_of_elements="1"
is_internal="1"
default_values="0" default_values="0"
animateable="0"> animateable="0">
<Documentation> <Documentation>
Searches the polyMesh/sets/ directory Search the polyMesh/sets/ directory
</Documentation> </Documentation>
<BooleanDomain name="bool"/> <BooleanDomain name="bool"/>
</IntVectorProperty> </IntVectorProperty>
<!-- Include Zones check-box --> <!-- Include Zones check-box -->
<IntVectorProperty <IntVectorProperty
name="IncludeZones" name="UiIncludeZones"
command="SetIncludeZones" command="SetIncludeZones"
number_of_elements="1" number_of_elements="1"
is_internal="1"
default_values="0" default_values="0"
animateable="0"> animateable="0">
<Documentation> <Documentation>
@ -95,7 +121,7 @@
animateable="0"> animateable="0">
<BooleanDomain name="bool"/> <BooleanDomain name="bool"/>
<Documentation> <Documentation>
Show patch names in render window. Show patch names in render window
</Documentation> </Documentation>
</IntVectorProperty> </IntVectorProperty>
@ -112,12 +138,13 @@
</Documentation> </Documentation>
</IntVectorProperty> </IntVectorProperty>
<!--
<!-- Selections --> | Selections
-->
<!-- Available Parts (volume, patches, lagrangian) array --> <!-- Available Parts (volume, patches, lagrangian) array -->
<StringVectorProperty <StringVectorProperty
name="PartArrayInfo" name="PartArrayStatus"
information_only="1"> information_only="1">
<ArraySelectionInformationHelper attribute_name="Part"/> <ArraySelectionInformationHelper attribute_name="Part"/>
</StringVectorProperty> </StringVectorProperty>
@ -129,18 +156,21 @@
repeat_command="1" repeat_command="1"
number_of_elements_per_command="2" number_of_elements_per_command="2"
element_types="2 0" element_types="2 0"
information_property="PartArrayInfo" information_property="PartArrayStatus"
animateable="0"> animateable="0">
<ArraySelectionDomain name="array_list"> <ArraySelectionDomain name="array_list">
<RequiredProperties> <RequiredProperties>
<Property name="PartArrayInfo" function="ArrayList"/> <Property name="PartArrayStatus" function="ArrayList"/>
</RequiredProperties> </RequiredProperties>
</ArraySelectionDomain> </ArraySelectionDomain>
<Documentation>
This property contains a list of the mesh parts (patches, sets, zones).
</Documentation>
</StringVectorProperty> </StringVectorProperty>
<!-- Available volFields array --> <!-- Available volFields array -->
<StringVectorProperty <StringVectorProperty
name="VolFieldArrayInfo" name="VolFieldArrayStatus"
information_only="1"> information_only="1">
<ArraySelectionInformationHelper attribute_name="VolField"/> <ArraySelectionInformationHelper attribute_name="VolField"/>
</StringVectorProperty> </StringVectorProperty>
@ -152,18 +182,21 @@
repeat_command="1" repeat_command="1"
number_of_elements_per_command="2" number_of_elements_per_command="2"
element_types="2 0" element_types="2 0"
information_property="VolFieldArrayInfo" information_property="VolFieldArrayStatus"
animateable="0"> animateable="0">
<ArraySelectionDomain name="array_list"> <ArraySelectionDomain name="array_list">
<RequiredProperties> <RequiredProperties>
<Property name="VolFieldArrayInfo" function="ArrayList"/> <Property name="VolFieldArrayStatus" function="ArrayList"/>
</RequiredProperties> </RequiredProperties>
</ArraySelectionDomain> </ArraySelectionDomain>
<Documentation>
This property contains a list of the volume fields
</Documentation>
</StringVectorProperty> </StringVectorProperty>
<!-- Available Lagrangian fields array --> <!-- Available Lagrangian fields array -->
<StringVectorProperty <StringVectorProperty
name="LagrangianFieldArrayInfo" name="LagrangianFieldArrayStatus"
information_only="1"> information_only="1">
<ArraySelectionInformationHelper attribute_name="LagrangianField"/> <ArraySelectionInformationHelper attribute_name="LagrangianField"/>
</StringVectorProperty> </StringVectorProperty>
@ -175,18 +208,21 @@
repeat_command="1" repeat_command="1"
number_of_elements_per_command="2" number_of_elements_per_command="2"
element_types="2 0" element_types="2 0"
information_property="LagrangianFieldArrayInfo" information_property="LagrangianFieldArrayStatus"
animateable="0"> animateable="0">
<ArraySelectionDomain name="array_list"> <ArraySelectionDomain name="array_list">
<RequiredProperties> <RequiredProperties>
<Property name="LagrangianFieldArrayInfo" function="ArrayList"/> <Property name="LagrangianFieldArrayStatus" function="ArrayList"/>
</RequiredProperties> </RequiredProperties>
</ArraySelectionDomain> </ArraySelectionDomain>
<Documentation>
This property contains a list of the lagrangian fields
</Documentation>
</StringVectorProperty> </StringVectorProperty>
<!-- Available pointFields array --> <!-- Available pointFields array -->
<StringVectorProperty <StringVectorProperty
name="PointFieldArrayInfo" name="PointFieldArrayStatus"
information_only="1"> information_only="1">
<ArraySelectionInformationHelper attribute_name="PointField"/> <ArraySelectionInformationHelper attribute_name="PointField"/>
</StringVectorProperty> </StringVectorProperty>
@ -198,19 +234,26 @@
repeat_command="1" repeat_command="1"
number_of_elements_per_command="2" number_of_elements_per_command="2"
element_types="2 0" element_types="2 0"
information_property="PointFieldArrayInfo" information_property="PointFieldArrayStatus"
animateable="0"> animateable="0">
<ArraySelectionDomain name="array_list"> <ArraySelectionDomain name="array_list">
<RequiredProperties> <RequiredProperties>
<Property name="PointFieldArrayInfo" function="ArrayList"/> <Property name="PointFieldArrayStatus" function="ArrayList"/>
</RequiredProperties> </RequiredProperties>
</ArraySelectionDomain> </ArraySelectionDomain>
<Documentation>
This property contains a list of the point fields
</Documentation>
</StringVectorProperty> </StringVectorProperty>
<Hints> <Hints>
<Property name="FileName" show="0"/> <Property name="FileName" show="0"/>
<Property name="UiCacheMesh" show="0"/> <Property name="UiCacheMesh" show="0"/>
<Property name="UiZeroTime" show="0"/>
<Property name="UiRefresh" show="0"/>
<Property name="UiShowPatchNames" show="0"/> <Property name="UiShowPatchNames" show="0"/>
<Property name="UiIncludeSets" show="0"/>
<Property name="UiIncludeZones" show="0"/>
</Hints> </Hints>

View File

@ -32,9 +32,10 @@ License
#include <QLabel> #include <QLabel>
#include <QLayout> #include <QLayout>
#include <QString> #include <QString>
#include <QPushButton>
#include <QtDebug> #include <QtDebug>
// Paraview<->QT UI // Paraview <-> QT UI
#include "pqAnimationScene.h" #include "pqAnimationScene.h"
#include "pqApplicationCore.h" #include "pqApplicationCore.h"
#include "pqPipelineRepresentation.h" #include "pqPipelineRepresentation.h"
@ -56,51 +57,169 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel
QWidget *p QWidget *p
) )
: :
pqAutoGeneratedObjectPanel(proxy, p), pqAutoGeneratedObjectPanel(proxy, p)
sourceProxy_(vtkSMSourceProxy::SafeDownCast(this->proxy()))
{ {
// create first sublayout (at top of the panel) // create first sublayout (at top of the panel)
QGridLayout *sect1 = new QGridLayout(); QGridLayout *form = new QGridLayout();
this->PanelLayout->addLayout(sect1, 0, 0, 1, -1); 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 // checkbox for caching mesh
CacheMesh_ = new QCheckBox("Cache Mesh"); if ((prop = this->proxy()->GetProperty("UiCacheMesh")) != 0)
CacheMesh_->setChecked(true); {
// immediate update on the Server Manager side
prop->SetImmediateUpdate(true);
// checkbox for caching mesh CacheMesh_ = new QCheckBox("Cache Mesh");
ShowPatchNames_ = new QCheckBox("Show Patch Names"); CacheMesh_->setChecked
ShowPatchNames_->setChecked(false); (
vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0)
);
CacheMesh_->setToolTip
(
"Cache the fvMesh in memory."
);
connect form->addWidget(CacheMesh_, 1, 0, Qt::AlignLeft);
( connect
CacheMesh_, (
SIGNAL(stateChanged(int)), CacheMesh_,
this, SIGNAL(stateChanged(int)),
SLOT(CacheMeshToggled()) this,
); SLOT(CacheMeshToggled())
);
connect }
(
ShowPatchNames_,
SIGNAL(stateChanged(int)),
this,
SLOT(ShowPatchNamesToggled())
);
sect1->addWidget(CacheMesh_);
sect1->addWidget(ShowPatchNames_);
// immediate update on the Server Manager side // checkbox for patch names
vtkSMIntVectorProperty::SafeDownCast if ((prop = this->proxy()->GetProperty("UiShowPatchNames")) != 0)
( {
sourceProxy_->GetProperty("UiCacheMesh") // immediate update on the Server Manager side
)->SetImmediateUpdate(true); prop->SetImmediateUpdate(true);
vtkSMIntVectorProperty::SafeDownCast
( ShowPatchNames_ = new QCheckBox("Patch Names");
sourceProxy_->GetProperty("UiShowPatchNames") ShowPatchNames_->setChecked
)->SetImmediateUpdate(true); (
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 vtkSMIntVectorProperty::SafeDownCast
( (
sourceProxy_->GetProperty("UiCacheMesh") this->proxy()->GetProperty("UiCacheMesh")
)->SetElement(0, CacheMesh_->isChecked()); )->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() void pqPV3FoamReaderPanel::ShowPatchNamesToggled()
{ {
vtkSMIntVectorProperty::SafeDownCast vtkSMIntVectorProperty::SafeDownCast
( (
sourceProxy_->GetProperty("UiShowPatchNames") this->proxy()->GetProperty("UiShowPatchNames")
)->SetElement(0, ShowPatchNames_->isChecked()); )->SetElement(0, ShowPatchNames_->isChecked());
// update the active view // 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);
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -37,6 +37,7 @@ SourceFiles
#ifndef pqPV3FoamReaderPanel_h #ifndef pqPV3FoamReaderPanel_h
#define pqPV3FoamReaderPanel_h #define pqPV3FoamReaderPanel_h
#include "pqAutoGeneratedObjectPanel.h" #include "pqAutoGeneratedObjectPanel.h"
// Forward declaration of QT classes // Forward declaration of QT classes
@ -62,8 +63,8 @@ class pqPV3FoamReaderPanel
Q_OBJECT; Q_OBJECT;
typedef pqAutoGeneratedObjectPanel Superclass; typedef pqAutoGeneratedObjectPanel Superclass;
//- Server Manager Source Proxy //- ZeroTime checkbox
vtkSMSourceProxy* sourceProxy_; QCheckBox* ZeroTime_;
//- CacheMesh checkbox //- CacheMesh checkbox
QCheckBox* CacheMesh_; QCheckBox* CacheMesh_;
@ -71,10 +72,20 @@ class pqPV3FoamReaderPanel
//- Show Patch Names checkbox //- Show Patch Names checkbox
QCheckBox* ShowPatchNames_; QCheckBox* ShowPatchNames_;
//- IncludeSets checkbox
QCheckBox* IncludeSets_;
//- IncludeZones checkbox
QCheckBox* IncludeZones_;
protected slots: protected slots:
void CacheMeshToggled(); void CacheMeshToggled();
void ZeroTimeToggled();
void RefreshPressed();
void ShowPatchNamesToggled(); void ShowPatchNamesToggled();
void IncludeSetsToggled();
void IncludeZonesToggled();
public: public:

View File

@ -79,7 +79,9 @@ vtkPV3FoamReader::vtkPV3FoamReader()
TimeStepRange[1] = 0; TimeStepRange[1] = 0;
CacheMesh = 1; CacheMesh = 1;
Refresh = 0;
SkipZeroTime = 0;
ExtrapolatePatches = 0; ExtrapolatePatches = 0;
IncludeSets = 0; IncludeSets = 0;
IncludeZones = 0; IncludeZones = 0;
@ -336,7 +338,6 @@ int vtkPV3FoamReader::RequestData
foamData_->setTime(nRequestTime, requestTime); foamData_->setTime(nRequestTime, requestTime);
} }
vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::SafeDownCast vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::SafeDownCast
( (
outputVector->GetInformationObject(0)->Get 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) if (ShowPatchNames != val)
{ {
@ -430,7 +463,6 @@ void vtkPV3FoamReader::SetShowPatchNames(const int val)
} }
void vtkPV3FoamReader::updatePatchNamesView(const bool show) void vtkPV3FoamReader::updatePatchNamesView(const bool show)
{ {
pqApplicationCore* appCore = pqApplicationCore::instance(); pqApplicationCore* appCore = pqApplicationCore::instance();
@ -452,7 +484,7 @@ void vtkPV3FoamReader::updatePatchNamesView(const bool show)
// Get all the pqRenderView instances // Get all the pqRenderView instances
QList<pqRenderView*> renderViews = smModel->findItems<pqRenderView*>(); QList<pqRenderView*> renderViews = smModel->findItems<pqRenderView*>();
for (int viewI=0; viewI<renderViews.size(); viewI++) for (int viewI=0; viewI < renderViews.size(); ++viewI)
{ {
foamData_->renderPatchNames foamData_->renderPatchNames
( (
@ -521,7 +553,8 @@ int vtkPV3FoamReader::GetPartArrayStatus(const char* name)
void vtkPV3FoamReader::SetPartArrayStatus(const char* name, int status) void vtkPV3FoamReader::SetPartArrayStatus(const char* name, int status)
{ {
vtkDebugMacro(<<"SetPartArrayStatus"); vtkDebugMacro("Set mesh part \"" << name << "\" status to: " << status);
if (status) if (status)
{ {
PartSelection->EnableArray(name); PartSelection->EnableArray(name);

View File

@ -83,6 +83,15 @@ public:
vtkSetMacro(CacheMesh, int); vtkSetMacro(CacheMesh, int);
vtkGetMacro(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: // Description:
// GUI update control // GUI update control
vtkSetMacro(UpdateGUI, int); vtkSetMacro(UpdateGUI, int);
@ -93,13 +102,14 @@ public:
vtkSetMacro(ExtrapolatePatches, int); vtkSetMacro(ExtrapolatePatches, int);
vtkGetMacro(ExtrapolatePatches, int); vtkGetMacro(ExtrapolatePatches, int);
// Description:
// FOAM read sets control // FOAM read sets control
vtkSetMacro(IncludeSets, int); virtual void SetIncludeSets(int);
vtkGetMacro(IncludeSets, int); vtkGetMacro(IncludeSets, int);
// Description: // Description:
// FOAM read zones control // FOAM read zones control
vtkSetMacro(IncludeZones, int); virtual void SetIncludeZones(int);
vtkGetMacro(IncludeZones, int); vtkGetMacro(IncludeZones, int);
// Description: // Description:
@ -113,7 +123,7 @@ public:
// Description: // Description:
// Parts selection list control // Parts selection list control
vtkDataArraySelection* GetPartSelection(); virtual vtkDataArraySelection* GetPartSelection();
int GetNumberOfPartArrays(); int GetNumberOfPartArrays();
int GetPartArrayStatus(const char* name); int GetPartArrayStatus(const char* name);
void SetPartArrayStatus(const char* name, int status); void SetPartArrayStatus(const char* name, int status);
@ -121,7 +131,7 @@ public:
// Description: // Description:
// volField selection list control // volField selection list control
vtkDataArraySelection* GetVolFieldSelection(); virtual vtkDataArraySelection* GetVolFieldSelection();
int GetNumberOfVolFieldArrays(); int GetNumberOfVolFieldArrays();
int GetVolFieldArrayStatus(const char* name); int GetVolFieldArrayStatus(const char* name);
void SetVolFieldArrayStatus(const char* name, int status); void SetVolFieldArrayStatus(const char* name, int status);
@ -129,7 +139,7 @@ public:
// Description: // Description:
// pointField selection list control // pointField selection list control
vtkDataArraySelection* GetPointFieldSelection(); virtual vtkDataArraySelection* GetPointFieldSelection();
int GetNumberOfPointFieldArrays(); int GetNumberOfPointFieldArrays();
int GetPointFieldArrayStatus(const char* name); int GetPointFieldArrayStatus(const char* name);
void SetPointFieldArrayStatus(const char* name, int status); void SetPointFieldArrayStatus(const char* name, int status);
@ -137,7 +147,7 @@ public:
// Description: // Description:
// lagrangianField selection list control // lagrangianField selection list control
vtkDataArraySelection* GetLagrangianFieldSelection(); virtual vtkDataArraySelection* GetLagrangianFieldSelection();
int GetNumberOfLagrangianFieldArrays(); int GetNumberOfLagrangianFieldArrays();
int GetLagrangianFieldArrayStatus(const char* name); int GetLagrangianFieldArrayStatus(const char* name);
void SetLagrangianFieldArrayStatus(const char* name, int status); void SetLagrangianFieldArrayStatus(const char* name, int status);
@ -156,7 +166,6 @@ public:
void SelectionModified(); void SelectionModified();
protected: protected:
//- Construct null //- Construct null
@ -185,9 +194,10 @@ protected:
//- Fill in additional port information //- Fill in additional port information
virtual int FillOutputPortInformation(int, vtkInformation*); 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; vtkCallbackCommand* SelectionObserver;
//- The file name for this case
char* FileName; char* FileName;
private: private:
@ -202,14 +212,16 @@ private:
void updatePatchNamesView(const bool show); void updatePatchNamesView(const bool show);
int TimeStepRange[2]; int TimeStepRange[2];
int Refresh;
int CacheMesh; int CacheMesh;
int SkipZeroTime;
int ExtrapolatePatches; int ExtrapolatePatches;
int IncludeSets; int IncludeSets;
int IncludeZones; int IncludeZones;
int ShowPatchNames; int ShowPatchNames;
//- Dummy variable/switch for invoke a reader update //- Dummy variable/switch to invoke a reader update
int UpdateGUI; int UpdateGUI;
vtkDataArraySelection* PartSelection; vtkDataArraySelection* PartSelection;

View File

@ -50,16 +50,16 @@ defineTypeNameAndDebug(Foam::vtkPV3Foam, 0);
void Foam::vtkPV3Foam::resetCounters() void Foam::vtkPV3Foam::resetCounters()
{ {
// Reset mesh part ids and sizes // Reset array range information (ids and sizes)
partInfoVolume_.reset(); arrayRangeVolume_.reset();
partInfoPatches_.reset(); arrayRangePatches_.reset();
partInfoLagrangian_.reset(); arrayRangeLagrangian_.reset();
partInfoCellZones_.reset(); arrayRangeCellZones_.reset();
partInfoFaceZones_.reset(); arrayRangeFaceZones_.reset();
partInfoPointZones_.reset(); arrayRangePointZones_.reset();
partInfoCellSets_.reset(); arrayRangeCellSets_.reset();
partInfoFaceSets_.reset(); arrayRangeFaceSets_.reset();
partInfoPointSets_.reset(); arrayRangePointSets_.reset();
} }
@ -92,21 +92,6 @@ void Foam::vtkPV3Foam::reduceMemory()
int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[]) int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[])
{ {
if (debug)
{
Info<< "<beg> Foam::vtkPV3Foam::setTime(";
for (int requestI = 0; requestI < nRequest; ++requestI)
{
if (requestI)
{
Info<< ", ";
}
Info<< requestTimes[requestI];
}
Info<< ") - previousIndex = " << timeIndex_ << endl;
}
Time& runTime = dbPtr_(); Time& runTime = dbPtr_();
// Get times list // Get times list
@ -128,6 +113,22 @@ int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[])
nearestIndex = 0; nearestIndex = 0;
} }
if (debug)
{
Info<< "<beg> 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 // see what has changed
if (timeIndex_ != nearestIndex) if (timeIndex_ != nearestIndex)
@ -230,15 +231,15 @@ Foam::vtkPV3Foam::vtkPV3Foam
timeIndex_(-1), timeIndex_(-1),
meshChanged_(true), meshChanged_(true),
fieldsChanged_(true), fieldsChanged_(true),
partInfoVolume_("unzoned"), arrayRangeVolume_("unzoned"),
partInfoPatches_("patches"), arrayRangePatches_("patches"),
partInfoLagrangian_("lagrangian"), arrayRangeLagrangian_("lagrangian"),
partInfoCellZones_("cellZone"), arrayRangeCellZones_("cellZone"),
partInfoFaceZones_("faceZone"), arrayRangeFaceZones_("faceZone"),
partInfoPointZones_("pointZone"), arrayRangePointZones_("pointZone"),
partInfoCellSets_("cellSet"), arrayRangeCellSets_("cellSet"),
partInfoFaceSets_("faceSet"), arrayRangeFaceSets_("faceSet"),
partInfoPointSets_("pointSet") arrayRangePointSets_("pointSet")
{ {
if (debug) if (debug)
{ {
@ -288,7 +289,7 @@ Foam::vtkPV3Foam::vtkPV3Foam
meshRegion_ = caseName.substr(beg+1, end-beg-1); meshRegion_ = caseName.substr(beg+1, end-beg-1);
// some safety // some safety
if (!meshRegion_.size()) if (meshRegion_.empty())
{ {
meshRegion_ = polyMesh::defaultRegion; meshRegion_ = polyMesh::defaultRegion;
} }
@ -352,6 +353,14 @@ void Foam::vtkPV3Foam::updateInfo()
vtkDataArraySelection* partSelection = reader_->GetPartSelection(); 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 // enable 'internalMesh' on the first call
// or preserve the enabled selections // or preserve the enabled selections
stringList enabledEntries; stringList enabledEntries;
@ -369,11 +378,11 @@ void Foam::vtkPV3Foam::updateInfo()
partSelection->RemoveAllArrays(); partSelection->RemoveAllArrays();
// Update mesh parts list - add Lagrangian at the bottom // Update mesh parts list - add Lagrangian at the bottom
updateInfoInternalMesh(); updateInfoInternalMesh(partSelection);
updateInfoPatches(); updateInfoPatches(partSelection);
updateInfoSets(); updateInfoSets(partSelection);
updateInfoZones(); updateInfoZones(partSelection);
updateInfoLagrangian(); updateInfoLagrangian(partSelection);
// restore the enabled selections // restore the enabled selections
setSelectedArrayEntries(partSelection, enabledEntries); setSelectedArrayEntries(partSelection, enabledEntries);
@ -396,6 +405,8 @@ void Foam::vtkPV3Foam::updateInfo()
if (debug) if (debug)
{ {
// just for debug info
getSelectedArrayEntries(partSelection);
Info<< "<end> Foam::vtkPV3Foam::updateInfo" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInfo" << endl;
} }
@ -559,11 +570,25 @@ double* Foam::vtkPV3Foam::findTimes(int& nTimeSteps)
nTimes = timeLst.size() - timeI; nTimes = timeLst.size() - timeI;
// always skip "constant" time if possible // skip "constant" time whenever possible
if (timeI == 0 && nTimes > 1) if (timeI == 0 && nTimes > 1)
{ {
timeI = 1; if (timeLst[timeI].name() == "constant")
--nTimes; {
++timeI;
--nTimes;
}
}
// skip "0/" time if requested and possible
if (nTimes > 1 && reader_->GetSkipZeroTime())
{
if (mag(timeLst[timeI].value()) < SMALL)
{
++timeI;
--nTimes;
}
} }
if (nTimes) if (nTimes)
@ -607,10 +632,10 @@ void Foam::vtkPV3Foam::renderPatchNames(vtkRenderer* renderer, const bool show)
wordHashSet selectedPatches = getSelected wordHashSet selectedPatches = getSelected
( (
reader_->GetPartSelection(), reader_->GetPartSelection(),
partInfoPatches_ arrayRangePatches_
); );
if (!selectedPatches.size()) if (selectedPatches.empty())
{ {
return; return;
} }

View File

@ -111,7 +111,7 @@ class vtkPV3Foam
// Private classes // Private classes
//- Bookkeeping for GUI checklists and the multi-block organization //- Bookkeeping for GUI checklists and the multi-block organization
class partInfo class arrayRange
{ {
const char *name_; const char *name_;
int block_; int block_;
@ -120,11 +120,11 @@ class vtkPV3Foam
public: public:
partInfo(const char *name, const int blockNo=0) arrayRange(const char *name, const int blockNo=0)
: :
name_(name), name_(name),
block_(blockNo), block_(blockNo),
start_(-1), start_(0),
size_(0) size_(0)
{} {}
@ -142,21 +142,25 @@ class vtkPV3Foam
return prev; return prev;
} }
//- Return block name
const char* name() const const char* name() const
{ {
return name_; return name_;
} }
//- Return array start index
int start() const int start() const
{ {
return start_; return start_;
} }
//- Return array end index
int end() const int end() const
{ {
return start_ + size_; return start_ + size_;
} }
//- Return sublist size
int size() const int size() const
{ {
return size_; return size_;
@ -167,16 +171,10 @@ class vtkPV3Foam
return !size_; return !size_;
} }
void reset() //- Reset the size to zero and optionally assign a new start
void reset(const int startAt = 0)
{ {
start_ = -1; start_ = startAt;
size_ = 0;
}
//- Assign new start and reset the size
void operator=(const int i)
{
start_ = i;
size_ = 0; size_ = 0;
} }
@ -282,15 +280,15 @@ class vtkPV3Foam
//- First instance and size of various mesh parts //- First instance and size of various mesh parts
// used to index into partStatus_ and partDataset_ // used to index into partStatus_ and partDataset_
partInfo partInfoVolume_; arrayRange arrayRangeVolume_;
partInfo partInfoPatches_; arrayRange arrayRangePatches_;
partInfo partInfoLagrangian_; arrayRange arrayRangeLagrangian_;
partInfo partInfoCellZones_; arrayRange arrayRangeCellZones_;
partInfo partInfoFaceZones_; arrayRange arrayRangeFaceZones_;
partInfo partInfoPointZones_; arrayRange arrayRangePointZones_;
partInfo partInfoCellSets_; arrayRange arrayRangeCellSets_;
partInfo partInfoFaceSets_; arrayRange arrayRangeFaceSets_;
partInfo partInfoPointSets_; arrayRange arrayRangePointSets_;
//- Decomposed cells information (mesh regions) //- Decomposed cells information (mesh regions)
// TODO: regions // TODO: regions
@ -313,7 +311,7 @@ class vtkPV3Foam
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
vtkDataSet* dataset, vtkDataSet* dataset,
const partInfo&, const arrayRange&,
const label datasetNo, const label datasetNo,
const std::string& datasetName const std::string& datasetName
); );
@ -323,7 +321,7 @@ class vtkPV3Foam
static vtkDataSet* GetDataSetFromBlock static vtkDataSet* GetDataSetFromBlock
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo&, const arrayRange&,
const label datasetNo const label datasetNo
); );
@ -332,7 +330,7 @@ class vtkPV3Foam
static label GetNumberOfDataSets static label GetNumberOfDataSets
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& const arrayRange&
); );
//- Reset data counters //- Reset data counters
@ -344,19 +342,19 @@ class vtkPV3Foam
void updateMeshPartsStatus(); void updateMeshPartsStatus();
//- Internal mesh info //- Internal mesh info
void updateInfoInternalMesh(); void updateInfoInternalMesh(vtkDataArraySelection*);
//- Lagrangian info //- Lagrangian info
void updateInfoLagrangian(); void updateInfoLagrangian(vtkDataArraySelection*);
//- Patch info //- Patch info
void updateInfoPatches(); void updateInfoPatches(vtkDataArraySelection*);
//- Set info //- Set info
void updateInfoSets(); void updateInfoSets(vtkDataArraySelection*);
//- Zone info //- Zone info
void updateInfoZones(); void updateInfoZones(vtkDataArraySelection*);
//- Read zone names for zoneType from file //- Read zone names for zoneType from file
wordList readZoneNames(const word& zoneType); wordList readZoneNames(const word& zoneType);
@ -511,7 +509,7 @@ class vtkPV3Foam
const GeometricField<Type, fvPatchField, volMesh>&, const GeometricField<Type, fvPatchField, volMesh>&,
autoPtr<GeometricField<Type, pointPatchField, pointMesh> >&, autoPtr<GeometricField<Type, pointPatchField, pointMesh> >&,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange&,
const List<polyDecomp>& decompLst const List<polyDecomp>& decompLst
); );
@ -521,7 +519,7 @@ class vtkPV3Foam
( (
const GeometricField<Type, fvPatchField, volMesh>&, const GeometricField<Type, fvPatchField, volMesh>&,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo&, const arrayRange&,
const label datasetNo, const label datasetNo,
const polyDecomp& const polyDecomp&
); );
@ -533,7 +531,7 @@ class vtkPV3Foam
const word& name, const word& name,
const Field<Type>&, const Field<Type>&,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo&, const arrayRange&,
const label datasetNo const label datasetNo
); );
@ -543,7 +541,7 @@ class vtkPV3Foam
( (
const GeometricField<Type, fvPatchField, volMesh>&, const GeometricField<Type, fvPatchField, volMesh>&,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo&, const arrayRange&,
const label datasetNo, const label datasetNo,
const fvMesh&, const fvMesh&,
const labelList& faceLabels const labelList& faceLabels
@ -555,7 +553,7 @@ class vtkPV3Foam
( (
const GeometricField<Type, fvPatchField, volMesh>&, const GeometricField<Type, fvPatchField, volMesh>&,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo&, const arrayRange&,
const label datasetNo, const label datasetNo,
const fvMesh&, const fvMesh&,
const faceSet& const faceSet&
@ -576,7 +574,7 @@ class vtkPV3Foam
( (
const IOField<Type>&, const IOField<Type>&,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo&, const arrayRange&,
const label datasetNo const label datasetNo
); );
@ -596,7 +594,7 @@ class vtkPV3Foam
( (
const GeometricField<Type, pointPatchField, pointMesh>&, const GeometricField<Type, pointPatchField, pointMesh>&,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange&,
const List<polyDecomp>& const List<polyDecomp>&
); );
@ -607,7 +605,7 @@ class vtkPV3Foam
const GeometricField<Type, pointPatchField, pointMesh>&, const GeometricField<Type, pointPatchField, pointMesh>&,
const GeometricField<Type, fvPatchField, volMesh>&, const GeometricField<Type, fvPatchField, volMesh>&,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo&, const arrayRange&,
const label datasetNo, const label datasetNo,
const polyDecomp& const polyDecomp&
); );
@ -619,7 +617,7 @@ class vtkPV3Foam
const word& name, const word& name,
const Field<Type>&, const Field<Type>&,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo&, const arrayRange&,
const label datasetNo const label datasetNo
); );
@ -640,7 +638,7 @@ class vtkPV3Foam
static wordHashSet getSelected static wordHashSet getSelected
( (
vtkDataArraySelection*, vtkDataArraySelection*,
const partInfo& const arrayRange&
); );
//- Retrieve the current selections //- Retrieve the current selections
@ -650,7 +648,7 @@ class vtkPV3Foam
static stringList getSelectedArrayEntries static stringList getSelectedArrayEntries
( (
vtkDataArraySelection*, vtkDataArraySelection*,
const partInfo& const arrayRange&
); );
//- Set selection(s) //- Set selection(s)
@ -661,7 +659,7 @@ class vtkPV3Foam
); );
//- Get the first word from the mesh parts selection //- Get the first word from the mesh parts selection
word getPartName(int); word getPartName(const int);
//- Disallow default bitwise copy construct //- Disallow default bitwise copy construct

View File

@ -50,11 +50,17 @@ Foam::label Foam::vtkPV3Foam::addToSelection
{ {
if (suffix.size()) if (suffix.size())
{ {
select->AddArray((names[nameI] + suffix).c_str()); select->AddArray
(
(names[nameI] + suffix).c_str()
);
} }
else else
{ {
select->AddArray(names[nameI].c_str()); select->AddArray
(
(names[nameI]).c_str()
);
} }
} }

View File

@ -43,7 +43,7 @@ void Foam::vtkPV3Foam::convertFaceField
( (
const GeometricField<Type, fvPatchField, volMesh>& tf, const GeometricField<Type, fvPatchField, volMesh>& tf,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const label datasetNo, const label datasetNo,
const fvMesh& mesh, const fvMesh& mesh,
const labelList& faceLabels const labelList& faceLabels
@ -100,7 +100,7 @@ void Foam::vtkPV3Foam::convertFaceField
vtkPolyData::SafeDownCast vtkPolyData::SafeDownCast
( (
GetDataSetFromBlock(output, selector, datasetNo) GetDataSetFromBlock(output, range, datasetNo)
) ->GetCellData() ) ->GetCellData()
->AddArray(cellData); ->AddArray(cellData);
@ -113,7 +113,7 @@ void Foam::vtkPV3Foam::convertFaceField
( (
const GeometricField<Type, fvPatchField, volMesh>& tf, const GeometricField<Type, fvPatchField, volMesh>& tf,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const label datasetNo, const label datasetNo,
const fvMesh& mesh, const fvMesh& mesh,
const faceSet& fSet const faceSet& fSet
@ -173,7 +173,7 @@ void Foam::vtkPV3Foam::convertFaceField
vtkPolyData::SafeDownCast vtkPolyData::SafeDownCast
( (
GetDataSetFromBlock(output, selector, datasetNo) GetDataSetFromBlock(output, range, datasetNo)
) ->GetCellData() ) ->GetCellData()
->AddArray(cellData); ->AddArray(cellData);

View File

@ -51,7 +51,7 @@ void Foam::vtkPV3Foam::pruneObjectList
) )
{ {
// hash all the selected field names // hash all the selected field names
if (!selected.size()) if (selected.empty())
{ {
objects.clear(); objects.clear();
} }
@ -79,7 +79,7 @@ void Foam::vtkPV3Foam::convertVolFields
reader_->GetVolFieldSelection() reader_->GetVolFieldSelection()
); );
if (!selectedFields.size()) if (selectedFields.empty())
{ {
return; return;
} }
@ -89,7 +89,7 @@ void Foam::vtkPV3Foam::convertVolFields
IOobjectList objects(mesh, dbPtr_().timeName()); IOobjectList objects(mesh, dbPtr_().timeName());
pruneObjectList(objects, selectedFields); pruneObjectList(objects, selectedFields);
if (!objects.size()) if (objects.empty())
{ {
return; return;
} }
@ -164,7 +164,7 @@ void Foam::vtkPV3Foam::convertPointFields
reader_->GetPointFieldSelection() reader_->GetPointFieldSelection()
); );
if (!selectedFields.size()) if (selectedFields.empty())
{ {
return; return;
} }
@ -174,7 +174,7 @@ void Foam::vtkPV3Foam::convertPointFields
IOobjectList objects(mesh, dbPtr_().timeName()); IOobjectList objects(mesh, dbPtr_().timeName());
pruneObjectList(objects, selectedFields); pruneObjectList(objects, selectedFields);
if (!objects.size()) if (objects.empty())
{ {
return; return;
} }
@ -229,7 +229,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields
vtkMultiBlockDataSet* output vtkMultiBlockDataSet* output
) )
{ {
partInfo& selector = partInfoLagrangian_; arrayRange& range = arrayRangeLagrangian_;
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
wordHashSet selectedFields = getSelected wordHashSet selectedFields = getSelected
@ -237,7 +237,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields
reader_->GetLagrangianFieldSelection() reader_->GetLagrangianFieldSelection()
); );
if (!selectedFields.size()) if (selectedFields.empty())
{ {
return; return;
} }
@ -248,7 +248,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields
printMemory(); 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 word cloudName = getPartName(partId);
const label datasetNo = partDataset_[partId]; const label datasetNo = partDataset_[partId];
@ -270,7 +270,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields
); );
pruneObjectList(objects, selectedFields); pruneObjectList(objects, selectedFields);
if (!objects.size()) if (objects.empty())
{ {
continue; continue;
} }

View File

@ -42,7 +42,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields
const label datasetNo const label datasetNo
) )
{ {
const partInfo& selector = partInfoLagrangian_; const arrayRange& range = arrayRangeLagrangian_;
forAllConstIter(IOobjectList, objects, iter) forAllConstIter(IOobjectList, objects, iter)
{ {
@ -50,7 +50,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields
if (iter()->headerClassName() == IOField<Type>::typeName) if (iter()->headerClassName() == IOField<Type>::typeName)
{ {
IOField<Type> tf(*iter()); IOField<Type> tf(*iter());
convertLagrangianField(tf, output, selector, datasetNo); convertLagrangianField(tf, output, range, datasetNo);
} }
} }
} }
@ -61,7 +61,7 @@ void Foam::vtkPV3Foam::convertLagrangianField
( (
const IOField<Type>& tf, const IOField<Type>& tf,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const label datasetNo const label datasetNo
) )
{ {
@ -97,7 +97,7 @@ void Foam::vtkPV3Foam::convertLagrangianField
vtkPolyData::SafeDownCast vtkPolyData::SafeDownCast
( (
GetDataSetFromBlock(output, selector, datasetNo) GetDataSetFromBlock(output, range, datasetNo)
) ->GetPointData() ) ->GetPointData()
->AddArray(pointData); ->AddArray(pointData);

View File

@ -49,13 +49,13 @@ void Foam::vtkPV3Foam::convertMeshVolume
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoVolume_; arrayRange& range = arrayRangeVolume_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
// resize for decomposed polyhedra // resize for decomposed polyhedra
regionPolyDecomp_.setSize(selector.size()); regionPolyDecomp_.setSize(range.size());
if (debug) if (debug)
{ {
@ -65,7 +65,7 @@ void Foam::vtkPV3Foam::convertMeshVolume
// Convert the internalMesh // Convert the internalMesh
// this looks like more than one part, but it isn't // 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"; const word partName = "internalMesh";
@ -82,7 +82,7 @@ void Foam::vtkPV3Foam::convertMeshVolume
if (vtkmesh) if (vtkmesh)
{ {
AddToBlock(output, vtkmesh, selector, datasetNo, partName); AddToBlock(output, vtkmesh, range, datasetNo, partName);
vtkmesh->Delete(); vtkmesh->Delete();
partDataset_[partId] = datasetNo++; partDataset_[partId] = datasetNo++;
@ -109,8 +109,8 @@ void Foam::vtkPV3Foam::convertMeshLagrangian
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoLagrangian_; arrayRange& range = arrayRangeLagrangian_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
@ -120,7 +120,7 @@ void Foam::vtkPV3Foam::convertMeshLagrangian
printMemory(); 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 word cloudName = getPartName(partId);
@ -133,7 +133,7 @@ void Foam::vtkPV3Foam::convertMeshLagrangian
if (vtkmesh) if (vtkmesh)
{ {
AddToBlock(output, vtkmesh, selector, datasetNo, cloudName); AddToBlock(output, vtkmesh, range, datasetNo, cloudName);
vtkmesh->Delete(); vtkmesh->Delete();
partDataset_[partId] = datasetNo++; partDataset_[partId] = datasetNo++;
@ -160,8 +160,8 @@ void Foam::vtkPV3Foam::convertMeshPatches
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoPatches_; arrayRange& range = arrayRangePatches_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
const polyBoundaryMesh& patches = mesh.boundaryMesh(); const polyBoundaryMesh& patches = mesh.boundaryMesh();
@ -172,7 +172,7 @@ void Foam::vtkPV3Foam::convertMeshPatches
printMemory(); 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 word patchName = getPartName(partId);
const label patchId = patches.findPatchID(patchName); const label patchId = patches.findPatchID(patchName);
@ -192,7 +192,7 @@ void Foam::vtkPV3Foam::convertMeshPatches
if (vtkmesh) if (vtkmesh)
{ {
AddToBlock(output, vtkmesh, selector, datasetNo, patchName); AddToBlock(output, vtkmesh, range, datasetNo, patchName);
vtkmesh->Delete(); vtkmesh->Delete();
partDataset_[partId] = datasetNo++; partDataset_[partId] = datasetNo++;
@ -219,15 +219,15 @@ void Foam::vtkPV3Foam::convertMeshCellZones
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoCellZones_; arrayRange& range = arrayRangeCellZones_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
// resize for decomposed polyhedra // resize for decomposed polyhedra
zonePolyDecomp_.setSize(selector.size()); zonePolyDecomp_.setSize(range.size());
if (!selector.size()) if (range.empty())
{ {
return; return;
} }
@ -239,7 +239,7 @@ void Foam::vtkPV3Foam::convertMeshCellZones
} }
const cellZoneMesh& zMesh = mesh.cellZones(); 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 word zoneName = getPartName(partId);
const label zoneId = zMesh.findZoneID(zoneName); const label zoneId = zMesh.findZoneID(zoneName);
@ -281,7 +281,7 @@ void Foam::vtkPV3Foam::convertMeshCellZones
// copy pointMap as well, otherwise pointFields fail // copy pointMap as well, otherwise pointFields fail
zonePolyDecomp_[datasetNo].pointMap() = subsetter.pointMap(); zonePolyDecomp_[datasetNo].pointMap() = subsetter.pointMap();
AddToBlock(output, vtkmesh, selector, datasetNo, zoneName); AddToBlock(output, vtkmesh, range, datasetNo, zoneName);
vtkmesh->Delete(); vtkmesh->Delete();
partDataset_[partId] = datasetNo++; partDataset_[partId] = datasetNo++;
@ -308,13 +308,13 @@ void Foam::vtkPV3Foam::convertMeshCellSets
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoCellSets_; arrayRange& range = arrayRangeCellSets_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
// resize for decomposed polyhedra // resize for decomposed polyhedra
csetPolyDecomp_.setSize(selector.size()); csetPolyDecomp_.setSize(range.size());
if (debug) if (debug)
{ {
@ -322,7 +322,7 @@ void Foam::vtkPV3Foam::convertMeshCellSets
printMemory(); printMemory();
} }
for (int partId = selector.start(); partId < selector.end(); ++partId) for (int partId = range.start(); partId < range.end(); ++partId)
{ {
const word partName = getPartName(partId); const word partName = getPartName(partId);
@ -363,7 +363,7 @@ void Foam::vtkPV3Foam::convertMeshCellSets
// copy pointMap as well, otherwise pointFields fail // copy pointMap as well, otherwise pointFields fail
csetPolyDecomp_[datasetNo].pointMap() = subsetter.pointMap(); csetPolyDecomp_[datasetNo].pointMap() = subsetter.pointMap();
AddToBlock(output, vtkmesh, selector, datasetNo, partName); AddToBlock(output, vtkmesh, range, datasetNo, partName);
vtkmesh->Delete(); vtkmesh->Delete();
partDataset_[partId] = datasetNo++; partDataset_[partId] = datasetNo++;
@ -390,12 +390,12 @@ void Foam::vtkPV3Foam::convertMeshFaceZones
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoFaceZones_; arrayRange& range = arrayRangeFaceZones_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
if (!selector.size()) if (range.empty())
{ {
return; return;
} }
@ -407,7 +407,7 @@ void Foam::vtkPV3Foam::convertMeshFaceZones
} }
const faceZoneMesh& zMesh = mesh.faceZones(); 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 word zoneName = getPartName(partId);
const label zoneId = zMesh.findZoneID(zoneName); const label zoneId = zMesh.findZoneID(zoneName);
@ -426,7 +426,7 @@ void Foam::vtkPV3Foam::convertMeshFaceZones
vtkPolyData* vtkmesh = faceZoneVTKMesh(mesh, zMesh[zoneId]); vtkPolyData* vtkmesh = faceZoneVTKMesh(mesh, zMesh[zoneId]);
if (vtkmesh) if (vtkmesh)
{ {
AddToBlock(output, vtkmesh, selector, datasetNo, zoneName); AddToBlock(output, vtkmesh, range, datasetNo, zoneName);
vtkmesh->Delete(); vtkmesh->Delete();
partDataset_[partId] = datasetNo++; partDataset_[partId] = datasetNo++;
@ -453,8 +453,8 @@ void Foam::vtkPV3Foam::convertMeshFaceSets
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoFaceSets_; arrayRange& range = arrayRangeFaceSets_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
@ -464,7 +464,7 @@ void Foam::vtkPV3Foam::convertMeshFaceSets
printMemory(); printMemory();
} }
for (int partId = selector.start(); partId < selector.end(); ++partId) for (int partId = range.start(); partId < range.end(); ++partId)
{ {
const word partName = getPartName(partId); const word partName = getPartName(partId);
@ -483,7 +483,7 @@ void Foam::vtkPV3Foam::convertMeshFaceSets
vtkPolyData* vtkmesh = faceSetVTKMesh(mesh, fSet); vtkPolyData* vtkmesh = faceSetVTKMesh(mesh, fSet);
if (vtkmesh) if (vtkmesh)
{ {
AddToBlock(output, vtkmesh, selector, datasetNo, partName); AddToBlock(output, vtkmesh, range, datasetNo, partName);
vtkmesh->Delete(); vtkmesh->Delete();
partDataset_[partId] = datasetNo++; partDataset_[partId] = datasetNo++;
@ -510,8 +510,8 @@ void Foam::vtkPV3Foam::convertMeshPointZones
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoPointZones_; arrayRange& range = arrayRangePointZones_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
@ -521,10 +521,10 @@ void Foam::vtkPV3Foam::convertMeshPointZones
printMemory(); printMemory();
} }
if (selector.size()) if (range.size())
{ {
const pointZoneMesh& zMesh = mesh.pointZones(); 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); word zoneName = getPartName(partId);
label zoneId = zMesh.findZoneID(zoneName); label zoneId = zMesh.findZoneID(zoneName);
@ -537,7 +537,7 @@ void Foam::vtkPV3Foam::convertMeshPointZones
vtkPolyData* vtkmesh = pointZoneVTKMesh(mesh, zMesh[zoneId]); vtkPolyData* vtkmesh = pointZoneVTKMesh(mesh, zMesh[zoneId]);
if (vtkmesh) if (vtkmesh)
{ {
AddToBlock(output, vtkmesh, selector, datasetNo, zoneName); AddToBlock(output, vtkmesh, range, datasetNo, zoneName);
vtkmesh->Delete(); vtkmesh->Delete();
partDataset_[partId] = datasetNo++; partDataset_[partId] = datasetNo++;
@ -566,8 +566,8 @@ void Foam::vtkPV3Foam::convertMeshPointSets
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoPointSets_; arrayRange& range = arrayRangePointSets_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const fvMesh& mesh = *meshPtr_; const fvMesh& mesh = *meshPtr_;
@ -577,7 +577,7 @@ void Foam::vtkPV3Foam::convertMeshPointSets
printMemory(); printMemory();
} }
for (int partId = selector.start(); partId < selector.end(); ++partId) for (int partId = range.start(); partId < range.end(); ++partId)
{ {
word partName = getPartName(partId); word partName = getPartName(partId);
@ -596,7 +596,7 @@ void Foam::vtkPV3Foam::convertMeshPointSets
vtkPolyData* vtkmesh = pointSetVTKMesh(mesh, pSet); vtkPolyData* vtkmesh = pointSetVTKMesh(mesh, pSet);
if (vtkmesh) if (vtkmesh)
{ {
AddToBlock(output, vtkmesh, selector, datasetNo, partName); AddToBlock(output, vtkmesh, range, datasetNo, partName);
vtkmesh->Delete(); vtkmesh->Delete();
partDataset_[partId] = datasetNo++; partDataset_[partId] = datasetNo++;
@ -616,4 +616,5 @@ void Foam::vtkPV3Foam::convertMeshPointSets
} }
} }
// ************************************************************************* // // ************************************************************************* //

View File

@ -45,7 +45,7 @@ void Foam::vtkPV3Foam::convertPatchField
const word& name, const word& name,
const Field<Type>& ptf, const Field<Type>& ptf,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const label datasetNo const label datasetNo
) )
{ {
@ -70,7 +70,7 @@ void Foam::vtkPV3Foam::convertPatchField
vtkPolyData::SafeDownCast vtkPolyData::SafeDownCast
( (
GetDataSetFromBlock(output, selector, datasetNo) GetDataSetFromBlock(output, range, datasetNo)
) ->GetCellData() ) ->GetCellData()
->AddArray(cellData); ->AddArray(cellData);
@ -85,7 +85,7 @@ void Foam::vtkPV3Foam::convertPatchPointField
const word& name, const word& name,
const Field<Type>& pptf, const Field<Type>& pptf,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const label datasetNo const label datasetNo
) )
{ {
@ -111,7 +111,7 @@ void Foam::vtkPV3Foam::convertPatchPointField
vtkPolyData::SafeDownCast vtkPolyData::SafeDownCast
( (
GetDataSetFromBlock(output, selector, datasetNo) GetDataSetFromBlock(output, range, datasetNo)
) ->GetPointData() ) ->GetPointData()
->AddArray(pointData); ->AddArray(pointData);

View File

@ -77,7 +77,7 @@ void Foam::vtkPV3Foam::convertPointFields
( (
ptf, ptf,
output, output,
partInfoVolume_, arrayRangeVolume_,
regionPolyDecomp_ regionPolyDecomp_
); );
@ -86,7 +86,7 @@ void Foam::vtkPV3Foam::convertPointFields
( (
ptf, ptf,
output, output,
partInfoCellZones_, arrayRangeCellZones_,
zonePolyDecomp_ zonePolyDecomp_
); );
@ -95,7 +95,7 @@ void Foam::vtkPV3Foam::convertPointFields
( (
ptf, ptf,
output, output,
partInfoCellSets_, arrayRangeCellSets_,
csetPolyDecomp_ csetPolyDecomp_
); );
@ -105,8 +105,8 @@ void Foam::vtkPV3Foam::convertPointFields
// //
for for
( (
int partId = partInfoPatches_.start(); int partId = arrayRangePatches_.start();
partId < partInfoPatches_.end(); partId < arrayRangePatches_.end();
++partId ++partId
) )
{ {
@ -124,7 +124,7 @@ void Foam::vtkPV3Foam::convertPointFields
fieldName, fieldName,
ptf.boundaryField()[patchId].patchInternalField()(), ptf.boundaryField()[patchId].patchInternalField()(),
output, output,
partInfoPatches_, arrayRangePatches_,
datasetNo datasetNo
); );
} }
@ -137,11 +137,11 @@ void Foam::vtkPV3Foam::convertPointFieldBlock
( (
const GeometricField<Type, pointPatchField, pointMesh>& ptf, const GeometricField<Type, pointPatchField, pointMesh>& ptf,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const List<polyDecomp>& decompLst const List<polyDecomp>& decompLst
) )
{ {
for (int partId = selector.start(); partId < selector.end(); ++partId) for (int partId = range.start(); partId < range.end(); ++partId)
{ {
const label datasetNo = partDataset_[partId]; const label datasetNo = partDataset_[partId];
@ -152,7 +152,7 @@ void Foam::vtkPV3Foam::convertPointFieldBlock
ptf, ptf,
GeometricField<Type, fvPatchField, volMesh>::null(), GeometricField<Type, fvPatchField, volMesh>::null(),
output, output,
selector, range,
datasetNo, datasetNo,
decompLst[datasetNo] decompLst[datasetNo]
); );
@ -167,7 +167,7 @@ void Foam::vtkPV3Foam::convertPointField
const GeometricField<Type, pointPatchField, pointMesh>& ptf, const GeometricField<Type, pointPatchField, pointMesh>& ptf,
const GeometricField<Type, fvPatchField, volMesh>& tf, const GeometricField<Type, fvPatchField, volMesh>& tf,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const label datasetNo, const label datasetNo,
const polyDecomp& decomp const polyDecomp& decomp
) )
@ -260,7 +260,7 @@ void Foam::vtkPV3Foam::convertPointField
vtkUnstructuredGrid::SafeDownCast vtkUnstructuredGrid::SafeDownCast
( (
GetDataSetFromBlock(output, selector, datasetNo) GetDataSetFromBlock(output, range, datasetNo)
) ->GetPointData() ) ->GetPointData()
->AddArray(pointData); ->AddArray(pointData);

View File

@ -118,32 +118,39 @@ Foam::wordList Foam::vtkPV3Foam::readZoneNames(const word& zoneType)
} }
void Foam::vtkPV3Foam::updateInfoInternalMesh() void Foam::vtkPV3Foam::updateInfoInternalMesh
(
vtkDataArraySelection* arraySelection
)
{ {
if (debug) if (debug)
{ {
Info<< "<beg> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl; Info<< "<beg> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl;
} }
vtkDataArraySelection* partSelection = reader_->GetPartSelection();
// Determine mesh parts (internalMesh, patches...) // Determine mesh parts (internalMesh, patches...)
//- Add internal mesh as first entry //- Add internal mesh as first entry
partInfoVolume_ = partSelection->GetNumberOfArrays(); arrayRangeVolume_.reset( arraySelection->GetNumberOfArrays() );
partSelection->AddArray("internalMesh"); arraySelection->AddArray
partInfoVolume_ += 1; (
"internalMesh"
);
arrayRangeVolume_ += 1;
if (debug) if (debug)
{ {
// just for debug info // just for debug info
getSelectedArrayEntries(partSelection); getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl;
} }
} }
void Foam::vtkPV3Foam::updateInfoLagrangian() void Foam::vtkPV3Foam::updateInfoLagrangian
(
vtkDataArraySelection* arraySelection
)
{ {
if (debug) if (debug)
{ {
@ -166,34 +173,35 @@ void Foam::vtkPV3Foam::updateInfoLagrangian()
readDir(dbPtr_->timePath()/lagrangianPrefix, fileName::DIRECTORY) readDir(dbPtr_->timePath()/lagrangianPrefix, fileName::DIRECTORY)
); );
vtkDataArraySelection* partSelection = reader_->GetPartSelection(); arrayRangeLagrangian_.reset( arraySelection->GetNumberOfArrays() );
partInfoLagrangian_ = partSelection->GetNumberOfArrays();
int nClouds = 0; int nClouds = 0;
forAll(cloudDirs, cloudI) forAll(cloudDirs, cloudI)
{ {
// Add cloud to GUI list // Add cloud to GUI list
partSelection->AddArray arraySelection->AddArray
( (
(cloudDirs[cloudI] + " - lagrangian").c_str() (cloudDirs[cloudI] + " - lagrangian").c_str()
); );
++nClouds; ++nClouds;
} }
arrayRangeLagrangian_ += nClouds;
partInfoLagrangian_ += nClouds;
if (debug) if (debug)
{ {
// just for debug info // just for debug info
getSelectedArrayEntries(partSelection); getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInfoLagrangian" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInfoLagrangian" << endl;
} }
} }
void Foam::vtkPV3Foam::updateInfoPatches() void Foam::vtkPV3Foam::updateInfoPatches
(
vtkDataArraySelection* arraySelection
)
{ {
if (debug) if (debug)
{ {
@ -201,8 +209,7 @@ void Foam::vtkPV3Foam::updateInfoPatches()
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl;
} }
vtkDataArraySelection* partSelection = reader_->GetPartSelection(); arrayRangePatches_.reset( arraySelection->GetNumberOfArrays() );
partInfoPatches_ = partSelection->GetNumberOfArrays();
int nPatches = 0; int nPatches = 0;
if (meshPtr_) if (meshPtr_)
@ -215,7 +222,7 @@ void Foam::vtkPV3Foam::updateInfoPatches()
if (pp.size()) if (pp.size())
{ {
// Add patch to GUI list // Add patch to GUI list
partSelection->AddArray arraySelection->AddArray
( (
(pp.name() + " - patch").c_str() (pp.name() + " - patch").c_str()
); );
@ -260,7 +267,7 @@ void Foam::vtkPV3Foam::updateInfoPatches()
// Valid patch if nFace > 0 - add patch to GUI list // Valid patch if nFace > 0 - add patch to GUI list
if (nFaces) if (nFaces)
{ {
partSelection->AddArray arraySelection->AddArray
( (
(patchEntries[entryI].keyword() + " - patch").c_str() (patchEntries[entryI].keyword() + " - patch").c_str()
); );
@ -270,19 +277,22 @@ void Foam::vtkPV3Foam::updateInfoPatches()
} }
} }
} }
partInfoPatches_ += nPatches; arrayRangePatches_ += nPatches;
if (debug) if (debug)
{ {
// just for debug info // just for debug info
getSelectedArrayEntries(partSelection); getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInfoPatches" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInfoPatches" << endl;
} }
} }
void Foam::vtkPV3Foam::updateInfoZones() void Foam::vtkPV3Foam::updateInfoZones
(
vtkDataArraySelection* arraySelection
)
{ {
if (!reader_->GetIncludeZones()) if (!reader_->GetIncludeZones())
{ {
@ -295,7 +305,6 @@ void Foam::vtkPV3Foam::updateInfoZones()
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl;
} }
vtkDataArraySelection* partSelection = reader_->GetPartSelection();
wordList namesLst; wordList namesLst;
// //
@ -310,12 +319,15 @@ void Foam::vtkPV3Foam::updateInfoZones()
namesLst = readZoneNames("cellZones"); namesLst = readZoneNames("cellZones");
} }
partInfoCellZones_ = partSelection->GetNumberOfArrays(); arrayRangeCellZones_.reset( arraySelection->GetNumberOfArrays() );
forAll(namesLst, elemI) 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"); namesLst = readZoneNames("faceZones");
} }
partInfoFaceZones_ = partSelection->GetNumberOfArrays(); arrayRangeFaceZones_.reset( arraySelection->GetNumberOfArrays() );
forAll(namesLst, elemI) forAll(namesLst, elemI)
{ {
partSelection->AddArray arraySelection->AddArray
( (
(namesLst[elemI] + " - faceZone").c_str() (namesLst[elemI] + " - faceZone").c_str()
); );
} }
partInfoFaceZones_ += namesLst.size(); arrayRangeFaceZones_ += namesLst.size();
// //
@ -353,28 +365,30 @@ void Foam::vtkPV3Foam::updateInfoZones()
namesLst = readZoneNames("pointZones"); namesLst = readZoneNames("pointZones");
} }
partInfoPointZones_ = partSelection->GetNumberOfArrays(); arrayRangePointZones_.reset( arraySelection->GetNumberOfArrays() );
forAll(namesLst, elemI) forAll(namesLst, elemI)
{ {
partSelection->AddArray arraySelection->AddArray
( (
(namesLst[elemI] + " - pointZone").c_str() (namesLst[elemI] + " - pointZone").c_str()
); );
} }
partInfoPointZones_ += namesLst.size(); arrayRangePointZones_ += namesLst.size();
if (debug) if (debug)
{ {
// just for debug info // just for debug info
getSelectedArrayEntries(partSelection); getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInfoZones" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInfoZones" << endl;
} }
} }
void Foam::vtkPV3Foam::updateInfoSets() void Foam::vtkPV3Foam::updateInfoSets
(
vtkDataArraySelection* arraySelection
)
{ {
if (!reader_->GetIncludeSets()) if (!reader_->GetIncludeSets())
{ {
@ -386,8 +400,6 @@ void Foam::vtkPV3Foam::updateInfoSets()
Info<< "<beg> Foam::vtkPV3Foam::updateInfoSets" << endl; Info<< "<beg> Foam::vtkPV3Foam::updateInfoSets" << endl;
} }
vtkDataArraySelection* partSelection = reader_->GetPartSelection();
// Add names of sets // Add names of sets
IOobjectList objects IOobjectList objects
( (
@ -397,26 +409,26 @@ void Foam::vtkPV3Foam::updateInfoSets()
); );
partInfoCellSets_ = partSelection->GetNumberOfArrays(); arrayRangeCellSets_.reset( arraySelection->GetNumberOfArrays() );
partInfoCellSets_ += addToSelection<cellSet> arrayRangeCellSets_ += addToSelection<cellSet>
( (
partSelection, arraySelection,
objects, objects,
" - cellSet" " - cellSet"
); );
partInfoFaceSets_ = partSelection->GetNumberOfArrays(); arrayRangeFaceSets_.reset( arraySelection->GetNumberOfArrays() );
partInfoFaceSets_ += addToSelection<faceSet> arrayRangeFaceSets_ += addToSelection<faceSet>
( (
partSelection, arraySelection,
objects, objects,
" - faceSet" " - faceSet"
); );
partInfoPointSets_ = partSelection->GetNumberOfArrays(); arrayRangePointSets_.reset( arraySelection->GetNumberOfArrays() );
partInfoPointSets_ += addToSelection<pointSet> arrayRangePointSets_ += addToSelection<pointSet>
( (
partSelection, arraySelection,
objects, objects,
" - pointSet" " - pointSet"
); );
@ -424,7 +436,7 @@ void Foam::vtkPV3Foam::updateInfoSets()
if (debug) if (debug)
{ {
// just for debug info // just for debug info
getSelectedArrayEntries(partSelection); getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInfoSets" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInfoSets" << endl;
} }
@ -450,14 +462,13 @@ void Foam::vtkPV3Foam::updateInfoLagrangianFields()
// have to decide if the second set of fields get mixed in // have to decide if the second set of fields get mixed in
// or dealt with separately // or dealt with separately
const partInfo& selector = partInfoLagrangian_; const arrayRange& range = arrayRangeLagrangian_;
int partId = selector.start(); if (range.empty())
if (!selector.size() || partId < 0)
{ {
return; return;
} }
int partId = range.start();
word cloudName = getPartName(partId); word cloudName = getPartName(partId);
// use the db directly since this might be called without a mesh, // use the db directly since this might be called without a mesh,

View File

@ -76,12 +76,12 @@ void Foam::vtkPV3Foam::AddToBlock
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
vtkDataSet* dataset, vtkDataSet* dataset,
const partInfo& selector, const arrayRange& range,
const label datasetNo, const label datasetNo,
const std::string& datasetName const std::string& datasetName
) )
{ {
const int blockNo = selector.block(); const int blockNo = range.block();
vtkDataObject* blockDO = output->GetBlock(blockNo); vtkDataObject* blockDO = output->GetBlock(blockNo);
vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
@ -117,7 +117,7 @@ void Foam::vtkPV3Foam::AddToBlock
output->GetMetaData(blockNo)->Set output->GetMetaData(blockNo)->Set
( (
vtkCompositeDataSet::NAME(), vtkCompositeDataSet::NAME(),
selector.name() range.name()
); );
} }
@ -135,11 +135,11 @@ void Foam::vtkPV3Foam::AddToBlock
vtkDataSet* Foam::vtkPV3Foam::GetDataSetFromBlock vtkDataSet* Foam::vtkPV3Foam::GetDataSetFromBlock
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const label datasetNo const label datasetNo
) )
{ {
const int blockNo = selector.block(); const int blockNo = range.block();
vtkDataObject* blockDO = output->GetBlock(blockNo); vtkDataObject* blockDO = output->GetBlock(blockNo);
vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
@ -157,10 +157,10 @@ vtkDataSet* Foam::vtkPV3Foam::GetDataSetFromBlock
Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector const arrayRange& range
) )
{ {
const int blockNo = selector.block(); const int blockNo = range.block();
vtkDataObject* blockDO = output->GetBlock(blockNo); vtkDataObject* blockDO = output->GetBlock(blockNo);
vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); 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)); return getFirstWord(reader_->GetPartArrayName(partId));
} }
@ -202,13 +202,13 @@ Foam::wordHashSet Foam::vtkPV3Foam::getSelected
Foam::wordHashSet Foam::vtkPV3Foam::getSelected Foam::wordHashSet Foam::vtkPV3Foam::getSelected
( (
vtkDataArraySelection* select, vtkDataArraySelection* select,
const partInfo& selector const arrayRange& range
) )
{ {
int nElem = select->GetNumberOfArrays(); int nElem = select->GetNumberOfArrays();
wordHashSet selections(2*nElem); 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)) if (select->GetArraySetting(elemI))
{ {
@ -262,13 +262,13 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
( (
vtkDataArraySelection* select, vtkDataArraySelection* select,
const partInfo& selector const arrayRange& range
) )
{ {
stringList selections(selector.size()); stringList selections(range.size());
label nElem = 0; 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)) if (select->GetArraySetting(elemI))
{ {
@ -281,7 +281,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
if (debug) if (debug)
{ {
Info<< "available("; Info<< "available(";
for (int elemI = selector.start(); elemI < selector.end(); ++elemI) for (int elemI = range.start(); elemI < range.end(); ++elemI)
{ {
Info<< " \"" << select->GetArrayName(elemI) << "\""; Info<< " \"" << select->GetArrayName(elemI) << "\"";
} }

View File

@ -81,7 +81,7 @@ void Foam::vtkPV3Foam::convertVolFields
tf, tf,
ptfPtr, ptfPtr,
output, output,
partInfoVolume_, arrayRangeVolume_,
regionPolyDecomp_ regionPolyDecomp_
); );
@ -91,7 +91,7 @@ void Foam::vtkPV3Foam::convertVolFields
tf, tf,
ptfPtr, ptfPtr,
output, output,
partInfoCellZones_, arrayRangeCellZones_,
zonePolyDecomp_ zonePolyDecomp_
); );
@ -101,7 +101,7 @@ void Foam::vtkPV3Foam::convertVolFields
tf, tf,
ptfPtr, ptfPtr,
output, output,
partInfoCellSets_, arrayRangeCellSets_,
csetPolyDecomp_ csetPolyDecomp_
); );
@ -117,8 +117,8 @@ void Foam::vtkPV3Foam::convertVolFields
for for
( (
int partId = partInfoPatches_.start(); int partId = arrayRangePatches_.start();
partId < partInfoPatches_.end(); partId < arrayRangePatches_.end();
++partId ++partId
) )
{ {
@ -155,7 +155,7 @@ void Foam::vtkPV3Foam::convertVolFields
tf.name(), tf.name(),
tpptf(), tpptf(),
output, output,
partInfoPatches_, arrayRangePatches_,
datasetNo datasetNo
); );
@ -164,7 +164,7 @@ void Foam::vtkPV3Foam::convertVolFields
pointFldName, pointFldName,
ppInterpList[patchId].faceToPointInterpolate(tpptf)(), ppInterpList[patchId].faceToPointInterpolate(tpptf)(),
output, output,
partInfoPatches_, arrayRangePatches_,
datasetNo datasetNo
); );
} }
@ -175,7 +175,7 @@ void Foam::vtkPV3Foam::convertVolFields
tf.name(), tf.name(),
ptf, ptf,
output, output,
partInfoPatches_, arrayRangePatches_,
datasetNo datasetNo
); );
@ -184,7 +184,7 @@ void Foam::vtkPV3Foam::convertVolFields
pointFldName, pointFldName,
ppInterpList[patchId].faceToPointInterpolate(ptf)(), ppInterpList[patchId].faceToPointInterpolate(ptf)(),
output, output,
partInfoPatches_, arrayRangePatches_,
datasetNo datasetNo
); );
} }
@ -195,8 +195,8 @@ void Foam::vtkPV3Foam::convertVolFields
// //
for for
( (
int partId = partInfoFaceZones_.start(); int partId = arrayRangeFaceZones_.start();
partId < partInfoFaceZones_.end(); partId < arrayRangeFaceZones_.end();
++partId ++partId
) )
{ {
@ -220,7 +220,7 @@ void Foam::vtkPV3Foam::convertVolFields
( (
tf, tf,
output, output,
partInfoFaceZones_, arrayRangeFaceZones_,
datasetNo, datasetNo,
mesh, mesh,
zMesh[zoneId] zMesh[zoneId]
@ -234,8 +234,8 @@ void Foam::vtkPV3Foam::convertVolFields
// //
for for
( (
int partId = partInfoFaceSets_.start(); int partId = arrayRangeFaceSets_.start();
partId < partInfoFaceSets_.end(); partId < arrayRangeFaceSets_.end();
++partId ++partId
) )
{ {
@ -253,7 +253,7 @@ void Foam::vtkPV3Foam::convertVolFields
( (
tf, tf,
output, output,
partInfoFaceSets_, arrayRangeFaceSets_,
datasetNo, datasetNo,
mesh, mesh,
fSet fSet
@ -271,11 +271,11 @@ void Foam::vtkPV3Foam::convertVolFieldBlock
const GeometricField<Type, fvPatchField, volMesh>& tf, const GeometricField<Type, fvPatchField, volMesh>& tf,
autoPtr<GeometricField<Type, pointPatchField, pointMesh> >& ptfPtr, autoPtr<GeometricField<Type, pointPatchField, pointMesh> >& ptfPtr,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const List<polyDecomp>& decompLst const List<polyDecomp>& decompLst
) )
{ {
for (int partId = selector.start(); partId < selector.end(); ++partId) for (int partId = range.start(); partId < range.end(); ++partId)
{ {
const label datasetNo = partDataset_[partId]; const label datasetNo = partDataset_[partId];
@ -285,7 +285,7 @@ void Foam::vtkPV3Foam::convertVolFieldBlock
( (
tf, tf,
output, output,
selector, range,
datasetNo, datasetNo,
decompLst[datasetNo] decompLst[datasetNo]
); );
@ -309,7 +309,7 @@ void Foam::vtkPV3Foam::convertVolFieldBlock
ptfPtr(), ptfPtr(),
tf, tf,
output, output,
selector, range,
datasetNo, datasetNo,
decompLst[datasetNo] decompLst[datasetNo]
); );
@ -323,7 +323,7 @@ void Foam::vtkPV3Foam::convertVolField
( (
const GeometricField<Type, fvPatchField, volMesh>& tf, const GeometricField<Type, fvPatchField, volMesh>& tf,
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const label datasetNo, const label datasetNo,
const polyDecomp& decompInfo const polyDecomp& decompInfo
) )
@ -359,7 +359,7 @@ void Foam::vtkPV3Foam::convertVolField
vtkUnstructuredGrid::SafeDownCast vtkUnstructuredGrid::SafeDownCast
( (
GetDataSetFromBlock(output, selector, datasetNo) GetDataSetFromBlock(output, range, datasetNo)
) ->GetCellData() ) ->GetCellData()
->AddArray(celldata); ->AddArray(celldata);

View File

@ -43,34 +43,40 @@
</Documentation> </Documentation>
</IntVectorProperty> </IntVectorProperty>
<!-- Selections -->
<!-- Available Parts (blocks) array --> <!--
| Selections
-->
<!-- Available Blocks array -->
<StringVectorProperty <StringVectorProperty
name="PartArrayInfo" name="BlockArrayStatus"
information_only="1"> information_only="1">
<ArraySelectionInformationHelper attribute_name="Part"/> <ArraySelectionInformationHelper attribute_name="Block"/>
</StringVectorProperty> </StringVectorProperty>
<StringVectorProperty <StringVectorProperty
name="PartStatus" name="BlockStatus"
label="Blocks" label="Blocks"
command="SetPartArrayStatus" command="SetBlockArrayStatus"
number_of_elements="0" number_of_elements="0"
repeat_command="1" repeat_command="1"
number_of_elements_per_command="2" number_of_elements_per_command="2"
element_types="2 0" element_types="2 0"
information_property="PartArrayInfo" information_property="BlockArrayStatus"
animateable="0"> animateable="0">
<ArraySelectionDomain name="array_list"> <ArraySelectionDomain name="array_list">
<RequiredProperties> <RequiredProperties>
<Property name="PartArrayInfo" function="ArrayList"/> <Property name="BlockArrayStatus" function="ArrayList"/>
</RequiredProperties> </RequiredProperties>
</ArraySelectionDomain> </ArraySelectionDomain>
<Documentation>
This property contains a list of the blocks
</Documentation>
</StringVectorProperty> </StringVectorProperty>
<!-- Available Parts (blocks) array --> <!-- Available CurvedEdges array -->
<StringVectorProperty <StringVectorProperty
name="CurvedEdgesArrayInfo" name="CurvedEdgesArrayStatus"
information_only="1"> information_only="1">
<ArraySelectionInformationHelper attribute_name="CurvedEdges"/> <ArraySelectionInformationHelper attribute_name="CurvedEdges"/>
</StringVectorProperty> </StringVectorProperty>
@ -82,13 +88,16 @@
repeat_command="1" repeat_command="1"
number_of_elements_per_command="2" number_of_elements_per_command="2"
element_types="2 0" element_types="2 0"
information_property="CurvedEdgesArrayInfo" information_property="CurvedEdgesArrayStatus"
animateable="0"> animateable="0">
<ArraySelectionDomain name="array_list"> <ArraySelectionDomain name="array_list">
<RequiredProperties> <RequiredProperties>
<Property name="CurvedEdgesArrayInfo" function="ArrayList"/> <Property name="CurvedEdgesArrayStatus" function="ArrayList"/>
</RequiredProperties> </RequiredProperties>
</ArraySelectionDomain> </ArraySelectionDomain>
<Documentation>
This property contains a list of the curved edges
</Documentation>
</StringVectorProperty> </StringVectorProperty>
<Hints> <Hints>

View File

@ -32,9 +32,10 @@ License
#include <QLabel> #include <QLabel>
#include <QLayout> #include <QLayout>
#include <QString> #include <QString>
#include <QPushButton>
#include <QtDebug> #include <QtDebug>
// Paraview<->QT UI // Paraview <-> QT UI
#include "pqAnimationScene.h" #include "pqAnimationScene.h"
#include "pqApplicationCore.h" #include "pqApplicationCore.h"
#include "pqPipelineRepresentation.h" #include "pqPipelineRepresentation.h"
@ -56,34 +57,35 @@ pqPV3blockMeshReaderPanel::pqPV3blockMeshReaderPanel
QWidget *p QWidget *p
) )
: :
pqAutoGeneratedObjectPanel(proxy, p), pqAutoGeneratedObjectPanel(proxy, p)
sourceProxy_(vtkSMSourceProxy::SafeDownCast(this->proxy()))
{ {
// create first sublayout (at top of the panel) // create first sublayout (at top of the panel)
QGridLayout *sect1 = new QGridLayout(); QGridLayout *form = new QGridLayout();
this->PanelLayout->addLayout(sect1, 0, 0, 1, -1); this->PanelLayout->addLayout(form, 0, 0, 1, -1);
vtkSMProperty* prop = 0;
// checkbox for showing point numbers // checkbox for showing point numbers
ShowPointNumbers_ = new QCheckBox("Show Point Numbers"); if ((prop = this->proxy()->GetProperty("UiShowPointNumbers")) != 0)
ShowPointNumbers_->setChecked(true); {
prop->SetImmediateUpdate(true);
connect ShowPointNumbers_ = new QCheckBox("Show Point Numbers");
( ShowPointNumbers_->setToolTip("Show point numbers in render window.");
ShowPointNumbers_, ShowPointNumbers_->setChecked
SIGNAL(stateChanged(int)), (
this, vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0)
SLOT(ShowPointNumbersToggled()) );
);
sect1->addWidget(ShowPointNumbers_); form->addWidget(ShowPointNumbers_);
connect
// immediate update on the Server Manager side (
vtkSMIntVectorProperty::SafeDownCast ShowPointNumbers_,
( SIGNAL(stateChanged(int)),
sourceProxy_->GetProperty("UiShowPointNumbers") this,
)->SetImmediateUpdate(true); SLOT(ShowPointNumbersToggled())
);
}
} }
@ -93,7 +95,7 @@ void pqPV3blockMeshReaderPanel::ShowPointNumbersToggled()
{ {
vtkSMIntVectorProperty::SafeDownCast vtkSMIntVectorProperty::SafeDownCast
( (
sourceProxy_->GetProperty("UiShowPointNumbers") this->proxy()->GetProperty("UiShowPointNumbers")
)->SetElement(0, ShowPointNumbers_->isChecked()); )->SetElement(0, ShowPointNumbers_->isChecked());
// update the active view // update the active view

View File

@ -62,9 +62,6 @@ class pqPV3blockMeshReaderPanel
Q_OBJECT; Q_OBJECT;
typedef pqAutoGeneratedObjectPanel Superclass; typedef pqAutoGeneratedObjectPanel Superclass;
//- Server Manager Source Proxy
vtkSMSourceProxy* sourceProxy_;
//- Show Point Numbers checkbox //- Show Point Numbers checkbox
QCheckBox* ShowPointNumbers_; QCheckBox* ShowPointNumbers_;

View File

@ -64,7 +64,7 @@ vtkPV3blockMeshReader::vtkPV3blockMeshReader()
ShowPointNumbers = 1; ShowPointNumbers = 1;
UpdateGUI = 0; UpdateGUI = 0;
PartSelection = vtkDataArraySelection::New(); BlockSelection = vtkDataArraySelection::New();
CurvedEdgesSelection = vtkDataArraySelection::New(); CurvedEdgesSelection = vtkDataArraySelection::New();
// Setup the selection callback to modify this object when an array // Setup the selection callback to modify this object when an array
@ -77,7 +77,7 @@ vtkPV3blockMeshReader::vtkPV3blockMeshReader()
SelectionObserver->SetClientData(this); SelectionObserver->SetClientData(this);
PartSelection->AddObserver BlockSelection->AddObserver
( (
vtkCommand::ModifiedEvent, vtkCommand::ModifiedEvent,
this->SelectionObserver this->SelectionObserver
@ -109,11 +109,11 @@ vtkPV3blockMeshReader::~vtkPV3blockMeshReader()
delete [] FileName; delete [] FileName;
} }
PartSelection->RemoveObserver(this->SelectionObserver); BlockSelection->RemoveObserver(this->SelectionObserver);
CurvedEdgesSelection->RemoveObserver(this->SelectionObserver); CurvedEdgesSelection->RemoveObserver(this->SelectionObserver);
SelectionObserver->Delete(); 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"); vtkDebugMacro(<<"GetBlockSelection");
return PartSelection; return BlockSelection;
} }
int vtkPV3blockMeshReader::GetNumberOfPartArrays() int vtkPV3blockMeshReader::GetNumberOfBlockArrays()
{ {
vtkDebugMacro(<<"GetNumberOfPartArrays"); vtkDebugMacro(<<"GetNumberOfBlockArrays");
return PartSelection->GetNumberOfArrays(); return BlockSelection->GetNumberOfArrays();
} }
const char* vtkPV3blockMeshReader::GetPartArrayName(int index) const char* vtkPV3blockMeshReader::GetBlockArrayName(int index)
{ {
vtkDebugMacro(<<"GetPartArrayName"); vtkDebugMacro(<<"GetBlockArrayName");
return PartSelection->GetArrayName(index); return BlockSelection->GetArrayName(index);
} }
int vtkPV3blockMeshReader::GetPartArrayStatus(const char* name) int vtkPV3blockMeshReader::GetBlockArrayStatus(const char* name)
{ {
vtkDebugMacro(<<"GetPartArrayStatus"); vtkDebugMacro(<<"GetBlockArrayStatus");
return PartSelection->ArrayIsEnabled(name); return BlockSelection->ArrayIsEnabled(name);
} }
void vtkPV3blockMeshReader::SetPartArrayStatus void vtkPV3blockMeshReader::SetBlockArrayStatus
( (
const char* name, const char* name,
int status int status
) )
{ {
vtkDebugMacro(<<"SetPartArrayStatus"); vtkDebugMacro(<<"SetBlockArrayStatus");
if (status) if (status)
{ {
PartSelection->EnableArray(name); BlockSelection->EnableArray(name);
} }
else else
{ {
PartSelection->DisableArray(name); BlockSelection->DisableArray(name);
} }
} }
@ -399,14 +399,7 @@ void vtkPV3blockMeshReader::SelectionModifiedCallback
void* void*
) )
{ {
static_cast<vtkPV3blockMeshReader*>(clientdata)->SelectionModified(); static_cast<vtkPV3blockMeshReader*>(clientdata)->Modified();
}
void vtkPV3blockMeshReader::SelectionModified()
{
vtkDebugMacro(<<"SelectionModified");
Modified();
} }

View File

@ -84,15 +84,15 @@ public:
// Description: // Description:
// Parts (blocks) selection list control // Blocks selection list control
vtkDataArraySelection* GetPartSelection(); vtkDataArraySelection* GetBlockSelection();
int GetNumberOfPartArrays(); int GetNumberOfBlockArrays();
int GetPartArrayStatus(const char*); int GetBlockArrayStatus(const char*);
void SetPartArrayStatus(const char*, int status); void SetBlockArrayStatus(const char*, int status);
const char* GetPartArrayName(int index); const char* GetBlockArrayName(int index);
// Description: // Description:
// Parts (blocks) selection list control // CurvedEdges selection list control
vtkDataArraySelection* GetCurvedEdgesSelection(); vtkDataArraySelection* GetCurvedEdgesSelection();
int GetNumberOfCurvedEdgesArrays(); int GetNumberOfCurvedEdgesArrays();
int GetCurvedEdgesArrayStatus(const char*); int GetCurvedEdgesArrayStatus(const char*);
@ -110,8 +110,6 @@ public:
void* calldata void* calldata
); );
void SelectionModified();
protected: protected:
@ -164,7 +162,7 @@ private:
//- Dummy variable/switch to invoke a reader update //- Dummy variable/switch to invoke a reader update
int UpdateGUI; int UpdateGUI;
vtkDataArraySelection* PartSelection; vtkDataArraySelection* BlockSelection;
vtkDataArraySelection* CurvedEdgesSelection; vtkDataArraySelection* CurvedEdgesSelection;

View File

@ -49,13 +49,16 @@ defineTypeNameAndDebug(Foam::vtkPV3blockMesh, 0);
void Foam::vtkPV3blockMesh::resetCounters() void Foam::vtkPV3blockMesh::resetCounters()
{ {
// Reset mesh part ids and sizes // Reset mesh part ids and sizes
partInfoBlocks_.reset(); arrayRangeBlocks_.reset();
partInfoEdges_.reset(); arrayRangeEdges_.reset();
partInfoCorners_.reset(); arrayRangeCorners_.reset();
} }
void Foam::vtkPV3blockMesh::updateInfoBlocks() void Foam::vtkPV3blockMesh::updateInfoBlocks
(
vtkDataArraySelection* arraySelection
)
{ {
if (debug) if (debug)
{ {
@ -63,8 +66,7 @@ void Foam::vtkPV3blockMesh::updateInfoBlocks()
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl;
} }
vtkDataArraySelection* selection = reader_->GetPartSelection(); arrayRangeBlocks_.reset( arraySelection->GetNumberOfArrays() );
partInfoBlocks_ = selection->GetNumberOfArrays();
const blockMesh& blkMesh = *meshPtr_; const blockMesh& blkMesh = *meshPtr_;
const int nBlocks = blkMesh.size(); const int nBlocks = blkMesh.size();
@ -81,22 +83,25 @@ void Foam::vtkPV3blockMesh::updateInfoBlocks()
} }
// Add blockId and zoneName to GUI list // Add blockId and zoneName to GUI list
selection->AddArray(partName.c_str()); arraySelection->AddArray(partName.c_str());
} }
partInfoBlocks_ += nBlocks; arrayRangeBlocks_ += nBlocks;
if (debug) if (debug)
{ {
// just for debug info // just for debug info
getSelectedArrayEntries(selection); getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3blockMesh::updateInfoBlocks" << endl; Info<< "<end> Foam::vtkPV3blockMesh::updateInfoBlocks" << endl;
} }
} }
void Foam::vtkPV3blockMesh::updateInfoEdges() void Foam::vtkPV3blockMesh::updateInfoEdges
(
vtkDataArraySelection* arraySelection
)
{ {
if (debug) if (debug)
{ {
@ -104,8 +109,7 @@ void Foam::vtkPV3blockMesh::updateInfoEdges()
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl;
} }
vtkDataArraySelection* selection = reader_->GetCurvedEdgesSelection(); arrayRangeEdges_.reset( arraySelection->GetNumberOfArrays() );
partInfoEdges_ = selection->GetNumberOfArrays();
const blockMesh& blkMesh = *meshPtr_; const blockMesh& blkMesh = *meshPtr_;
const curvedEdgeList& edges = blkMesh.edges(); const curvedEdgeList& edges = blkMesh.edges();
@ -119,15 +123,15 @@ void Foam::vtkPV3blockMesh::updateInfoEdges()
<< edges[edgeI].type(); << edges[edgeI].type();
// Add "beg:end - type" to GUI list // 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) if (debug)
{ {
// just for debug info // just for debug info
getSelectedArrayEntries(selection); getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3blockMesh::updateInfoEdges" << endl; Info<< "<end> Foam::vtkPV3blockMesh::updateInfoEdges" << endl;
} }
@ -145,9 +149,9 @@ Foam::vtkPV3blockMesh::vtkPV3blockMesh
reader_(reader), reader_(reader),
dbPtr_(NULL), dbPtr_(NULL),
meshPtr_(NULL), meshPtr_(NULL),
partInfoBlocks_("block"), arrayRangeBlocks_("block"),
partInfoEdges_("edges"), arrayRangeEdges_("edges"),
partInfoCorners_("corners") arrayRangeCorners_("corners")
{ {
if (debug) if (debug)
{ {
@ -243,7 +247,7 @@ void Foam::vtkPV3blockMesh::updateInfo()
resetCounters(); resetCounters();
vtkDataArraySelection* partSelection = reader_->GetPartSelection(); vtkDataArraySelection* blockSelection = reader_->GetBlockSelection();
vtkDataArraySelection* edgeSelection = reader_->GetCurvedEdgesSelection(); vtkDataArraySelection* edgeSelection = reader_->GetCurvedEdgesSelection();
// enable 'internalMesh' on the first call // enable 'internalMesh' on the first call
@ -251,33 +255,33 @@ void Foam::vtkPV3blockMesh::updateInfo()
stringList enabledParts; stringList enabledParts;
stringList enabledEdges; stringList enabledEdges;
bool firstTime = false; bool firstTime = false;
if (!partSelection->GetNumberOfArrays() && !meshPtr_) if (!blockSelection->GetNumberOfArrays() && !meshPtr_)
{ {
firstTime = true; firstTime = true;
} }
else else
{ {
enabledParts = getSelectedArrayEntries(partSelection); enabledParts = getSelectedArrayEntries(blockSelection);
enabledEdges = getSelectedArrayEntries(edgeSelection); enabledEdges = getSelectedArrayEntries(edgeSelection);
} }
// Clear current mesh parts list // Clear current mesh parts list
partSelection->RemoveAllArrays(); blockSelection->RemoveAllArrays();
edgeSelection->RemoveAllArrays(); edgeSelection->RemoveAllArrays();
// need a blockMesh // need a blockMesh
updateFoamMesh(); updateFoamMesh();
// Update mesh parts list // Update mesh parts list
updateInfoBlocks(); updateInfoBlocks( blockSelection );
// Update curved edges list // Update curved edges list
updateInfoEdges(); updateInfoEdges( edgeSelection );
// restore the enabled selections // restore the enabled selections
if (!firstTime) if (!firstTime)
{ {
setSelectedArrayEntries(partSelection, enabledParts); setSelectedArrayEntries(blockSelection, enabledParts);
setSelectedArrayEntries(edgeSelection, enabledEdges); setSelectedArrayEntries(edgeSelection, enabledEdges);
} }
@ -337,7 +341,7 @@ void Foam::vtkPV3blockMesh::Update
reader_->UpdateProgress(0.1); reader_->UpdateProgress(0.1);
// Set up mesh parts selection(s) // Set up mesh parts selection(s)
updateBoolListStatus(partStatus_, reader_->GetPartSelection()); updateBoolListStatus(blockStatus_, reader_->GetBlockSelection());
// Set up curved edges selection(s) // Set up curved edges selection(s)
updateBoolListStatus(edgeStatus_, reader_->GetCurvedEdgesSelection()); updateBoolListStatus(edgeStatus_, reader_->GetCurvedEdgesSelection());

View File

@ -88,7 +88,7 @@ class vtkPV3blockMesh
// Private classes // Private classes
//- Bookkeeping for GUI checklists and the multi-block organization //- Bookkeeping for GUI checklists and the multi-block organization
class partInfo class arrayRange
{ {
const char *name_; const char *name_;
int block_; int block_;
@ -97,11 +97,11 @@ class vtkPV3blockMesh
public: public:
partInfo(const char *name, const int blockNo=0) arrayRange(const char *name, const int blockNo=0)
: :
name_(name), name_(name),
block_(blockNo), block_(blockNo),
start_(-1), start_(0),
size_(0) size_(0)
{} {}
@ -119,21 +119,25 @@ class vtkPV3blockMesh
return prev; return prev;
} }
//- Return block name
const char* name() const const char* name() const
{ {
return name_; return name_;
} }
//- Return array start index
int start() const int start() const
{ {
return start_; return start_;
} }
//- Return array end index
int end() const int end() const
{ {
return start_ + size_; return start_ + size_;
} }
//- Return sublist size
int size() const int size() const
{ {
return size_; return size_;
@ -144,16 +148,10 @@ class vtkPV3blockMesh
return !size_; return !size_;
} }
void reset() //- Reset the size to zero and optionally assign a new start
void reset(const int startAt = 0)
{ {
start_ = -1; start_ = startAt;
size_ = 0;
}
//- Assign new start and reset the size
void operator=(const int i)
{
start_ = i;
size_ = 0; size_ = 0;
} }
@ -177,22 +175,20 @@ class vtkPV3blockMesh
blockMesh* meshPtr_; blockMesh* meshPtr_;
//- Selected geometrical parts //- Selected geometrical parts
boolList partStatus_; boolList blockStatus_;
//- Selected curved edges //- Selected curved edges
boolList edgeStatus_; boolList edgeStatus_;
//- First instance and size of bleckMesh blocks //- First instance and size of bleckMesh blocks
// used to index into partStatus_ // used to index into blockStatus_
partInfo partInfoBlocks_; arrayRange arrayRangeBlocks_;
//- First instance and size of CurvedEdges //- First instance and size of CurvedEdges (only partially used)
// only partially used arrayRange arrayRangeEdges_;
partInfo partInfoEdges_;
//- First instance and size of block corners //- First instance and size of block corners (only partially used)
// only partially used arrayRange arrayRangeCorners_;
partInfo partInfoCorners_;
//- List of point numbers for rendering to window //- List of point numbers for rendering to window
List<vtkTextActor*> pointNumberTextActorsPtrs_; List<vtkTextActor*> pointNumberTextActorsPtrs_;
@ -205,7 +201,7 @@ class vtkPV3blockMesh
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
vtkDataSet* dataset, vtkDataSet* dataset,
const partInfo&, const arrayRange&,
const label datasetNo, const label datasetNo,
const std::string& datasetName const std::string& datasetName
); );
@ -215,7 +211,7 @@ class vtkPV3blockMesh
static vtkDataSet* GetDataSetFromBlock static vtkDataSet* GetDataSetFromBlock
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo&, const arrayRange&,
const label datasetNo const label datasetNo
); );
@ -224,7 +220,7 @@ class vtkPV3blockMesh
static label GetNumberOfDataSets static label GetNumberOfDataSets
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& const arrayRange&
); );
//- Update boolList from GUI selection //- Update boolList from GUI selection
@ -240,10 +236,10 @@ class vtkPV3blockMesh
// Update information helper functions // Update information helper functions
//- Internal block info //- Internal block info
void updateInfoBlocks(); void updateInfoBlocks(vtkDataArraySelection*);
//- block curved edges info //- block curved edges info
void updateInfoEdges(); void updateInfoEdges(vtkDataArraySelection*);
// Update helper functions // Update helper functions
@ -271,7 +267,7 @@ class vtkPV3blockMesh
static wordHashSet getSelected static wordHashSet getSelected
( (
vtkDataArraySelection*, vtkDataArraySelection*,
const partInfo& const arrayRange&
); );
//- Retrieve the current selections //- Retrieve the current selections
@ -281,7 +277,7 @@ class vtkPV3blockMesh
static stringList getSelectedArrayEntries static stringList getSelectedArrayEntries
( (
vtkDataArraySelection*, vtkDataArraySelection*,
const partInfo& const arrayRange&
); );
//- Set selection(s) //- Set selection(s)

View File

@ -52,9 +52,9 @@ void Foam::vtkPV3blockMesh::convertMeshBlocks
int& blockNo int& blockNo
) )
{ {
vtkDataArraySelection* selection = reader_->GetPartSelection(); vtkDataArraySelection* selection = reader_->GetBlockSelection();
partInfo& selector = partInfoBlocks_; arrayRange& range = arrayRangeBlocks_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const blockMesh& blkMesh = *meshPtr_; const blockMesh& blkMesh = *meshPtr_;
@ -70,25 +70,18 @@ void Foam::vtkPV3blockMesh::convertMeshBlocks
for for
( (
int partId = selector.start(); int partId = range.start();
partId < selector.end(); partId < range.end();
++partId, ++blockI ++partId, ++blockI
) )
{ {
if (!partStatus_[partId]) if (!blockStatus_[partId])
{ {
continue; continue;
} }
const blockDescriptor& blockDef = blkMesh[blockI].blockDef(); 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(); vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New();
// Convert Foam mesh vertices to VTK // Convert Foam mesh vertices to VTK
@ -123,7 +116,7 @@ void Foam::vtkPV3blockMesh::convertMeshBlocks
AddToBlock AddToBlock
( (
output, vtkmesh, selector, datasetNo, output, vtkmesh, range, datasetNo,
selection->GetArrayName(partId) selection->GetArrayName(partId)
); );
@ -152,9 +145,9 @@ void Foam::vtkPV3blockMesh::convertMeshEdges
) )
{ {
vtkDataArraySelection* selection = reader_->GetCurvedEdgesSelection(); 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 label datasetNo = 0; // restart at dataset 0
const blockMesh& blkMesh = *meshPtr_; const blockMesh& blkMesh = *meshPtr_;
@ -165,8 +158,8 @@ void Foam::vtkPV3blockMesh::convertMeshEdges
for for
( (
int partId = selector.start(); int partId = range.start();
partId < selector.end(); partId < range.end();
++partId, ++edgeI ++partId, ++edgeI
) )
{ {
@ -187,9 +180,7 @@ void Foam::vtkPV3blockMesh::convertMeshEdges
edgeList blkEdges = blockDef.blockShape().edges(); edgeList blkEdges = blockDef.blockShape().edges();
// find the corresponding edge within the block // find the corresponding edge within the block
label foundEdgeI = -1; label foundEdgeI = -1;
forAll(blkEdges, blkEdgeI) forAll(blkEdges, blkEdgeI)
{ {
@ -236,7 +227,7 @@ void Foam::vtkPV3blockMesh::convertMeshEdges
AddToBlock AddToBlock
( (
output, vtkmesh, selector, datasetNo, output, vtkmesh, range, datasetNo,
selection->GetArrayName(partId) selection->GetArrayName(partId)
); );
@ -269,8 +260,8 @@ void Foam::vtkPV3blockMesh::convertMeshCorners
int& blockNo int& blockNo
) )
{ {
partInfo& selector = partInfoCorners_; arrayRange& range = arrayRangeCorners_;
selector.block(blockNo); // set output block range.block(blockNo); // set output block
label datasetNo = 0; // restart at dataset 0 label datasetNo = 0; // restart at dataset 0
const pointField& blockPoints = meshPtr_->blockPointField(); const pointField& blockPoints = meshPtr_->blockPointField();
@ -310,7 +301,11 @@ void Foam::vtkPV3blockMesh::convertMeshCorners
vtkmesh->SetVerts(vtkcells); vtkmesh->SetVerts(vtkcells);
vtkcells->Delete(); vtkcells->Delete();
AddToBlock(output, vtkmesh, selector, datasetNo, partInfoCorners_.name()); AddToBlock
(
output, vtkmesh, range, datasetNo,
arrayRangeCorners_.name()
);
vtkmesh->Delete(); vtkmesh->Delete();
datasetNo++; datasetNo++;

View File

@ -71,12 +71,12 @@ void Foam::vtkPV3blockMesh::AddToBlock
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
vtkDataSet* dataset, vtkDataSet* dataset,
const partInfo& selector, const arrayRange& range,
const label datasetNo, const label datasetNo,
const std::string& datasetName const std::string& datasetName
) )
{ {
const int blockNo = selector.block(); const int blockNo = range.block();
vtkDataObject* blockDO = output->GetBlock(blockNo); vtkDataObject* blockDO = output->GetBlock(blockNo);
vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
@ -112,7 +112,7 @@ void Foam::vtkPV3blockMesh::AddToBlock
output->GetMetaData(blockNo)->Set output->GetMetaData(blockNo)->Set
( (
vtkCompositeDataSet::NAME(), vtkCompositeDataSet::NAME(),
selector.name() range.name()
); );
} }
@ -130,11 +130,11 @@ void Foam::vtkPV3blockMesh::AddToBlock
vtkDataSet* Foam::vtkPV3blockMesh::GetDataSetFromBlock vtkDataSet* Foam::vtkPV3blockMesh::GetDataSetFromBlock
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector, const arrayRange& range,
const label datasetNo const label datasetNo
) )
{ {
const int blockNo = selector.block(); const int blockNo = range.block();
vtkDataObject* blockDO = output->GetBlock(blockNo); vtkDataObject* blockDO = output->GetBlock(blockNo);
vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
@ -152,10 +152,10 @@ vtkDataSet* Foam::vtkPV3blockMesh::GetDataSetFromBlock
Foam::label Foam::vtkPV3blockMesh::GetNumberOfDataSets Foam::label Foam::vtkPV3blockMesh::GetNumberOfDataSets
( (
vtkMultiBlockDataSet* output, vtkMultiBlockDataSet* output,
const partInfo& selector const arrayRange& range
) )
{ {
const int blockNo = selector.block(); const int blockNo = range.block();
vtkDataObject* blockDO = output->GetBlock(blockNo); vtkDataObject* blockDO = output->GetBlock(blockNo);
vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
@ -191,13 +191,13 @@ Foam::wordHashSet Foam::vtkPV3blockMesh::getSelected
Foam::wordHashSet Foam::vtkPV3blockMesh::getSelected Foam::wordHashSet Foam::vtkPV3blockMesh::getSelected
( (
vtkDataArraySelection* select, vtkDataArraySelection* select,
const partInfo& selector const arrayRange& range
) )
{ {
int nElem = select->GetNumberOfArrays(); int nElem = select->GetNumberOfArrays();
wordHashSet selections(2*nElem); 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)) if (select->GetArraySetting(elemI))
{ {
@ -251,13 +251,13 @@ Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries
Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries
( (
vtkDataArraySelection* select, vtkDataArraySelection* select,
const partInfo& selector const arrayRange& range
) )
{ {
stringList selections(selector.size()); stringList selections(range.size());
label nElem = 0; 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)) if (select->GetArraySetting(elemI))
{ {
@ -270,7 +270,7 @@ Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries
if (debug) if (debug)
{ {
Info<< "available("; Info<< "available(";
for (int elemI = selector.start(); elemI < selector.end(); ++elemI) for (int elemI = range.start(); elemI < range.end(); ++elemI)
{ {
Info<< " \"" << select->GetArrayName(elemI) << "\""; Info<< " \"" << select->GetArrayName(elemI) << "\"";
} }

View File

@ -689,13 +689,13 @@ HTML_FILE_EXTENSION = .html
# each generated HTML page. If it is left blank doxygen will generate a # each generated HTML page. If it is left blank doxygen will generate a
# standard header. # 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 # 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 # each generated HTML page. If it is left blank doxygen will generate a
# standard footer. # 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 # 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 # style sheet that is used by each HTML page. It can be used to

View File

@ -1,13 +1,17 @@
curvedEdges/CatmullRomSpline.C
curvedEdges/polyLine.C
curvedEdges/arcEdge.C
curvedEdges/curvedEdge.C curvedEdges/curvedEdge.C
curvedEdges/lineEdge.C curvedEdges/lineEdge.C
curvedEdges/polyLine.C
curvedEdges/polyLineEdge.C curvedEdges/polyLineEdge.C
curvedEdges/arcEdge.C
curvedEdges/spline.C
curvedEdges/BSpline.C
curvedEdges/simpleSplineEdge.C
curvedEdges/polySplineEdge.C
curvedEdges/lineDivide.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/blockDescriptor.C
blockDescriptor/blockDescriptorEdges.C blockDescriptor/blockDescriptorEdges.C

View File

@ -89,7 +89,7 @@ Foam::blockDescriptor::blockDescriptor
{ {
zoneName_ = t.wordToken(); zoneName_ = t.wordToken();
// Get the next token // Examine next token
is >> t; is >> t;
} }
is.putBack(t); is.putBack(t);
@ -129,7 +129,12 @@ Foam::blockDescriptor::blockDescriptor
scalarList expRatios(is); 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 // x-direction
expand_[0] = expRatios[0]; expand_[0] = expRatios[0];

View File

@ -120,8 +120,8 @@ void Foam::blockDescriptor::setEdge
// divide the line // divide the line
lineDivide divEdge(cedge, dim, 1.0/(gExp+SMALL)); lineDivide divEdge(cedge, dim, 1.0/(gExp+SMALL));
pointField p = divEdge.points(); const pointField& p = divEdge.points();
scalarList d = divEdge.lambdaDivisions(); const scalarList& d = divEdge.lambdaDivisions();
edgePoints_[edgeI].setSize(p.size()); edgePoints_[edgeI].setSize(p.size());
edgeWeights_[edgeI].setSize(d.size()); edgeWeights_[edgeI].setSize(d.size());

View File

@ -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;
}
// ************************************************************************* //

View File

@ -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
// ************************************************************************* //

View File

@ -61,7 +61,7 @@ Foam::cylindricalCS Foam::arcEdge::calcAngle()
scalar fact = 0.5*(bsqr - adotb)/denom; 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_; centre += p1_;
@ -71,11 +71,10 @@ Foam::cylindricalCS Foam::arcEdge::calcAngle()
vector r3(p3_ - centre); vector r3(p3_ - centre);
// find angles // find angles
scalar tmp = (r3&r1)/(mag(r3)*mag(r1)); angle_ = radToDeg(acos((r3 & r1)/(mag(r3) * mag(r1))));
angle_ = radToDeg(acos(tmp));
// check if the vectors define an exterior or an interior arcEdge // 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_; angle_ = 360.0 - angle_;
} }
@ -99,7 +98,7 @@ Foam::cylindricalCS Foam::arcEdge::calcAngle()
radius_ = mag(r3); radius_ = mag(r3);
// set up and return the local coordinate system // 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 * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * 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) if (lambda < 0 || lambda > 1)
{ {
@ -146,7 +145,7 @@ Foam::vector Foam::arcEdge::position(const scalar lambda) const
{ {
return p1_; return p1_;
} }
else if (lambda > 1-SMALL) else if (lambda > 1 - SMALL)
{ {
return p3_; return p3_;
} }

View File

@ -54,15 +54,16 @@ class arcEdge
{ {
// Private data // Private data
vector p1_, p2_, p3_; point p1_, p2_, p3_;
cylindricalCS cs_;
scalar angle_; scalar angle_;
scalar radius_; scalar radius_;
cylindricalCS cs_;
cylindricalCS calcAngle();
// Private Member Functions // Private Member Functions
//- Calculate the coordinate system, angle and radius
cylindricalCS calcAngle();
//- Disallow default bitwise copy construct //- Disallow default bitwise copy construct
arcEdge(const arcEdge&); arcEdge(const arcEdge&);
@ -96,9 +97,9 @@ public:
// Member Functions // Member Functions
//- Return the position of a point on the curve given by //- Return the point position corresponding to the curve parameter
// the parameter 0 <= lambda <= 1 // 0 <= lambda <= 1
vector position(const scalar) const; point position(const scalar) const;
//- Return the length of the curve //- Return the length of the curve
scalar length() const; scalar length() const;

View File

@ -108,27 +108,27 @@ Foam::autoPtr<Foam::curvedEdge> Foam::curvedEdge::New
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::pointField Foam::curvedEdge::knotlist Foam::pointField Foam::curvedEdge::appendEndPoints
( (
const pointField& points, const pointField& points,
const label start, const label start,
const label end, const label end,
const pointField& otherknots const pointField& otherKnots
) )
{ {
pointField newPoints(otherknots.size() + 2); pointField allKnots(otherKnots.size() + 2);
// start/end knots // start/end knots
newPoints[0] = points[start]; allKnots[0] = points[start];
newPoints[otherknots.size() + 1] = points[end]; allKnots[otherKnots.size() + 1] = points[end];
// intermediate knots // intermediate knots
forAll(otherknots, knotI) forAll(otherKnots, knotI)
{ {
newPoints[knotI+1] = otherknots[knotI]; allKnots[knotI+1] = otherKnots[knotI];
} }
return newPoints; return allKnots;
} }

View File

@ -26,8 +26,8 @@ Class
Foam::curvedEdge Foam::curvedEdge
Description Description
Define a curved edge in space that is parameterised for Define a curved edge that is parameterized for 0<lambda<1
0<lambda<1 from the beginning to the end point. between the start and end point.
SourceFiles SourceFiles
curvedEdge.C curvedEdge.C
@ -62,6 +62,19 @@ protected:
const label start_; const label start_;
const label end_; const label end_;
// Protected Member Functions
//- Return a complete point field by appending the start/end points
// to the given list
static pointField appendEndPoints
(
const pointField&,
const label start,
const label end,
const pointField& otherKnots
);
public: public:
//- Runtime type information //- Runtime type information
@ -136,23 +149,13 @@ public:
// - -1: same edge, but different orientation // - -1: same edge, but different orientation
inline int compare(const label start, const label end) const; inline int compare(const label start, const label end) const;
//- Return the position of a point on the curve given by //- Return the point position corresponding to the curve parameter
// the parameter 0 <= lambda <= 1 // 0 <= lambda <= 1
virtual vector position(const scalar) const = 0; virtual point position(const scalar) const = 0;
//- Return the length of the curve //- Return the length of the curve
virtual scalar length() const = 0; virtual scalar length() const = 0;
//- Return a complete knotList by adding the start/end points
// to the given list
static pointField knotlist
(
const pointField&,
const label start,
const label end,
const pointField& otherknots
);
// Member operators // Member operators

View File

@ -67,7 +67,4 @@ inline int Foam::curvedEdge::compare(const edge& e) const
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

@ -115,13 +115,13 @@ Foam::BSpline::BSpline
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::vector Foam::BSpline::realPosition(const scalar mu) const Foam::point Foam::BSpline::realPosition(const scalar mu) const
{ {
return spline::position(mu); return spline::position(mu);
} }
Foam::vector Foam::BSpline::position(const scalar mu) const Foam::point Foam::BSpline::position(const scalar mu) const
{ {
return spline::position((1.0/(nKnots() - 1))*(1.0 + mu*(nKnots() - 3))); return spline::position((1.0/(nKnots() - 1))*(1.0 + mu*(nKnots() - 3)));
} }

View File

@ -82,13 +82,13 @@ public:
// Member Functions // Member Functions
//- Return the real position of a point on the curve given by //- Return the real point position corresponding to the curve parameter
// the parameter 0 <= lambda <= 1 // 0 <= lambda <= 1
vector realPosition(const scalar lambda) const; point realPosition(const scalar lambda) const;
//- Return the position of a point on the curve given by //- Return the point position corresponding to the curve parameter
// the parameter 0 <= lambda <= 1 // 0 <= lambda <= 1
vector position(const scalar lambda) const; point position(const scalar lambda) const;
//- Return the length of the curve //- Return the length of the curve
scalar length() const; scalar length() const;

View File

@ -56,7 +56,7 @@ Foam::pointField Foam::polySplineEdge::intervening
{ {
BSpline spl BSpline spl
( (
knotlist(points_, start_, end_, otherknots), appendEndPoints(curvedEdge::points_, start_, end_, otherknots),
fstend, fstend,
sndend sndend
); );
@ -73,7 +73,7 @@ Foam::pointField Foam::polySplineEdge::intervening
interval /= nBetweenKnots + 1; interval /= nBetweenKnots + 1;
pointField ans(nSize); pointField ans(nSize);
ans[0] = points_[start_]; ans[0] = curvedEdge::points_[start_];
register scalar index(init); register scalar index(init);
for (register label i=1; i<nSize-1; i++) for (register label i=1; i<nSize-1; i++)
@ -82,7 +82,7 @@ Foam::pointField Foam::polySplineEdge::intervening
ans[i] = spl.realPosition(index); ans[i] = spl.realPosition(index);
} }
ans[nSize-1] = points_[end_]; ans[nSize-1] = curvedEdge::points_[end_];
return ans; return ans;
} }
@ -128,14 +128,14 @@ Foam::polySplineEdge::polySplineEdge
vector fstend(is); vector fstend(is);
vector sndend(is); vector sndend(is);
controlPoints_ = intervening(otherKnots_, nInterKnots, fstend, sndend); polyLine::points_ = intervening(otherKnots_, nInterKnots, fstend, sndend);
calcDistances(); calcParam();
} }
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::vector Foam::polySplineEdge::position(const scalar mu) const Foam::point Foam::polySplineEdge::position(const scalar mu) const
{ {
return polyLine::position(mu); return polyLine::position(mu);
} }

View File

@ -26,7 +26,7 @@ Class
Foam::polySplineEdge Foam::polySplineEdge
Description Description
A spline representation via a polyLine A curvedEdge interface for B-splines.
SourceFiles SourceFiles
polySplineEdge.C polySplineEdge.C
@ -90,16 +90,16 @@ public:
polySplineEdge(const pointField&, Istream&); polySplineEdge(const pointField&, Istream&);
// Destructor //- Destructor
virtual ~polySplineEdge()
virtual ~polySplineEdge(){} {}
// Member Functions // Member Functions
//- Return the position of a point on the curve given by //- Return the point position corresponding to the curve parameter
// the parameter 0 <= lambda <= 1 // 0 <= lambda <= 1
vector position(const scalar mu) const; point position(const scalar mu) const;
//- Return the length of the curve //- Return the length of the curve
scalar length() const; scalar length() const;

View File

@ -48,7 +48,7 @@ Foam::simpleSplineEdge::simpleSplineEdge
) )
: :
curvedEdge(points, start, end), curvedEdge(points, start, end),
BSpline(knotlist(points, start, end, otherknots)) BSpline(appendEndPoints(points, start, end, otherknots))
{} {}
@ -63,20 +63,20 @@ Foam::simpleSplineEdge::simpleSplineEdge
) )
: :
curvedEdge(points, start, end), curvedEdge(points, start, end),
BSpline(knotlist(points, start, end, otherknots), fstend, sndend) BSpline(appendEndPoints(points, start, end, otherknots), fstend, sndend)
{} {}
Foam::simpleSplineEdge::simpleSplineEdge(const pointField& points, Istream& is) Foam::simpleSplineEdge::simpleSplineEdge(const pointField& points, Istream& is)
: :
curvedEdge(points, is), curvedEdge(points, is),
BSpline(knotlist(points, start_, end_, pointField(is))) BSpline(appendEndPoints(points, start_, end_, pointField(is)))
{} {}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::vector Foam::simpleSplineEdge::position(const scalar mu) const Foam::point Foam::simpleSplineEdge::position(const scalar mu) const
{ {
return BSpline::position(mu); return BSpline::position(mu);
} }

View File

@ -26,7 +26,7 @@ Class
Foam::simpleSplineEdge Foam::simpleSplineEdge
Description Description
The actual access class for Bspline A curvedEdge interface for B-splines.
SourceFiles SourceFiles
simpleSplineEdge.C simpleSplineEdge.C
@ -102,9 +102,9 @@ public:
// Member Functions // Member Functions
//- Return the position of a point on the simple spline curve given by //- Return the point position corresponding to the curve parameter
// the parameter 0 <= lambda <= 1 // 0 <= lambda <= 1
vector position(const scalar mu) const; point position(const scalar) const;
//- Return the length of the simple spline curve //- Return the length of the simple spline curve
scalar length() const; scalar length() const;

View File

@ -72,9 +72,9 @@ Foam::spline::spline(const pointField& knotPoints)
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::vector Foam::spline::position(const scalar mu) const Foam::point Foam::spline::position(const scalar mu) const
{ {
vector loc(vector::zero); point loc(point::zero);
for (register label i=0; i < knots_.size(); i++) for (register label i=0; i < knots_.size(); i++)
{ {

View File

@ -81,6 +81,13 @@ public:
// Access // Access
//- Return the knot points in the spline
const pointField& knotPoints() const
{
return knots_;
}
//- Return the number of knots in the spline //- Return the number of knots in the spline
label nKnots() const label nKnots() const
{ {
@ -88,9 +95,9 @@ public:
} }
//- Return the position of a point on the curve given by //- Return the point position corresponding to the curve parameter
// the parameter 0 <= lambda <= 1 // 0 <= lambda <= 1
vector position(const scalar) const; point position(const scalar) const;
//- Return the length of the spline curve //- Return the length of the spline curve
scalar length() const; scalar length() const;

View File

@ -55,14 +55,14 @@ class lineDivide
// Private data // Private data
pointField points_; pointField points_;
scalarList divisions_; scalarList divisions_;
public: public:
// Constructors // Constructors
//- Construct from components //- Construct from components with discretization and expansion ratio
// discretization and expansion ration
lineDivide lineDivide
( (
const curvedEdge&, const curvedEdge&,

View File

@ -46,23 +46,23 @@ Foam::lineEdge::lineEdge
const label end const label end
) )
: :
curvedEdge(points, start, end), curvedEdge(points, start, end)
startPoint_(points_[start_]),
direction_(points_[end_] - points_[start_])
{} {}
Foam::lineEdge::lineEdge(const pointField& points, Istream& is) Foam::lineEdge::lineEdge(const pointField& points, Istream& is)
: :
curvedEdge(points, is), curvedEdge(points, is)
startPoint_(points_[start_]),
direction_(points_[end_] - points_[start_])
{} {}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * * //
Foam::lineEdge::~lineEdge()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::vector Foam::lineEdge::position(const scalar lambda) const Foam::point Foam::lineEdge::position(const scalar lambda) const
{ {
if (lambda < 0 || lambda > 1) if (lambda < 0 || lambda > 1)
{ {
@ -71,13 +71,13 @@ Foam::vector Foam::lineEdge::position(const scalar lambda) const
<< abort(FatalError); << abort(FatalError);
} }
return startPoint_ + lambda*direction_; return points_[start_] + lambda * (points_[end_] - points_[start_]);
} }
Foam::scalar Foam::lineEdge::length() const Foam::scalar Foam::lineEdge::length() const
{ {
return mag(direction_); return mag(points_[end_] - points_[start_]);
} }

View File

@ -26,7 +26,7 @@ Class
Foam::lineEdge Foam::lineEdge
Description 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 SourceFiles
lineEdge.C lineEdge.C
@ -52,14 +52,6 @@ class lineEdge
: :
public curvedEdge 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 // Private Member Functions
//- Disallow default bitwise copy construct //- Disallow default bitwise copy construct
@ -68,7 +60,6 @@ class lineEdge
//- Disallow default bitwise assignment //- Disallow default bitwise assignment
void operator=(const lineEdge&); void operator=(const lineEdge&);
public: public:
//- Runtime type information //- Runtime type information
@ -79,20 +70,19 @@ public:
//- Construct from components //- Construct from components
lineEdge(const pointField&, const label start, const label end); lineEdge(const pointField&, const label start, const label end);
//- Construct from Istream setting pointsList //- Construct from Istream with a pointField
lineEdge(const pointField&, Istream&); lineEdge(const pointField&, Istream&);
// Destructor //- Destructor
virtual ~lineEdge();
virtual ~lineEdge(){}
// Member Functions // Member Functions
//- Return the position of a point on the curve given by //- Return the point position corresponding to the curve parameter
// the parameter 0 <= lambda <= 1 // 0 <= lambda <= 1
vector position(const scalar) const; point position(const scalar) const;
//- Return the length of the curve //- Return the length of the curve
scalar length() const; scalar length() const;

View File

@ -29,29 +29,26 @@ License
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// calcDistances generates the distances_ lookup table (cumulative void Foam::polyLine::calcParam()
// distance along the line) from the individual vectors to the points
void Foam::polyLine::calcDistances()
{ {
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<distances_.size(); i++) for (label i=1; i < param_.size(); i++)
{ {
distances_[i] = distances_[i-1] + param_[i] = param_[i-1] + mag(points_[i] - points_[i-1]);
mag(controlPoints_[i] - controlPoints_[i-1]);
} }
// normalize // normalize on the interval 0-1
lineLength_ = distances_.last(); lineLength_ = param_.last();
for (label i=1; i<distances_.size(); i++) for (label i=1; i < param_.size() - 1; i++)
{ {
distances_[i] /= lineLength_; param_[i] /= lineLength_;
} }
param_.last() = 1.0;
} }
else else
{ {
@ -65,20 +62,75 @@ void Foam::polyLine::calcDistances()
Foam::polyLine::polyLine(const pointField& ps) Foam::polyLine::polyLine(const pointField& ps)
: :
controlPoints_(ps), points_(ps),
distances_(0), lineLength_(0.0),
lineLength_(0.0) param_(0)
{ {
calcDistances(); calcParam();
} }
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::vector Foam::polyLine::position(const scalar lambda) const const Foam::pointField& Foam::polyLine::points() const
{
return points_;
}
Foam::label Foam::polyLine::nSegments() const
{
return points_.size()-1;
}
Foam::label Foam::polyLine::localParameter(scalar& lambda) const
{ {
// check range of lambda // check range of lambda
if (lambda < 0 || lambda > 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) if (lambda < 0 || lambda > 1)
{ {
FatalErrorIn("polyLine::position(const scalar)") FatalErrorIn("polyLine::position(const scalar)")
@ -87,37 +139,36 @@ Foam::vector Foam::polyLine::position(const scalar lambda) const
<< abort(FatalError); << abort(FatalError);
} }
// Quick calc of endpoints // check endpoints
if (lambda < SMALL) if (lambda < SMALL)
{ {
return controlPoints_[0]; return points_[0];
} }
else if (lambda > 1 - SMALL) else if (lambda > 1 - SMALL)
{ {
return controlPoints_.last(); return points_.last();
} }
// search table of cumulative distance to find which linesegment we // search table of cumulative distances to find which line-segment
// are on // we are on. Check the upper bound.
label i(0); label segmentI = 1;
do while (param_[segmentI] < lambda)
{ {
i++; ++segmentI;
} while (distances_[i] < lambda); }
--segmentI; // we now want the lower bound
i--; // we overshot!
// construct position vector // linear interpolation
scalar offsetDist = return
(lambda - distances_[i]) (
/(distances_[i+1] - distances_[i]); points_[segmentI]
+ ( points_[segmentI+1] - points_[segmentI] )
vector offsetV = controlPoints_[i+1] - controlPoints_[i]; * ( lambda - param_[segmentI] )
/ ( param_[segmentI+1] - param_[segmentI] )
return controlPoints_[i] + offsetDist*offsetV; );
} }

View File

@ -26,10 +26,8 @@ Class
Foam::polyLine Foam::polyLine
Description Description
Defines a curvedEdge in terms of a series of straight line segments. A series of straight line segments, which can also be interpreted as
a series of control points for splines, etc.
This is the basic polyLine class which implements just the line
(no topology - it is not derived from curvedEdge)
SourceFiles SourceFiles
polyLine.C polyLine.C
@ -66,15 +64,26 @@ protected:
// Protected data // Protected data
pointField controlPoints_; //- The control points or ends of each segments
scalarList distances_; pointField points_;
//- The real line length
scalar lineLength_; scalar lineLength_;
//- The rational (0-1) cumulative parameter value for each point
scalarList param_;
// Protected member functions // 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: public:
// Constructors // Constructors
@ -85,9 +94,15 @@ public:
// Member Functions // Member Functions
//- Return the position of a point on the curve given by //- Return const-access to the control-points
// the parameter 0 <= lambda <= 1 const pointField& points() const;
vector position(const scalar) 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 //- Return the length of the curve
scalar length() const; scalar length() const;

View File

@ -44,24 +44,30 @@ Foam::polyLineEdge::polyLineEdge
const pointField& ps, const pointField& ps,
const label start, const label start,
const label end, const label end,
const pointField& otherpoints const pointField& otherPoints
) )
: :
curvedEdge(ps, start, end), curvedEdge(ps, start, end),
polyLine(knotlist(ps, start, end, otherpoints)) polyLine(appendEndPoints(ps, start_, end_, otherPoints))
{} {}
Foam::polyLineEdge::polyLineEdge(const pointField& ps, Istream& is) Foam::polyLineEdge::polyLineEdge(const pointField& ps, Istream& is)
: :
curvedEdge(ps, is), curvedEdge(ps, is),
polyLine(knotlist(ps, start_, end_, pointField(is))) polyLine(appendEndPoints(ps, start_, end_, pointField(is)))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::polyLineEdge::~polyLineEdge()
{} {}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::vector Foam::polyLineEdge::position(const scalar lambda) const Foam::point Foam::polyLineEdge::position(const scalar lambda) const
{ {
return polyLine::position(lambda); return polyLine::position(lambda);
} }

View File

@ -26,8 +26,7 @@ Class
Foam::polyLineEdge Foam::polyLineEdge
Description Description
Defines a curvedEdge in terms of a series of straight line segments. A curvedEdge defined in terms of a series of straight line segments.
This is the public face of polyLine
SourceFiles SourceFiles
polyLineEdge.C polyLineEdge.C
@ -84,16 +83,15 @@ public:
polyLineEdge(const pointField&, Istream&); polyLineEdge(const pointField&, Istream&);
// Destructor //- Destructor
virtual ~polyLineEdge();
virtual ~polyLineEdge(){}
// Member Functions // Member Functions
//- Return the position of a point on the curve given by //- Return the point position corresponding to the curve parameter
// the parameter 0 <= lambda <= 1 // 0 <= lambda <= 1
vector position(const scalar lambda) const; point position(const scalar lambda) const;
//- Return the length of the curve //- Return the length of the curve
scalar length() const; scalar length() const;

View File

@ -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();
}
// ************************************************************************* //

View File

@ -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
// ************************************************************************* //