Commit 24e7b861 authored by hrchilds's avatar hrchilds

Update from July 5, 2005

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@494 18c085ea-50e0-402c-830e-de6fd14e8384
parent cbe25da4
......@@ -79,6 +79,50 @@
<Field name="arguments" type="stringVector">-dir /usr/gapps/visit</Field>
<Field name="parallel" type="bool">true</Field>
</Object>
<Object name="HostProfile">
<Field name="profileName" type="string">serial</Field>
<Field name="host" type="string">red.slac.stanford.edu</Field>
<Field name="hostAliases" type="string">red</Field>
<Field name="timeout" type="int">480</Field>
<Field name="numProcessors" type="int">1</Field>
<Field name="numNodesSet" type="bool">false</Field>
<Field name="numNodes" type="int">0</Field>
<Field name="partitionSet" type="bool">false</Field>
<Field name="partition" type="string"></Field>
<Field name="bankSet" type="bool">false</Field>
<Field name="bank" type="string"></Field>
<Field name="timeLimitSet" type="bool">false</Field>
<Field name="timeLimit" type="string"></Field>
<Field name="launchMethodSet" type="bool">false</Field>
<Field name="launchMethod" type="string"></Field>
<Field name="forceStatic" type="bool">true</Field>
<Field name="forceDynamic" type="bool">false</Field>
<Field name="active" type="bool">true</Field>
<Field name="arguments" type="stringVector">-dir /nfs/slac/g/ki/ki04/visit</Field>
<Field name="parallel" type="bool">false</Field>
</Object>
<Object name="HostProfile">
<Field name="profileName" type="string">parallel</Field>
<Field name="host" type="string">red.slac.stanford.edu</Field>
<Field name="hostAliases" type="string">red</Field>
<Field name="timeout" type="int">480</Field>
<Field name="numProcessors" type="int">4</Field>
<Field name="numNodesSet" type="bool">false</Field>
<Field name="numNodes" type="int">0</Field>
<Field name="partitionSet" type="bool">false</Field>
<Field name="partition" type="string"></Field>
<Field name="bankSet" type="bool">false</Field>
<Field name="bank" type="string"></Field>
<Field name="timeLimitSet" type="bool">false</Field>
<Field name="timeLimit" type="string"></Field>
<Field name="launchMethodSet" type="bool">true</Field>
<Field name="launchMethod" type="string">mpirun</Field>
<Field name="forceStatic" type="bool">true</Field>
<Field name="forceDynamic" type="bool">false</Field>
<Field name="active" type="bool">false</Field>
<Field name="arguments" type="stringVector">-dir /nfs/slac/g/ki/ki04/visit</Field>
<Field name="parallel" type="bool">true</Field>
</Object>
<Object name="HostProfile">
<Field name="profileName" type="string">serial</Field>
<Field name="host" type="string">davinci.nersc.gov</Field>
......
......@@ -520,179 +520,16 @@ avtExpressionEvaluatorFilter::ReleaseData(void)
// Re-add the parsing code. In some way I don't understand, this code
// affects the avtDataAttributes that Pick uses to query from.
//
// Kathleen Bonnell, Tue Jul 5 15:28:27 PDT 2005
// Removed (again) the parsing code. Found the real fix for the problem
// instead of using this code.
//
// ****************************************************************************
void
avtExpressionEvaluatorFilter::Query(PickAttributes *pa)
{
int i, j, k;
//
// Sanity check.
//
if (*(GetInput()) == NULL)
EXCEPTION0(NoInputException);
//
// We need to identify if there are expression variables that have been
// requested for the pick that are missing. If so, we will have to
// re-execute.
//
const stringVector &orig_vars = pa->GetVariables();
stringVector expr_vars;
std::vector<int> indices;
for (i = 0 ; i < orig_vars.size() ; i++)
{
Expression *exp = ParsingExprList::GetExpression(orig_vars[i]);
if (exp != NULL)
{
expr_vars.push_back(orig_vars[i]);
indices.push_back(i);
}
}
stringVector unmatched_vars;
if (expr_vars.size() > 0)
{
avtDataset_p output = GetTypedOutput();
VarList vl;
avtDatasetExaminer::GetVariableList(output, vl);
for (i = 0 ; i < expr_vars.size() ; i++)
{
bool foundMatch = false;
for (j = 0 ; j < vl.nvars ; j++)
{
if (expr_vars[i] == vl.varnames[j])
foundMatch = true;
}
if (!foundMatch)
{
unmatched_vars.push_back(expr_vars[i]);
}
}
modified = true;
}
if (unmatched_vars.size() > 0)
{
for (i = 0 ; i < unmatched_vars.size() ; i++)
lastUsedSpec->GetDataSpecification()->AddSecondaryVariable(
unmatched_vars[i].c_str());
//
// Force the update.
//
GetOutput()->Update(lastUsedSpec);
}
//
// Start by going to the new queryable source upstream (most likely the
// terminating source corresponding to the database) and ask it to pick
// with our new pick attributes.
//
avtQueryableSource *src = GetInput()->GetQueryableSource();
src->Query(pa);
//
// Now iterate over the expressions and add where possible.
//
if (expr_vars.size() > 0)
{
bool canUseNativeArray =
GetInput()->GetInfo().GetValidity().GetZonesPreserved();
const intVector &incidentElements = pa->GetIncidentElements();
int element = pa->GetElementNumber();
int domain = pa->GetDomain();
bool zonePick = pa->GetPickType() == PickAttributes::Zone ||
pa->GetPickType() == PickAttributes::DomainZone;
avtDataset_p output = GetTypedOutput();
for (i = 0 ; i < expr_vars.size() ; i++)
{
avtCentering cent = AVT_UNKNOWN_CENT;
vtkDataArray *arr = avtDatasetExaminer::GetArray(output,
expr_vars[i].c_str(), domain, cent);
if (arr == NULL)
{
continue;
}
PickVarInfo varInfo;
varInfo.SetVariableName(expr_vars[i]);
int ncomps = arr->GetNumberOfComponents();
if (ncomps == 1)
varInfo.SetVariableType("scalar");
else if (ncomps == 3)
varInfo.SetVariableType("vector");
else if (ncomps == 9)
varInfo.SetVariableType("tensor");
bool zoneCent = (cent == AVT_ZONECENT);
varInfo.SetCentering(zoneCent ? PickVarInfo::Zonal
: PickVarInfo::Nodal);
std::vector<double> vals;
std::vector<std::string> names;
char temp[1024];
if (canUseNativeArray)
{
if (zoneCent != zonePick)
{
for (j = 0 ; j < incidentElements.size() ; j++)
{
sprintf(temp, "(%d)", incidentElements[j]);
names.push_back(temp);
float mag = 0.;
for (k = 0 ; k < arr->GetNumberOfComponents() ; k++)
{
float val=arr->GetComponent(incidentElements[j],k);
mag += val*val;
vals.push_back(val);
}
mag = sqrt(mag);
vals.push_back(mag);
}
}
else
{
// the info we're after is associated with element
sprintf(temp, "(%d)", element);
names.push_back(temp);
float mag = 0.;
for (k = 0 ; k < arr->GetNumberOfComponents() ; k++)
{
float val = arr->GetComponent(element, k);
mag += val*val;
vals.push_back(val);
}
mag = sqrt(mag);
vals.push_back(mag);
}
}
if (!vals.empty())
{
varInfo.SetNames(names);
varInfo.SetValues(vals);
int index = -1;
for (int ii = 0 ; ii < pa->GetNumPickVarInfos() ; ii++)
{
PickVarInfo &vi = pa->GetPickVarInfo(ii);
if (vi.GetVariableName() == varInfo.GetVariableName())
{
index = ii;
break;
}
}
if (index >= 0)
{
PickVarInfo &varInfo2 = pa->GetPickVarInfo(index);
varInfo2 = varInfo;
}
else
{
pa->AddPickVarInfo(varInfo);
}
}
}
}
GetInput()->GetQueryableSource()->Query(pa);
}
......
......@@ -16,6 +16,7 @@
#include <vtkVisItUtility.h>
#include <avtDatasetExaminer.h>
#include <avtExtents.h>
......@@ -145,54 +146,25 @@ avtCoordSystemConvert::ExecuteData(vtkDataSet *in_ds, int, std::string)
// Programmer: Hank Childs
// Creation: June 30, 2003
//
// Modifications:
//
// Hank Childs, Tue Jul 5 09:23:13 PDT 2005
// Properly create extents.
//
// ****************************************************************************
void
avtCoordSystemConvert::PostExecute()
{
avtDataAttributes &inAtts = GetInput()->GetInfo().GetAttributes();
avtDataAttributes &outAtts = GetOutput()->GetInfo().GetAttributes();
/*
double b[6];
THIS HAS BEEN MORE TROUBLE THAN ITS WORTH. LEAVING THE CODE HERE IN
CASE THIS EVER BECOMES IMPORTANT TO ANYONE. THE ISSUE IS THAT IT JUST
DOESN'T COME CLOSE ENOUGH ON THE REAL EXTENTS.
if (inAtts.GetTrueSpatialExtents()->HasExtents())
{
inAtts.GetTrueSpatialExtents()->CopyTo(b);
TransformExtents(b);
outAtts.GetTrueSpatialExtents()->Set(b);
}
if (inAtts.GetCumulativeTrueSpatialExtents()->HasExtents())
{
inAtts.GetCumulativeTrueSpatialExtents()->CopyTo(b);
TransformExtents(b);
outAtts.GetCumulativeTrueSpatialExtents()->Set(b);
}
if (inAtts.GetEffectiveSpatialExtents()->HasExtents())
{
inAtts.GetEffectiveSpatialExtents()->CopyTo(b);
TransformExtents(b);
outAtts.GetEffectiveSpatialExtents()->Set(b);
}
if (inAtts.GetCurrentSpatialExtents()->HasExtents())
{
inAtts.GetCurrentSpatialExtents()->CopyTo(b);
TransformExtents(b);
outAtts.GetCurrentSpatialExtents()->Set(b);
}
if (inAtts.GetCumulativeCurrentSpatialExtents()->HasExtents())
{
inAtts.GetCumulativeCurrentSpatialExtents()->CopyTo(b);
TransformExtents(b);
outAtts.GetCumulativeCurrentSpatialExtents()->Set(b);
}
*/
outAtts.GetTrueSpatialExtents()->Clear();
outAtts.GetEffectiveSpatialExtents()->Clear();
outAtts.GetCurrentSpatialExtents()->Clear();
double bounds[6];
avtDataset_p ds = GetTypedOutput();
avtDatasetExaminer::GetSpatialExtents(ds, bounds);
outAtts.GetCumulativeTrueSpatialExtents()->Set(bounds);
}
......
......@@ -137,6 +137,9 @@ avtStreamer::ReleaseData(void)
// Hank Childs, Mon Jun 27 10:02:55 PDT 2005
// Choose better file names when doing a "-dump" in parallel.
//
// Hank Childs, Tue Jul 5 09:41:28 PDT 2005
// Fix cut-n-paste bug with last change.
//
// ****************************************************************************
avtDataTree_p
......@@ -174,7 +177,7 @@ avtStreamer::ExecuteDataTree(vtkDataSet* ds, int dom, std::string label)
sprintf(name, "after_%s%d.%d.vtk", GetType(), times, rank);
}
else
sprintf(name, "after_%s%d.vtk", GetType(), times);
sprintf(name, "after_%s%d.vtk", GetType(), times++);
vtkDataSetWriter *wrtr2 = vtkDataSetWriter::New();
wrtr2->SetInput(out_ds);
wrtr2->SetFileName(name);
......
## ----------------------------------------------------------------------------
## config-site file for red.slac.stanford.edu, an SGI Altix machine at SLAC
## ----------------------------------------------------------------------------
##
## Set the VISITHOME environment variable.
##
VISITHOME=/nfs/slac/g/ki/ki04/visit/libraries
##
## If MESA is not set, use VisIt's mesa.
##
if test -z "$MESA"; then
MESA=$VISITHOME/mesa/5.0/linux_redhat_gcc_3.2.3
fi
##
## If VTK is not set, use VisIt's vtk.
##
if test -z "$VTK"; then
VTK=$VISITHOME/vtk/2003.10.28/linux_redhat_gcc_3.2.3
fi
##
## If QT is not set, use VisIt's Qt.
##
if test -z "$QT_BIN"; then
QT_BIN=$VISITHOME/qt/3.3.2/linux_redhat_gcc_3.2.3/bin
fi
if test -z "$QT_INCLUDE"; then
QT_INCLUDE=$VISITHOME/qt/3.3.2/linux_redhat_gcc_3.2.3/include
fi
if test -z "$QT_LIB"; then
QT_LIB=$VISITHOME/qt/3.3.2/linux_redhat_gcc_3.2.3/lib
fi
##
## Use VisIt's Python.
##
PYDIR=$VISITHOME/python/linux_redhat_gcc_3.2.3
PYVERSION=python2.1
##
## Turn off warnings for deprecated features.
##
CXXFLAGS="-Wno-deprecated $CXXFLAGS"
##
## Gernerate position independent code.
##
CXXFLAGS="-fPIC -DMPI_NO_CPPBIND $CXXFLAGS"
##
## Add parallel arguments.
##
MPI_LIBS="-lmpi"
##
## Database reader plugin support libraries
##
###############################################################################
##
## Boxlib
##
DEFAULT_BOXLIB2D_INCLUDE=$VISITHOME/boxlib/linux_redhat_gcc_3.2.3/include/2D
DEFAULT_BOXLIB2D_LIBS=$VISITHOME/boxlib/linux_redhat_gcc_3.2.3/lib
DEFAULT_BOXLIB3D_INCLUDE=$VISITHOME/boxlib/linux_redhat_gcc_3.2.3/include/3D
DEFAULT_BOXLIB3D_LIBS=$VISITHOME/boxlib/linux_redhat_gcc_3.2.3/lib
##
## HDF4
##
DEFAULT_HDF4_FLAGS=$VISITHOME/hdf4/2.0/linux_ia64_chaos_gcc_3.3.3/include
DEFAULT_HDF4_LIBS=$VISITHOME/hdf4/2.0/linux_ia64_chaos_gcc_3.3.3/lib
##
## HDF5
##
DEFAULT_HDF5_INCLUDE=$VISITHOME/hdf5/1.6.0/linux_redhat_gcc_3.2.3/include
DEFAULT_HDF5_LIB=$VISITHOME/hdf5/1.6.0/linux_redhat_gcc_3.2.3/lib
##
## Silo
##
DEFAULT_SILO_INCLUDES=$VISITHOME/silo/4.4.3/linux_redhat_gcc_3.2.3/include
DEFAULT_SILO_LIBRARY=$VISITHOME/silo/4.4.3/linux_redhat_gcc_3.2.3/lib
......@@ -23,7 +23,7 @@ enhancements and bug-fixes that were added to this release.</p>
<li>VisIt's CLI now has embedded documentation for most of its functions, making it easy to see the argument list and usage information for each function.</li>
<li>VisIt now supports image annotation objects, which allow you to place logos or other graphics in your visualizations. To add an image annotation, open the <b>Annotations</b> window, click on the <b>Objects</b> tab, and click on the <b>Image</b> button. Clicking on the <b>Image</b> button will tell VisIt to create an empty image annotation object. Once you select an image file using the <b>Image</b> annotation object's controls in the <b>Annotations</b> window and click the <b>Apply</b> button, VisIt will load your image and insert it into your visualization.</li>
<li>VisIt now supports 2D line annotation objects, which allow you to point to objects within your visualization. The lines have optional arrow endpoints that can be used to indicate direction.To add a 2D line annotation, open the <b>Annotations</b> window, click on the <b>Objects</b> tab, and click on the <b>2D line</b> button.</li>
<li>VisIt now supports multimeshes, multivars, multimaterials, and multispecies where some domains have no data. This means that in the multi-object definition, which usually points to the name of another file's variable for a particular domain, you can now provide "EMPTY" to indicate that the domain has no data.</li>
<li>VisIt now supports multimeshes, multivars, multimaterials, and multispecies where some domains have no data. This means that in the multi-object definition, which usually points to the name of another file's variable for a particular domain, you can now provide "EMPTY" to indicate that the domain has no data. This enhancement prevents VisIt from failing to recognize when a mesh's domain list changes between time steps for certain database types.</li>
<li>VisIt now has <i>Moment of Inertia</i> and <i>Centroid</i> queries.</li>
<li>VisIt can now read in a set of image slices as a 3D volume. Simply create a file ending in ".imgvol" that contains the names of the image files that make up the 3D volume and VisIt will use the images to construct a 3D volume. This feature is useful for viewing CT data, which is often stored as a set of 2D images.</li>
<li>VisIt's Image database reader plugin has been improved in a number of ways. For example, only processor 0 will read the image header now. Caching has been re-enabled and the reader can now generate ghost data.</li>
......@@ -37,6 +37,9 @@ enhancements and bug-fixes that were added to this release.</p>
<li>VisIt's ghost zone communication was heavily optimized.</li>
<li>The following new math expressions were added: mod, round, ceil, and floor</li>
<li>VisIt can now use expressions to calculate what your mesh's coordinates are in cylindrical coordinates. In addition, new expressions were added to access components of these coordinates -- cylindrical_radius and cylindrical_theta, as well as polar_radius, polar_theta, and polar_phi.</li>
<li>VisIt's window layout logic has been changed so VisIt will always create the largest square windows in the available space.</li>
<li>VisIt's rarely used 4x4 window layout has been replaced by a 2x3 window layout.</li>
<li>VisIt now supports the creation of red/green stereo images.</li>
</ul>
<p><b><font size="4">Bugs fixed in version 1.4.4</font></b></p>
<ul>
......@@ -57,6 +60,10 @@ enhancements and bug-fixes that were added to this release.</p>
<li>VisIt's <i>visitconvert</i> program issues a lot of warnings when converting image files to another format.</li>
<li>Recentering a color image from zonal to nodal causes the Truecolor plot to display nothing.</li>
<li>The spatial extents query now has the correct return type in the command-line interface</li>
<li>Volume rendering now works correctly on rectilinear grids that have been reflected using the Reflect operator.</li>
<li>Picking on plots using the <i>mirvf</i> expression yields incorrect results on second and subsequent picks.</li>
<li>Picking on 2D Contour plots is broken.</li>
<li>Pick letters are not visible with an opaque Mesh plot of Boxlib data.</li>
</ul>
<p>Click the following link to view the release notes for the previous version
of VisIt: <a href="relnotes1.4.3.html">VisIt 1.4.3 Release Notes</a>.</p>
......
......@@ -532,47 +532,107 @@ avtReflectFilter::Reflect(vtkDataSet *ds, int dim)
// Hank Childs, Fri Aug 27 15:25:22 PDT 2004
// Rename ghost data arrays.
//
// Hank Childs, Tue Jul 5 09:44:27 PDT 2005
// Don't produce meshes that are "inside-out"/"degenerate". ['6321]
//
// ****************************************************************************
vtkDataSet *
avtReflectFilter::ReflectRectilinear(vtkRectilinearGrid *ds, int dim)
{
vtkRectilinearGrid *out = (vtkRectilinearGrid *) ds->NewInstance();
out->ShallowCopy(ds);
int nPts = out->GetNumberOfPoints();
int nPts = ds->GetNumberOfPoints();
int dims[3];
out->GetDimensions(dims);
ds->GetDimensions(dims);
out->GetFieldData()->ShallowCopy(ds->GetFieldData());
out->SetDimensions(dims);
out->GetPointData()->CopyAllocate(ds->GetPointData());
out->GetCellData()->CopyAllocate(ds->GetCellData());
//
// Reflect across X if appropriate.
//
bool flipI = false;
if (dim & 1)
{
vtkDataArray *tmp = ReflectDataArray(out->GetXCoordinates(), xReflect);
vtkDataArray *tmp = ReflectDataArray(ds->GetXCoordinates(), xReflect);
out->SetXCoordinates(tmp);
tmp->Delete();
flipI = true;
}
else
out->SetXCoordinates(ds->GetXCoordinates());
//
// Reflect across Y if appropriate.
//
bool flipJ = false;
if (dim & 2)
{
vtkDataArray *tmp = ReflectDataArray(out->GetYCoordinates(), yReflect);
vtkDataArray *tmp = ReflectDataArray(ds->GetYCoordinates(), yReflect);
out->SetYCoordinates(tmp);
tmp->Delete();
flipJ = true;
}
else
out->SetYCoordinates(ds->GetYCoordinates());
//
// Reflect across Z if appropriate.
//
bool flipK = false;
if (dim & 4)
{
vtkDataArray *tmp = ReflectDataArray(out->GetZCoordinates(), zReflect);
vtkDataArray *tmp = ReflectDataArray(ds->GetZCoordinates(), zReflect);
out->SetZCoordinates(tmp);
tmp->Delete();
flipK = true;
}
else
out->SetZCoordinates(ds->GetZCoordinates());
//
// Copy over the point data.
//
int i, j, k;
vtkPointData *inPD = ds->GetPointData();
vtkPointData *outPD = out->GetPointData();
for (k = 0 ; k < dims[2] ; k++)
for (j = 0 ; j < dims[1] ; j++)
for (i = 0 ; i < dims[0] ; i++)
{
int idx = k*dims[1]*dims[0] + j*dims[0] + i;
int oldI = (flipI ? dims[0]-1-i : i);
int oldJ = (flipJ ? dims[1]-1-j : j);
int oldK = (flipK ? dims[2]-1-k : k);
int oldIdx = oldK*dims[1]*dims[0] + oldJ*dims[0] + oldI;
outPD->CopyData(inPD, oldIdx, idx);
}
vtkCellData *inCD = ds->GetCellData();
vtkCellData *outCD = out->GetCellData();
int iEnd = dims[0]-1;
if (iEnd <= 0)
iEnd = 1;
int jEnd = dims[1]-1;
if (jEnd <= 0)
jEnd = 1;
int kEnd = dims[2]-1;
if (kEnd <= 0)
kEnd = 1;
for (k = 0 ; k < kEnd ; k++)
for (j = 0 ; j < jEnd ; j++)
for (i = 0 ; i < iEnd ; i++)
{
int idx = k*(dims[1]-1)*(dims[0]-1) + j*(dims[0]-1) + i;
int oldI = (flipI ? iEnd-1-i : i);
int oldJ = (flipJ ? jEnd-1-j : j);
int oldK = (flipK ? kEnd-1-k : k);
int oldIdx =oldK*(dims[1]-1)*(dims[0]-1)+oldJ*(dims[0]-1)+oldI;
outCD->CopyData(inCD, oldIdx, idx);
}
// Figure out which octents are present, meaning that nodes that are on
// the reflection plane are now interior.
bool doX, doY, doZ;
......@@ -676,6 +736,10 @@ avtReflectFilter::ReflectRectilinear(vtkRectilinearGrid *ds, int dim)
// Kathleen Bonnell, Fri Dec 13 16:41:12 PST 2002
// Use NewInstance instead of MakeObject in order to match vtk's new api.
//
// Hank Childs, Fri Jul 1 10:50:58 PDT 2005
// Reverse the coordinate array as we go. Otherwise the grid will be
// inverted.
//
// ****************************************************************************
vtkDataArray *
......@@ -691,7 +755,7 @@ avtReflectFilter::ReflectDataArray(vtkDataArray *coords, double val)
float *n = newcoords->GetTuple(0);
for (int i = 0 ; i < nc ; i++)
{
n[i] = 2*val - c[i];
n[nc-i-1] = 2*val - c[i];
}
return newcoords;
......
......@@ -2482,6 +2482,86 @@ ViewerFileServer::DetermineVarType(const std::string &host,
return retval;
}
// ****************************************************************************
// Method: ViewerFileServer::DetermineRealVarType
//
// Purpose:
// Determines the AVT variable type for the 'real' variable behind
// the specified variable.
//
// Arguments:
// host : The host where the file resides.
// db : The database.
// var : The variable that we want.
// state : The state at which we want information about the variable.
//
// Returns:
//
// Programmer: Kathleen Bonnell
// Creation: July 5, 2005
//
// Modifications:
//
// ****************************************************************************
avtVarType
ViewerFileServer::DetermineRealVarType(const std::string &host,
const std::string &db, const std::string &var, int state)
{
avtVarType retval = AVT_UNKNOWN_TYPE;
// Check if the variable is an expression.
ExpressionList expressionList;
GetAllExpressions(expressionList, host, db, state);
Expression *exp = expressionList[var.c_str()];
string realVar = var;
if (exp != NULL)
{
string realVar = ParsingExprList::GetRealVariable(var);
if (realVar != var)
exp = NULL;
}
if (exp != NULL)
{
retval = ParsingExprList::GetAVTType(exp->GetType());
}
else
{
const avtDatabaseMetaData *md = GetMetaDataForState(host, db, state);
if (md != 0)
{
//
// Get the type for the variable.
//
TRY
{
avtDatabaseMetaData *ncmd = (avtDatabaseMetaData *) md;
retval = ncmd->DetermineVarType(realVar);
}
CATCH(VisItException)
{
std::string message("VisIt was unable to determine "
"the real variable type for ");
message += host;
message += ":";
message += db;
message += "'s ";
message += var;
message += " variable.";
Error(message.c_str());
debug1 << "ViewerFileServer::DetermineVarType: Caught an "
"exception!" << endl;
retval = AVT_UNKNOWN_TYPE;
}
ENDTRY
}
}
return retval;
}
// ****************************************************************************
// Method: ViewerFileServer::GetUserExpressions
//
......
......@@ -124,6 +124,10 @@ class SILAttributes;
//
// Mark C. Miller, Tue May 31 20:12:42 PDT 2005
// Added methods to Set/Get tryHarderCyclesTimes
//
// Kathleen Bonnell, Tue Jul 5 14:46:52 PDT 2005
// Added DetermineRealVarType method.
//
// ****************************************************************************
class ViewerFileServer : public ViewerServerManager
......@@ -243,6 +247,10 @@ public:
const std::string &db,
const std::string &var,
int state);
avtVarType DetermineRealVarType(const std::string &host,
const std::string &db,
const std::string &var,
int state);
void GetUserExpressions(ExpressionList &newList);
void GetDatabaseExpressions(ExpressionList &newList,
const std::string &host,
......
......@@ -3973,6 +3973,34 @@ ViewerPlot::GetVarType(const std::string &var) const
databaseName, var, GetState());