Updates will be applied April 15th at 12pm EDT (UTC-0400). GitLab could be a little slow between 12 - 12:45pm EDT.

Commit 3710fa9f authored by bonnell's avatar bonnell

* updated the release notes with changes I've made.

* Fixed '7743, zone pick not working on a time-curve.

* Fixed '8513, Issues with query (query-over-time of a variable other than the
  variable of the originating plot would not get the variable name/ units
  correct in the annotations).  I also added the ability for a query-through 
  -time to use the query var and its units to set the Y-axis labels.  
  (pick-through-time uses this).

* Changed 'debug5' messages to 'debug4' (so that possibly
  important messages could be seen without having to wade 
  through all the Xfer and ParentProcess stuff that's spit out 
  to debug5).  Currently, this only includes files I touched to 
  help me find the pick/query bugs fixed above.


git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@4587 18c085ea-50e0-402c-830e-de6fd14e8384
parent 6d491716
......@@ -2847,7 +2847,7 @@ avtGenericDatabase::GetMesh(const char *meshname, int ts, int domain,
mesh = Interface->GetMesh(ts, domain, real_meshname);
if (mesh == NULL)
{
debug5 << "Mesh returned by file format is NULL for domain "
debug4 << "Mesh returned by file format is NULL for domain "
<< domain << ", material = " << material << endl;
return NULL;
}
......@@ -4776,7 +4776,7 @@ avtGenericDatabase::ReadDataset(avtDatasetCollection &ds, intVector &domains,
if (!doSelect || !Interface->PerformsMaterialSelection())
{
// We know we want the dataset as a whole
debug5 << "Generic database instructing get for var = "
debug4 << "Generic database instructing get for var = "
<< var << ", timestep = " << ts << " domain = "
<< domains[i] << endl;
single_ds = GetDataset(var, ts, domains[i], "_all", vars2nd,
......@@ -4860,7 +4860,7 @@ avtGenericDatabase::ReadDataset(avtDatasetCollection &ds, intVector &domains,
//
for (int j = 0 ; j < nmats ; j++)
{
debug5 << "Generic database instructing get for var = "
debug4 << "Generic database instructing get for var = "
<< var << ", timestep = " << ts << " domain = "
<< domains[i] << ", material = "
<< matnames[j].c_str() << endl;
......@@ -5856,7 +5856,7 @@ avtGenericDatabase::CommunicateGhostZonesFromDomainBoundaries(
{
void_ref_ptr vr = void_ref_ptr(newMatList[i],
avtMaterial::Destruct);
debug5 << "avtGenericDatabase - Caching:"
debug4 << "avtGenericDatabase - Caching:"
<< matonmesh << " ("
<< AUXILIARY_DATA_POST_GHOST_MATERIAL
<< ") for timestep, domain = "
......@@ -5910,7 +5910,7 @@ avtGenericDatabase::CommunicateGhostZonesFromDomainBoundaries(
// cache post ghost mixed var object if requested
if(post_ghost)
{
debug5 << "avtGenericDatabase - Caching:"
debug4 << "avtGenericDatabase - Caching:"
<< mixv_name << " ("
<< AUXILIARY_DATA_POST_GHOST_MIXED_VARIABLE
<< ") for timestep, domain = "
......@@ -8341,7 +8341,7 @@ avtGenericDatabase::QueryScalars(const string &varName, const int dom,
const avtScalarMetaData *smd = GetMetaData(ts)->GetScalar(varName);
if (!smd)
{
debug5 << "Querying scalar var, but could not retrieve"
debug4 << "Querying scalar var, but could not retrieve"
<< " meta data!" << endl;
return false;
}
......@@ -8430,7 +8430,7 @@ avtGenericDatabase::QueryScalars(const string &varName, const int dom,
// material var info
if (element < 0 || element >= mat->GetNZones())
{
debug5 << "CANNOT QUERY MATFRACS, ZONE IS OUT OF RANGE" << endl;
debug4 << "CANNOT QUERY MATFRACS, ZONE IS OUT OF RANGE" << endl;
return rv;
}
matInfo = mat->ExtractCellMatInfo(element);
......@@ -8463,7 +8463,7 @@ avtGenericDatabase::QueryScalars(const string &varName, const int dom,
}
if (!zonesInRange)
{
debug5 << "CANNOT QUERY MATFRACS ZONE IS OUT OF RANGE" << endl;
debug4 << "CANNOT QUERY MATFRACS ZONE IS OUT OF RANGE" << endl;
return rv;
}
for (j = 0; j < incidentElements.size(); j++)
......@@ -8554,7 +8554,7 @@ avtGenericDatabase::QueryVectors(const string &varName, const int dom,
const avtVectorMetaData *vmd = GetMetaData(ts)->GetVector(varName);
if (!vmd)
{
debug5 << "Querying vector var, but could not retrieve"
debug4 << "Querying vector var, but could not retrieve"
<< " meta data!" << endl;
return false;
}
......@@ -8697,7 +8697,7 @@ avtGenericDatabase::QueryTensors(const string &varName, const int dom,
const avtTensorMetaData *tmd = GetMetaData(ts)->GetTensor(varName);
if (!tmd)
{
debug5 << "Querying tensor var, but could not retrieve"
debug4 << "Querying tensor var, but could not retrieve"
<< " meta data!" << endl;
return false;
}
......@@ -8817,7 +8817,7 @@ avtGenericDatabase::QueryArrays(const string &varName, const int dom,
const avtArrayMetaData *tmd = GetMetaData(ts)->GetArray(varName);
if (!tmd)
{
debug5 << "Querying array var, but could not retrieve"
debug4 << "Querying array var, but could not retrieve"
<< " meta data!" << endl;
return false;
}
......@@ -8946,7 +8946,7 @@ avtGenericDatabase::QuerySymmetricTensors(const string &varName,
= GetMetaData(ts)->GetSymmTensor(varName);
if (!tmd)
{
debug5 << "Querying tensor var, but could not retrieve"
debug4 << "Querying tensor var, but could not retrieve"
<< " meta data!" << endl;
return false;
}
......@@ -9062,7 +9062,7 @@ avtGenericDatabase::QueryLabels(const string &varName, const int dom,
const avtLabelMetaData *lmd = GetMetaData(ts)->GetLabel(varName);
if (!lmd)
{
debug5 << "Querying label var, but could not retrieve"
debug4 << "Querying label var, but could not retrieve"
<< " meta data!" << endl;
return false;
}
......@@ -9196,7 +9196,7 @@ avtGenericDatabase::QueryMaterial(const string &varName, const int dom,
{
if (element < 0 || element >= mat->GetNZones())
{
debug5 << "CANNOT QUERY MATERIALS ZONE IS OUT OF RANGE" << endl;
debug4 << "CANNOT QUERY MATERIALS ZONE IS OUT OF RANGE" << endl;
return false;
}
numMatsThisZone = 0;
......@@ -9226,7 +9226,7 @@ avtGenericDatabase::QueryMaterial(const string &varName, const int dom,
}
if (!zonesInRange)
{
debug5 << "CANNOT QUERY MATERIALS ZONE IS OUT OF RANGE" << endl;
debug4 << "CANNOT QUERY MATERIALS ZONE IS OUT OF RANGE" << endl;
return false;
}
for (j = 0; j < incidentElements.size(); j++)
......@@ -9559,7 +9559,7 @@ avtGenericDatabase::QueryMesh(const string &varName, const int ts,
char temp[256];
if (!mmd)
{
debug5 << "Querying mesh, but could not retrieve"
debug4 << "Querying mesh, but could not retrieve"
<< " meta data!" << endl;
return false;
}
......@@ -10137,7 +10137,7 @@ avtGenericDatabase::QuerySpecies(const string &varName, const int dom,
const avtSpeciesMetaData *smd = GetMetaData(ts)->GetSpecies(varName);
if (!smd)
{
debug5 << "Querying species var, but could not retrieve"
debug4 << "Querying species var, but could not retrieve"
<< " meta data!" << endl;
return false;
}
......@@ -10159,19 +10159,19 @@ avtGenericDatabase::QuerySpecies(const string &varName, const int dom,
if (species == NULL)
{
debug5 << "Querying species var, but could not retrieve"
debug4 << "Querying species var, but could not retrieve"
<< " data array!" << endl;
return false;
}
if (mat == NULL)
{
debug5 << "Querying species var, but could not retrieve"
debug4 << "Querying species var, but could not retrieve"
<< " avtMaterial!" << endl;
return false;
}
if (spec == NULL)
{
debug5 << "Querying species var, but could not retrieve"
debug4 << "Querying species var, but could not retrieve"
<< " avtSpecies!" << endl;
return false;
}
......@@ -10222,7 +10222,7 @@ avtGenericDatabase::QuerySpecies(const string &varName, const int dom,
{
if (element < 0 || element >= mat->GetNZones())
{
debug5 << "CANNOT QUERY SPECIES ZONE IS OUT OF RANGE" << endl;
debug4 << "CANNOT QUERY SPECIES ZONE IS OUT OF RANGE" << endl;
return false;
}
matInfo = mat->ExtractCellMatInfo(element);
......@@ -10260,7 +10260,7 @@ avtGenericDatabase::QuerySpecies(const string &varName, const int dom,
}
if (!zonesInRange)
{
debug5 << "CANNOT QUERY MATERIALS ZONE IS OUT OF RANGE" << endl;
debug4 << "CANNOT QUERY MATERIALS ZONE IS OUT OF RANGE" << endl;
return false;
}
for (j = 0; j < incidentElements.size(); j++)
......
......@@ -411,7 +411,7 @@ avtExpressionEvaluatorFilter::ModifyContract(
// list and the expression list. When the variables are found, turn the
// parsed expression into a list of filters. These filters are hooked
// together, then put on a list in pipelineState for use in Execute().
debug5 << "EEF::ModifyContract: Checking candidates" << endl;
debug4 << "EEF::ModifyContract: Checking candidates" << endl;
if (createFilters)
pipelineState.SetDataObject(NULL);
......@@ -422,7 +422,7 @@ avtExpressionEvaluatorFilter::ModifyContract(
std::set<string>::iterator front = candidates.begin();
string var = *front;
candidates.erase(front);
debug5 << "EEF::ModifyContract: candidate: " << var.c_str()
debug4 << "EEF::ModifyContract: candidate: " << var.c_str()
<< endl;
// Have we seen this before?
......@@ -455,28 +455,28 @@ avtExpressionEvaluatorFilter::ModifyContract(
if (exp == NULL && ddf == NULL)
{
debug5 << "EEF::ModifyContract: not an expression" << endl;
debug4 << "EEF::ModifyContract: not an expression" << endl;
// Not an expression. Put the name on the real list.
real_list.insert(var);
}
else if (ddf != NULL)
{
debug5 << "EEF::ModifyContract: DDF. Roots:" << endl;
debug4 << "EEF::ModifyContract: DDF. Roots:" << endl;
avtDDFFunctionInfo *info = ddf->GetFunctionInfo();
int nVars = info->GetDomainNumberOfTuples();
for (int i = 0 ; i < nVars ; i++)
{
std::string name = info->GetDomainTupleName(i);
debug5 << "EEF::ModifyContract: " << name.c_str() << endl;
debug4 << "EEF::ModifyContract: " << name.c_str() << endl;
candidates.insert(name);
}
std::string name = info->GetCodomainName();
debug5 << "EEF::ModifyContract: " << name.c_str() << endl;
debug4 << "EEF::ModifyContract: " << name.c_str() << endl;
candidates.insert(name);
}
else // (expr != NULL)
{
debug5 << "EEF::ModifyContract: expression. Roots:"
debug4 << "EEF::ModifyContract: expression. Roots:"
<< endl;
// Expression. Put the name on the expr list. Find the base
// variables of the expression and put them on the candidate
......@@ -490,7 +490,7 @@ avtExpressionEvaluatorFilter::ModifyContract(
std::vector<string>::iterator itr = roots.begin();
for ( itr = roots.begin(); itr != roots.end(); ++itr)
{
debug5 << "EEF::ModifyContract: " << itr->c_str()
debug4 << "EEF::ModifyContract: " << itr->c_str()
<< endl;
candidates.insert(*itr);
}
......
......@@ -169,14 +169,15 @@ avtWarpFilter::ExecuteData(vtkDataSet *inDS, int, string)
// Creation: July 12, 2006
//
// Modifications:
//
// Kathleen Bonnell, Tue Jul 8 13:54:38 PDT 2008
// Changed topological dimension to 1.
// ****************************************************************************
void
avtWarpFilter::UpdateDataObjectInfo(void)
{
GetOutput()->GetInfo().GetValidity().InvalidateZones();
GetOutput()->GetInfo().GetAttributes().SetTopologicalDimension(0);
GetOutput()->GetInfo().GetAttributes().SetTopologicalDimension(1);
GetOutput()->GetInfo().GetAttributes().SetSpatialDimension(2);
GetOutput()->GetInfo().GetValidity().SetNormalsAreInappropriate(true);
GetOutput()->GetInfo().GetValidity().InvalidateSpatialMetaData();
......
......@@ -160,7 +160,7 @@ avtTimeLoopFilter::Update(avtContract_p spec)
currentTime = i;
else
currentTime = endTime;
debug5 << "Time loop filter updating with time slice #"
debug4 << "Time loop filter updating with time slice #"
<< currentTime << endl;
avtSIL *sil = GetInput()->GetOriginatingSource()->GetSIL(currentTime);
......
......@@ -71,12 +71,20 @@ void *avtDataObjectQuery::initializeProgressCallbackArgs=NULL;
// Kathleen Bonnell, Tue May 4 14:18:26 PDT 2004
// Initialize new member querySILR.
//
// Kathleen Bonnell, Tue Jul 8 18:03:40 PDT 2008
// Set default values for timeCurveSpecs.
//
// ****************************************************************************
avtDataObjectQuery::avtDataObjectQuery()
{
timeVarying = false;
querySILR = NULL;
// derived classes should overide these as necessary
timeCurveSpecs["useTimeForXAxis"] = true;
timeCurveSpecs["useVarForYAxis"] = false;
timeCurveSpecs["nResultsToStore"] = 1;
}
......@@ -175,7 +183,8 @@ avtDataObjectQuery::UpdateProgress(int current, int total)
{
if (progressCallback != NULL)
{
progressCallback(progressCallbackArgs, GetType(), GetDescription(), current, total);
progressCallback(progressCallbackArgs, GetType(), GetDescription(),
current, total);
}
}
......@@ -336,31 +345,41 @@ avtDataObjectQuery::SetSILRestriction(const avtSILRestriction_p silr)
//
// Purpose:
// Sets some flags used by QueryOverTime.
// Defined here so derived types don't have to. The default type
// of time curve is a Single curve using Time for the X-axis.
//
// Arguments:
// timeForX Is time used for the x-axis in the time curve?
// nRes The number of results to use in creation of the time curve.
// Defined here so derived types don't have to.
// The default type of time curve is a Single curve using Time for
// the X-axis.
//
// Notes:
// If timeForX is true, then nRes should be 1 unless multiple curves
// are desired (not yet implemented by QOT).
// If useTimeForXAxis is true, then nResultsToStore should be 1 unless
// multiple curves are desired (not yet implemented by QOT).
//
// If timeForX is false, then nRes should be 2^n where n is the number
// of curves desired. Odd-indexed results will be used for X-axis,
// even-indexed results will be used for Y Axis.
// If useTimeForXAxis is false, then nResultsToStore should be 2^n where
// n is the number of curves desired. Odd-indexed results will be used
// for X-axis, even-indexed results will be used for Y Axis.
//
// If useVarForYAxis is true, then the query variable and its units will
// be used to set the Y-axis label.
//
// If useVarForYAxis is false, then the Y-axis label is the query name
// or short description.
//
// Programmer: Kathleen Bonnell
// Creation: January 3, 2005
//
// Modifications:
// Kathleen Bonnell, Tue Jul 8 15:39:30 PDT 2008
// Modified to use a MapNode and added 'useVarForYAxis' element.
//
// ****************************************************************************
void
avtDataObjectQuery::GetTimeCurveSpecs(bool &timeForX, int &nRes)
const MapNode&
avtDataObjectQuery::GetTimeCurveSpecs()
{
timeForX = true;
nRes = 1;
// The defaults are listed below, derived classes should overide
// whichever of these as necessary
//
// timeCurveSpecs["useTimeForXAxis"] = true;
// timeCurveSpecs["useVarForYAxis"] = false;
// timeCurveSpecs["nResultsToStore"] = 1;
return timeCurveSpecs;
}
......@@ -47,6 +47,7 @@
#include <avtDataObjectSink.h>
#include <vectortypes.h>
#include <MapNode.h>
class QueryAttributes;
......@@ -111,6 +112,11 @@ typedef void (*ProgressCallback)(void *, const char *, const char *,int,int);
// whereby queries-through-time can specify a short label for y-axis than
// their query name.
//
// Kathleen Bonnell, Tue Jul 8 15:40:45 PDT 2008
// Added timeCurveSpecs MapNode, changed TetTimecurveSpecs signature
// to return this map node.
//
//
// ****************************************************************************
class QUERY_API avtDataObjectQuery : public virtual avtDataObjectSink
......@@ -134,7 +140,7 @@ class QUERY_API avtDataObjectQuery : public virtual avtDataObjectSink
virtual int GetNFilters();
virtual void SetTimeVarying(bool val) { timeVarying = val;}
virtual void GetTimeCurveSpecs(bool &timeForX, int &nRes);
virtual const MapNode &GetTimeCurveSpecs();
void SetSILRestriction(const SILRestrictionAttributes *);
void SetSILRestriction(const avtSILRestriction_p);
......@@ -159,6 +165,7 @@ class QUERY_API avtDataObjectQuery : public virtual avtDataObjectSink
std::string units;
bool timeVarying;
avtSILRestriction_p querySILR;
MapNode timeCurveSpecs;
};
......
......@@ -67,6 +67,7 @@
#include <VisItException.h>
#include <DebugStream.h>
#include <MapNode.h>
using std::string;
......@@ -96,6 +97,10 @@ using std::string;
// Set label from query's ShortDescription if available, otherwise use
// query name.
//
// Kathleen Bonnell, Tue Jul 8 15:48:38 PDT 2008
// Added 'useVarForYAxis'. Retrieve time curve specs here rather than
// in Execute method at every timestep.
//
// ****************************************************************************
avtQueryOverTimeFilter::avtQueryOverTimeFilter(const AttributeGroup *a)
......@@ -104,6 +109,7 @@ avtQueryOverTimeFilter::avtQueryOverTimeFilter(const AttributeGroup *a)
SetTimeLoop(atts.GetStartTime(), atts.GetEndTime(), atts.GetStride());
finalOutputCreated = false;
useTimeForXAxis = true;
useVarForYAxis = false;
nResultsToStore = 1;
TRY
......@@ -117,6 +123,11 @@ avtQueryOverTimeFilter::avtQueryOverTimeFilter(const AttributeGroup *a)
label = query->GetShortDescription();
else
label = qatts.GetName();
const MapNode &tqs = query->GetTimeCurveSpecs();
useTimeForXAxis = tqs.GetEntry("useTimeForXAxis")->AsBool();
useVarForYAxis = tqs.GetEntry("useVarForYAxis")->AsBool();
nResultsToStore = tqs.GetEntry("nResultsToStore")->AsInt();
delete query;
}
CATCHALL(...)
......@@ -202,6 +213,9 @@ avtQueryOverTimeFilter::Create(const AttributeGroup *atts)
// Kathleen Bonnell, Tue Nov 20 10:33:49 PST 2007
// Added call to query->SetPickAttsForTimeQuery for LocateAndPickZone.
//
// Kathleen Bonnell, Tue Jul 8 18:10:34 PDT 2008
// Removed call to query.GetTimeCurveSpecs. Now handled in constructor.
//
// ****************************************************************************
void
......@@ -261,7 +275,6 @@ avtQueryOverTimeFilter::Execute(void)
PickAttributes patts = atts.GetPickAtts();
((avtLocateAndPickNodeQuery*)query)->SetPickAttsForTimeQuery(&patts);
}
query->GetTimeCurveSpecs(useTimeForXAxis, nResultsToStore);
query->SetTimeVarying(true);
query->SetSILRestriction(currentSILR);
......@@ -351,6 +364,9 @@ avtQueryOverTimeFilter::Execute(void)
// Kathleen Bonnell, Wed Nov 28 16:33:22 PST 2007
// Use new 'label' member for Y axis label.
//
// Kathleen Bonnell, Tue Jul 8 15:48:38 PDT 2008
// Set y-axis labels and units from query var if useVarForYAxis is true.
//
// ****************************************************************************
void
......@@ -385,6 +401,12 @@ avtQueryOverTimeFilter::UpdateDataObjectInfo(void)
{
outAtts.SetXUnits("");
}
if (useVarForYAxis)
{
string yl = outAtts.GetVariableName();
outAtts.SetYLabel(yl);
outAtts.SetYUnits(outAtts.GetVariableUnits(yl.c_str()));
}
}
else
{
......
......@@ -91,6 +91,9 @@ class vtkRectilinearGrid;
// Added member 'label', to store a shorter y-axis label than the query
// name if desired.
//
// Kathleen Bonnell, Tue Jul 8 15:48:11 PDT 2008
// Add useVarForYAxis.
//
// ****************************************************************************
class QUERY_API avtQueryOverTimeFilter : public avtTimeLoopFilter,
......@@ -117,6 +120,7 @@ class QUERY_API avtQueryOverTimeFilter : public avtTimeLoopFilter,
string label;
bool useTimeForXAxis;
bool useVarForYAxis;
int nResultsToStore;
int numAdditionalFilters;
......
......@@ -384,6 +384,7 @@ avtPickQuery::ApplyFilters(avtDataObject_p inData)
}
bool requiresUpdate = false;
dataRequest = new avtDataRequest(pickAtts.GetActiveVariable().c_str(),
pickAtts.GetTimeStep(), querySILR);
//
......@@ -1070,7 +1071,7 @@ avtPickQuery::RetrieveNodes(vtkDataSet *ds, int zone)
if (ptIds->GetNumberOfIds() == 0)
{
ptIds->Delete();
debug5 << "FoundZone contained no points!" << endl;
debug4 << "FoundZone contained no points!" << endl;
success = false;
}
else
......@@ -1287,7 +1288,7 @@ avtPickQuery::RetrieveZones(vtkDataSet *ds, int foundNode)
unsigned char *ghosts = NULL;
if (nCells == 0)
{
debug5 << "FoundNode has no incident cells!" << endl;
debug4 << "FoundNode has no incident cells!" << endl;
success = false;
}
else
......
......@@ -157,10 +157,31 @@ avtTrajectoryByNode::PostExecute(void)
{
char msg[120];
SNPRINTF(msg, 120, "Could not retrieve information from domain "
" %d element %d.", queryAtts.GetDomain(), queryAtts.GetElement());
" %d element %d.", queryAtts.GetDomain(),
queryAtts.GetElement());
SetResultMessage(msg);
}
}
pickAtts.PrepareForNewPick();
}
// ****************************************************************************
// Method: avtTrajectoryByNode::GetTimeCurveSpecs
//
// Purpose:
// Override default TimeCurveSpecs
//
// Programmer: Kathleen Bonnell
// Creation: July 8, 2008
//
// Modifications:
//
// ****************************************************************************
const MapNode&
avtTrajectoryByNode::GetTimeCurveSpecs()
{
timeCurveSpecs["useTimeForXAxis"] = false;
timeCurveSpecs["nResultsToStore"] = 2;
return timeCurveSpecs;
}
......@@ -58,6 +58,8 @@
// Creation: November 8, 2005
//
// Modifications:
// Kathleen Bonnell, Tue Jul 8 15:43:15 PDT 2008
// Changed GetTimeCurveSpecs signature.
//
// ****************************************************************************
......@@ -68,12 +70,12 @@ class QUERY_API avtTrajectoryByNode : public avtVariableByNodeQuery
virtual ~avtTrajectoryByNode();
virtual const char *GetType(void) { return "avtTrajectoryByNode"; };
virtual const char *GetType(void) { return "avtTrajectoryByNode"; }
virtual const char *GetDescription(void)
{ return "Retrieving var information on mesh."; };
{ return "Retrieving var information on mesh.";}
virtual const MapNode &GetTimeCurveSpecs();
virtual void GetTimeCurveSpecs(bool &timeForX, int &nRes)
{ timeForX = false; nRes = 2; }
protected:
virtual void Preparation(const avtDataAttributes &);
virtual void PostExecute(void);
......
......@@ -153,10 +153,32 @@ avtTrajectoryByZone::PostExecute(void)
{
char msg[120];
SNPRINTF(msg, 120, "Could not retrieve information from domain "
" %d element %d.", queryAtts.GetDomain(), queryAtts.GetElement());
" %d element %d.", queryAtts.GetDomain(),
queryAtts.GetElement());
SetResultMessage(msg);
}
}
pickAtts.PrepareForNewPick();
}
// ****************************************************************************
// Method: avtTrajectoryByZone::GetTimeCurveSpecs
//
// Purpose:
// Override default TimeCurveSpecs
//
// Programmer: Kathleen Bonnell
// Creation: July 8, 2008
//
// Modifications:
//
// ****************************************************************************
const MapNode&
avtTrajectoryByZone::GetTimeCurveSpecs()
{
timeCurveSpecs["useTimeForXAxis"] = false;