Commit a123eff3 authored by hrchilds's avatar hrchilds

Modifications for doing streamlines with on demand processing combined

with file format readers that do their own domain decomposition.


git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@6656 18c085ea-50e0-402c-830e-de6fd14e8384
parent 790e119d
......@@ -84,12 +84,16 @@
// Hank Childs, Thu Jan 5 15:36:14 PST 2006
// Initialized isNodal.
//
// Hank Childs, Sun Mar 22 14:13:16 CDT 2009
// Initialized onDemandProcessing.
//
// ****************************************************************************
avtCMFEExpression::avtCMFEExpression()
{
varDim = 1;;
isNodal = false;
onDemandProcessing = false;
}
......@@ -352,6 +356,9 @@ avtCMFEExpression::ProcessArguments(ArgsExpr *args,
// Allow for expressions to be the "CMFE var"
// (example: <conn_cmfe([1]id:p+1> ... p+1 is an expression)
//
// Hank Childs, Sun Mar 22 14:13:16 CDT 2009
// Add support for on demand streaming.
//
// ****************************************************************************
void
......@@ -404,6 +411,7 @@ avtCMFEExpression::Execute()
}
spec->GetDataRequest()->SetTimestep(actualTimestep);
spec->GetDataRequest()->SetDesiredGhostDataType(ghostNeeds);
spec->SetOnDemandStreaming(onDemandProcessing);
avtExpressionEvaluatorFilter *eef = new avtExpressionEvaluatorFilter;
eef->SetInput(dob);
......@@ -638,6 +646,7 @@ avtCMFEExpression::ExamineContract(avtContract_p spec)
firstDBTime = spec->GetDataRequest()->GetTimestep();
firstDBSIL = spec->GetDataRequest()->GetRestriction();
ghostNeeds = spec->GetDataRequest()->GetDesiredGhostDataType();
onDemandProcessing = spec->DoingOnDemandStreaming();
}
......@@ -80,6 +80,9 @@ class avtDatabase;
// Hank Childs, Thu Apr 10 16:10:33 PDT 2008
// Add a data member to manage making consistent ghost zone requests.
//
// Hank Childs, Mon Mar 23 11:02:55 CDT 2009
// Add data member for on demand streaming.
//
// ****************************************************************************
class EXPRESSION_API avtCMFEExpression : public avtExpressionFilter
......@@ -110,6 +113,7 @@ class EXPRESSION_API avtCMFEExpression : public avtExpressionFilter
int firstDBTime;
avtSILRestriction_p firstDBSIL;
avtGhostDataType ghostNeeds;
bool onDemandProcessing;
std::string argument_expression;
int varDim;
bool isNodal;
......
......@@ -128,8 +128,11 @@ avtConnCMFEExpression::PerformCMFE(avtDataTree_p in1, avtDataTree_p in2,
// Hank Childs, Fri Oct 7 11:07:33 PDT 2005
// Modify warning message to account for material selection.
//
// Cyrus Harrison, Tue Mar 27 15:37:22 PDT 200
// Fixed unreachable else statement and incorrect error message
// Cyrus Harrison, Tue Mar 27 15:37:22 PDT 200
// Fixed unreachable else statement and incorrect error message
//
// Hank Childs, Sun Mar 22 14:13:16 CDT 2009
// Beef up debug statements in exception case.
//
// ****************************************************************************
......@@ -309,6 +312,9 @@ avtConnCMFEExpression::ExecuteTree(avtDataTree_p in1, avtDataTree_p in2,
}
else
{
debug1 << "Number of children = " << nc1 << endl;
debug1 << "In1(j) " << (int) in1->ChildIsPresent(j) << endl;
debug1 << "In2(j) " << (int) in2->ChildIsPresent(j) << endl;
EXCEPTION1(InvalidMergeException, "The databases cannot be "
"compared because they have a different number of domains.");
}
......
......@@ -93,12 +93,16 @@ void *avtExpressionEvaluatorFilter::getDDFCallbackArgs = NULL;
// Hank Childs, Fri Dec 31 11:47:01 PST 2004
// Initialize termsrc.
//
// Hank Childs, Mon Mar 23 11:02:55 CDT 2009
// Initialize onDemandProcessing.
//
// ****************************************************************************
avtExpressionEvaluatorFilter::avtExpressionEvaluatorFilter()
{
termsrc = NULL;
currentTimeState = 0;
onDemandProcessing = false;
}
......@@ -160,6 +164,9 @@ avtExpressionEvaluatorFilter::~avtExpressionEvaluatorFilter()
// Hank Childs, Mon Sep 15 16:30:50 PST 2008
// Deleted termsrc to free up memory for the next pipeline operations.
//
// Hank Childs, Mon Mar 23 11:02:55 CDT 2009
// Set contract with whether we are doing "onDemandProcessing".
//
// ****************************************************************************
void
......@@ -193,6 +200,7 @@ avtExpressionEvaluatorFilter::Execute(void)
new avtDataRequest(lastUsedSpec->GetDataRequest());
new_dataRequest->SetTimestep(currentTimeState);
contract = new avtContract(contract, new_dataRequest);
contract->SetOnDemandStreaming(onDemandProcessing);
bottom->Update(contract);
GetOutput()->Copy(*(bottom->GetOutput()));
} else {
......@@ -861,12 +869,16 @@ avtExpressionEvaluatorFilter::QueryCoords(const std::string &var,
//
// Modifications:
//
// Hank Childs, Mon Mar 23 11:02:55 CDT 2009
// Examine whether we are doing on demand processing.
//
// ****************************************************************************
void
avtExpressionEvaluatorFilter::ExamineContract(avtContract_p contract)
{
currentTimeState = contract->GetDataRequest()->GetTimestep();
onDemandProcessing = contract->DoingOnDemandStreaming();
}
// ****************************************************************************
......
......@@ -119,6 +119,10 @@ typedef avtDDF * (*GetDDFCallback)(void *, const char *);
// Hank Childs, Mon Dec 10 17:49:02 PST 2007
// Add data member for keeping track of expressions generated.
//
// Hank Childs, Mon Mar 23 11:02:55 CDT 2009
// Add data member for keeping track of whether we are doing on demand
// processing.
//
// ****************************************************************************
class EXPRESSION_API avtExpressionEvaluatorFilter
......@@ -164,7 +168,7 @@ class EXPRESSION_API avtExpressionEvaluatorFilter
protected:
ExprPipelineState pipelineState;
avtContract_p lastUsedSpec;
avtContract_p lastUsedSpec;
avtSourceFromAVTDataset *termsrc;
std::vector<std::string> expr_list_fromLastTime;
......@@ -173,6 +177,7 @@ class EXPRESSION_API avtExpressionEvaluatorFilter
private:
int currentTimeState;
bool onDemandProcessing;
void VerifyVariableTypes(void);
};
......
......@@ -153,6 +153,9 @@ Consider the leaveDomains SLs and the balancing at the same time.
// Dave Pugmire, Tue Mar 10 12:41:11 EDT 2009
// Generalized domain to include domain/time. Pathine cleanup.
//
// Hank Childs, Sun Mar 22 11:30:40 CDT 2009
// Initialize specifyPoint.
//
// ****************************************************************************
avtStreamlineFilter::avtStreamlineFilter()
......@@ -176,6 +179,7 @@ avtStreamlineFilter::avtStreamlineFilter()
relTol = 1e-7;
absTol = 0;
intervalTree = NULL;
specifyPoint = false;
solver = NULL;
dataSpatialDimension = 3;
......@@ -386,10 +390,14 @@ avtStreamlineFilter::SetDomain(avtStreamlineWrapper *slSeg)
// Dave Pugmire, Mon Mar 16 15:05:14 EDT 2009
// Make DomainType a const reference.
//
// Hank Childs, Sun Mar 22 13:31:08 CDT 2009
// Add support for getting the "domain" by using a point.
//
// ****************************************************************************
vtkDataSet *
avtStreamlineFilter::GetDomain(const DomainType &domain)
avtStreamlineFilter::GetDomain(const DomainType &domain, double X, double Y,
double Z)
{
//debug5<<"GetDomain("<<domain<<");\n";
vtkDataSet *ds = NULL;
......@@ -397,8 +405,16 @@ avtStreamlineFilter::GetDomain(const DomainType &domain)
debug5<<"OperatingOnDemand() = "<<OperatingOnDemand()<<endl;
if (OperatingOnDemand())
{
ds = avtDatasetOnDemandFilter::GetDomain(domain.domain,
domain.timeStep);
if (specifyPoint)
{
ds = avtDatasetOnDemandFilter::GetDataAroundPoint(X,Y,Z,
domain.timeStep);
}
else
{
ds = avtDatasetOnDemandFilter::GetDomain(domain.domain,
domain.timeStep);
}
}
else
{
......@@ -1095,9 +1111,9 @@ avtStreamlineFilter::Execute(void)
//
// Modifications:
//
// Hank Childs, Mon Jul 21 13:09:13 PDT 2008
// Remove the "area code" from the initialization so it will compile on
// my box.
// Hank Childs, Mon Jul 21 13:09:13 PDT 2008
// Remove the "area code" from the initialization so it will compile on
// my box.
//
// Dave Pugmire, Wed Aug 13 14:11:04 EST 2008
// Add dataSpatialDimension
......@@ -1114,6 +1130,10 @@ avtStreamlineFilter::Execute(void)
// Dave Pugmire, Tue Mar 10 12:41:11 EDT 2009
// Generalized domain to include domain/time. Pathine cleanup.
//
// Hank Childs, Mon Mar 23 11:02:55 CDT 2009
// Add handling for the case where we load data on demand using point
// selections.
//
// ****************************************************************************
void
......@@ -1124,22 +1144,42 @@ avtStreamlineFilter::Initialize()
// Get/Compute the interval tree.
avtIntervalTree *it_tmp = GetMetaData()->GetSpatialExtents();
bool dontUseIntervalTree = false;
if (GetInput()->GetInfo().GetAttributes().GetDynamicDomainDecomposition())
{
// The reader returns an interval tree with one domain (for everything).
// This is not what we want. So forget about this one, as we will be
// better off calculating one.
it_tmp = NULL;
debug1<<"HANK's CHANGE\n";
dontUseIntervalTree = true;
}
if (it_tmp == NULL)
if (it_tmp == NULL || dontUseIntervalTree)
{
if (OperatingOnDemand())
{
// It should be there, or else we would have precluded
// OnDemand processing in the method CheckOnDemandViability.
// Basically, this should never happen, so throw an exception.
EXCEPTION0(ImproperUseException);
if (GetInput()->GetInfo().GetAttributes().GetDynamicDomainDecomposition())
{
// We are going to assume that the format that operates on
// demand can accept hints about where the data lies and return
// that data.
// (This was previously an exception, so we haven't taken too
// far of a step backwards with this assumption.)
debug1 << "This file format reader does dynamic decomposition." << endl;
debug1 << "We are assuming it can handle hints about what data "
<< "to read." << endl;
specifyPoint = true;
// Use the dummy interval tree, so we have something that fits
// the existing interface.
// Make a copy so it doesn't get deleted out from underneath us.
intervalTree = new avtIntervalTree(it_tmp);
}
else
{
// It should be there, or else we would have precluded
// OnDemand processing in the method CheckOnDemandViability.
// Basically, this should never happen, so throw an exception.
EXCEPTION0(ImproperUseException);
}
}
else
intervalTree = GetTypedInput()->CalculateSpatialIntervalTree();
......@@ -1282,6 +1322,7 @@ bool
avtStreamlineFilter::PointInDomain(avtVector &pt, DomainType &domain)
{
debug5<< "avtStreamlineFilter::PointInDomain("<<pt<<", dom= "<<domain<<");\n";
// DAVE: HERE'S A SPOT
vtkDataSet *ds = GetDomain(domain);
if (ds == NULL)
......@@ -1668,6 +1709,7 @@ avtStreamlineFilter::IntegrateStreamline(avtStreamlineWrapper *slSeg, int maxSte
slSeg->status = avtStreamlineWrapper::UNSET;
//Get the required domain.
// DAVE: HERE'S A SPOT
vtkDataSet *ds = GetDomain(slSeg->domain);
if (ds == NULL)
{
......
......@@ -168,6 +168,9 @@ class DomainType;
// Dave Pugmire, Mon Mar 16 15:05:14 EDT 2009
// Make DomainType a const reference.
//
// Hank Childs, Sun Mar 22 11:30:40 CDT 2009
// Added specifyPoint data member.
//
// ****************************************************************************
class AVTFILTERS_API avtStreamlineFilter : public avtDatasetOnDemandFilter
......@@ -230,6 +233,7 @@ class AVTFILTERS_API avtStreamlineFilter : public avtDatasetOnDemandFilter
bool doPathlines;
avtIntervalTree *intervalTree;
bool specifyPoint;
avtIVPSolver *solver;
int numDomains, numTimeSteps, cacheQLen;
......@@ -264,7 +268,7 @@ class AVTFILTERS_API avtStreamlineFilter : public avtDatasetOnDemandFilter
vtkDataSet *ds,
double *extents,
int maxSteps=-1);
virtual vtkDataSet *GetDomain(const DomainType &);
virtual vtkDataSet *GetDomain(const DomainType &, double = 0.0, double = 0.0, double = 0.0);
virtual int GetTimeStep(double &t) const;
virtual bool DomainLoaded(DomainType &) const;
......
......@@ -48,6 +48,7 @@
#include <avtDataTree.h>
#include <avtExtents.h>
#include <avtOriginatingSource.h>
#include <avtPointSelection.h>
#include <ImproperUseException.h>
#include <IncompatibleDomainListsException.h>
......@@ -198,6 +199,45 @@ avtDatasetOnDemandFilter::GetDomain(int domainId,
return rv;
}
// ****************************************************************************
// Method: avtDatasetOnDemandFilter::GetDataAroundPoint
//
// Purpose:
// Forces a pipeline update to fetch the data around a point.
//
// Programmer: Hank Childs
// Creation: March 22, 2009
//
// ****************************************************************************
vtkDataSet *
avtDatasetOnDemandFilter::GetDataAroundPoint(double X, double Y, double Z,
int timeStep)
{
debug1<<"avtDatasetOnDemandFilter::GetDataAroundPoint("<<X<<", "<<Y<<", "<<Z<<", "<<timeStep<<");"<<endl;
if ( ! OperatingOnDemand() )
EXCEPTION0(ImproperUseException);
debug5<<" Update->GetDataAroundPoint, time= "<<timeStep<<endl;
avtContract_p new_contract = new avtContract(firstContract);
new_contract->GetDataRequest()->GetRestriction()->TurnOnAll();
avtPointSelection *ptsel = new avtPointSelection;
double p[3] = { X, Y, Z };
ptsel->SetPoint(p);
// data selection will be deleted by contract.
new_contract->GetDataRequest()->AddDataSelection(ptsel);
if (timeStep >= 0)
new_contract->GetDataRequest()->SetTimestep(timeStep);
new_contract->SetOnDemandStreaming(true);
GetInput()->Update(new_contract);
vtkDataSet *rv = GetInputDataTree()->GetSingleLeaf();
return rv;
}
// ****************************************************************************
// Method: avtDatasetOnDemandFilter::DomainLoaded
//
......
......@@ -88,6 +88,9 @@ typedef struct
// Dave Pugmire, Tue Mar 10 12:41:11 EDT 2009
// Added support for time/domain.
//
// Hank Childs, Sun Mar 22 13:31:08 CDT 2009
// Add support for getting data around a point.
//
// ****************************************************************************
class PIPELINE_API avtDatasetOnDemandFilter : virtual public
......@@ -102,6 +105,7 @@ class PIPELINE_API avtDatasetOnDemandFilter : virtual public
void GetLoadedDomains(std::vector<std::vector<int> > &domains);
void SetMaxQueueLength(int len) { maxQueueLength = len; }
virtual vtkDataSet *GetDomain(int, int);
virtual vtkDataSet *GetDataAroundPoint(double, double, double, int);
avtContract_p ModifyContract(avtContract_p);
virtual void UpdateDataObjectInfo(void);
......
/*****************************************************************************
*
* Copyright (c) 2000 - 2008, Lawrence Livermore National Security, LLC
* Produced at the Lawrence Livermore National Laboratory
* LLNL-CODE-400142
* All rights reserved.
*
* This file is part of VisIt. For details, see https://visit.llnl.gov/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the disclaimer (as noted below) in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of the LLNS/LLNL nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE LIVERMORE NATIONAL SECURITY,
* LLC, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/
// ************************************************************************* //
// avtPointSelection.C //
// ************************************************************************* //
#include <avtPointSelection.h>
// ****************************************************************************
// Method: avtPointSelection constructor
//
// Programmer: Hank Childs
// Creation: March 22, 2009
//
// ****************************************************************************
avtPointSelection::avtPointSelection()
{
pt[0] = 0.;
pt[1] = 0.;
pt[2] = 0.;
}
// ****************************************************************************
// Method: avtPointSelection destructor
//
// Programmer: Hank Childs
// Creation: March 22, 2009
//
// ****************************************************************************
avtPointSelection::~avtPointSelection()
{
}
// ****************************************************************************
// Method: operator==
//
// Programmer: Hank Childs
// Creation: March 22, 2009
//
// ****************************************************************************
bool
avtPointSelection::operator==(const avtPointSelection &sel) const
{
return (pt[0] == pt[0] && pt[1] == pt[1] && pt[2] == pt[2]);
}
// ****************************************************************************
// Method: avtPointSelection::Destruct
//
// Purpose:
// Calls the destructor for an identifier selection.
//
// Programmer: Hank Childs
// Creation: March 22, 2009
//
// ****************************************************************************
void
avtPointSelection::Destruct(void *i)
{
avtPointSelection *pt = (avtPointSelection *) i;
delete pt;
}
/*****************************************************************************
*
* Copyright (c) 2000 - 2008, Lawrence Livermore National Security, LLC
* Produced at the Lawrence Livermore National Laboratory
* LLNL-CODE-400142
* All rights reserved.
*
* This file is part of VisIt. For details, see https://visit.llnl.gov/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the disclaimer (as noted below) in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of the LLNS/LLNL nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE LIVERMORE NATIONAL SECURITY,
* LLC, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/
// ************************************************************************* //
// avtPointSelection.h //
// ************************************************************************* //
#ifndef AVT_POINT_SELECTION_H
#define AVT_POINT_SELECTION_H
#include <pipeline_exports.h>
#include <ref_ptr.h>
#include <avtDataSelection.h>
#include <vector>
// ****************************************************************************
// Class: avtPointSelection
//
// Purpose:
// Specify data selection using a point location.
//
// Programmer: Hank Childs
// Creation: March 22, 2009
//
// ****************************************************************************
class PIPELINE_API avtPointSelection : public avtDataSelection
{
public:
avtPointSelection();
virtual ~avtPointSelection();
static void Destruct(void *);
virtual const char * GetType() const
{ return "Point Selection"; };
void SetPoint(double *pt_) { pt[0] = pt_[0];
pt[1] = pt_[1];
pt[2] = pt_[2]; };
const double *GetPoint(void) { return pt; };
bool operator==(const avtPointSelection &) const;
private:
double pt[3];
// These methods are defined to prevent accidental use of bitwise copy
// implementations. If you want to re-define them to do something
// meaningful, that's fine.
avtPointSelection(const avtPointSelection &) {;};
avtPointSelection &operator=(const avtPointSelection &) { return *this; };
};
typedef ref_ptr<avtPointSelection> avtPointSelection_p;
#endif
......@@ -258,6 +258,9 @@
# Hank Childs, Mon Feb 2 08:24:47 PST 2009
# Added named selections.
#
# Hank Childs, Sun Mar 22 14:25:29 CDT 2009
# Added avtPointSelection.
#
##############################################################################
@SET_MAKE@
......@@ -316,6 +319,7 @@ Data_src= \
Data/avtPlaneSelection.C \
Data/avtPointAttribute.C \
Data/avtPointExtractor.C \
Data/avtPointSelection.C \
Data/avtPyramidExtractor.C \
Data/avtRangeMaxTable.C \
Data/avtRay.C \
......
......@@ -357,6 +357,10 @@
# is moved back to HDF4 targets. Enzo REQUIRES HDF4 and, if HDF5 is present
# will also use that. But, if HDF4 is NOT present, Enzo will NOT be built
# and that is current best behavior.
#
# Hank Childs, Sun Mar 22 14:45:21 CDT 2009
# Remove Nek3D target ... reader is in the process of becoming deprecated.
#
##############################################################################
@SET_MAKE@
......@@ -426,7 +430,6 @@ REQUIRED=\
Miranda \
MM5 \
NASTRAN \
Nek3D \
Nek5000 \
OpenFOAM \
OVERFLOW \
......
......@@ -67,6 +67,7 @@
#include <avtNekDomainBoundaries.h>
#include <avtParallel.h>
#include <avtPlaneSelection.h>
#include <avtPointSelection.h>
#include <avtSpatialBoxSelection.h>
#include <avtVariableCache.h>
#include <snprintf.h>
......@@ -2892,6 +2893,11 @@ avtNek5000FileFormat::GetDataExtentsIntervalTree(int timestep, const char *var)
// Programmer: Hank Childs
// Creation: December 18, 2008
//
// Modifications:
//
// Hank Childs, Sun Mar 22 14:40:49 CDT 2009
// Add support for point selections.
//
// ****************************************************************************
void
......@@ -2948,6 +2954,20 @@ avtNek5000FileFormat::RegisterDataSelections(
if (domainsToUse[i].size() == 0)
noMatches = true;
}
if (string(selList[i]->GetType()) == "Point Selection")
{
avtPointSelection *sel = (avtPointSelection *) *(selList[i]);
const double *pt = sel->GetPoint();
avtIntervalTree *itree =
GetBoundingBoxIntervalTree(timestepToUseForMesh);
if (itree == NULL)
continue;
itree->GetElementsListFromRange(pt, pt, domainsToUse[i]);
if (domainsToUse[i].size() == 0)
noMatches = true;
}
if (string(selList[i]->GetType()) == "Isolevels Selection")
{
avtIsolevelsSelection *sel = (avtIsolevelsSelection*)*(selList[i]);
......
../../avt/Pipeline/Data/avtPointSelection.h
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment