Commit db835d47 authored by hrchilds's avatar hrchilds

Update from December 22, 2006

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@785 18c085ea-50e0-402c-830e-de6fd14e8384
parent dfc864b4
......@@ -1005,25 +1005,28 @@ class MakeMovie:
def SendEmail(self, subject, msg):
if self.emailAddresses != "":
import sys, smtplib
server = smtplib.SMTP('localhost')
domain = "llnl.gov"
d = string.split(os.uname()[1], ".")
if len(d) > 2:
name = ""
for i in range(1, len(d)):
name = name + d[i]
if i < len(d)-1:
name = name + "."
fromaddr = "visit@" + domain
msg2 = "To: %s\n" % self.emailAddresses
msg2 = msg2 + "Subject: %s\n" % subject
msg2 = msg2 + msg
self.Debug(2, "E-mail sent: \n" + msg)
server.sendmail(fromaddr, self.emailAddresses, msg2)
server.quit()
try:
import sys, smtplib
server = smtplib.SMTP('localhost')
domain = "llnl.gov"
d = string.split(os.uname()[1], ".")
if len(d) > 2:
name = ""
for i in range(1, len(d)):
name = name + d[i]
if i < len(d)-1:
name = name + "."
fromaddr = "visit@" + domain
msg2 = "To: %s\n" % self.emailAddresses
msg2 = msg2 + "Subject: %s\n" % subject
msg2 = msg2 + msg
self.Debug(2, "E-mail sent: \n" + msg)
server.sendmail(fromaddr, self.emailAddresses, msg2)
server.quit()
except:
self.Debug(2, "E-mail not sent due to an exception.\n" + msg)
else:
self.Debug(2, "E-mail not sent.\n" + msg)
......@@ -2180,11 +2183,12 @@ class MakeMovie:
# Read the XML file.
self.Debug(1, "Opening template file: %s" % self.templateFile)
f = open(self.templateFile, "rt")
templateReader = MovieTemplateReader()
parser = make_parser()
parser.setContentHandler(templateReader)
parser.parse(f)
lines = f.readlines()
f.close()
templateReader = MovieTemplateReader()
for line in lines:
templateReader.feed(line)
templateReader.close()
# Get the name of the template work file from the XML template.
templatePY = prefix + "movietemplates" + self.slash + "visitmovietemplate.py"
......
......@@ -34,8 +34,7 @@
# DAMAGE.
#
##############################################################################
from xml.sax import make_parser
from xml.sax.handler import ContentHandler
from xmllib import *
import string
###############################################################################
......@@ -52,7 +51,13 @@ import string
#
###############################################################################
class MovieTemplateReader(ContentHandler):
def attrs_getValue(dict, name):
ret = None
if name in dict.keys():
ret = dict[name]
return ret
class MovieTemplateReader(XMLParser):
###########################################################################
# Method: __init__
#
......@@ -70,6 +75,10 @@ class MovieTemplateReader(ContentHandler):
###########################################################################
def __init__ (self):
XMLParser.__init__(self)
self.elements = {"Object" : ("<Object>", "</Object>"), "Field" : ("<Field>", "</Field>")}
self.attributes = {"name" : "", "type" : None, "length" : 0}
self.viewport_data = {}
self.sequence_data = {}
self.generic_data = {}
......@@ -105,35 +114,36 @@ class MovieTemplateReader(ContentHandler):
#
###########################################################################
def startElement(self, name, attrs):
def handle_starttag(self, name, method, attrs):
self.line = ""
self.fieldName = ""
self.fieldType = ""
self.fieldLength = 0
#print "<%s name=\"%s\">" % (name, attrs.getValue("name"))
#print "<%s name=\"%s\">" % (name, attrs_getValue(attrs, "name"))
if name == "Object":
if attrs.getValue("name") == "VIEWPORTS":
if attrs_getValue(attrs, "name") == "VIEWPORTS":
self.readMode = self.READ_VIEWPORT
self.objectIndent = 1
elif attrs.getValue("name") == "SEQUENCEDATA":
elif attrs_getValue(attrs, "name") == "SEQUENCEDATA":
self.readMode = self.READ_SEQUENCE
self.objectIndent = 1
else:
self.objectIndent = self.objectIndent + 1
if name == "Object":
objName = attrs.getValue("name")
objName = attrs_getValue(attrs, "name")
if self.readMode == self.READ_VIEWPORT:
self.viewport_name = objName
elif self.readMode == self.READ_SEQUENCE:
self.sequence_name = objName
elif name == "Field":
self.fieldName = attrs.getValue("name")
self.fieldType = attrs.getValue("type")
self.fieldName = attrs_getValue(attrs, "name")
self.fieldType = attrs_getValue(attrs, "type")
try:
self.fieldLength = eval(attrs.getValue("length"))
except KeyError:
#print "length=", attrs_getValue(attrs,"length")
self.fieldLength = int(attrs_getValue(attrs,"length"))
except:
self.fieldLength = 0
###########################################################################
......@@ -154,8 +164,9 @@ class MovieTemplateReader(ContentHandler):
#
###########################################################################
def characters (self, ch):
self.line = self.line + ch
def handle_data(self, data):
#print "handle_data: data=", data
self.line = self.line + data
###########################################################################
# Method: SpacedListToStringTuple
......@@ -292,7 +303,7 @@ class MovieTemplateReader(ContentHandler):
#
###########################################################################
def endElement(self, name):
def handle_endtag(self, name, method):
#print self.line
#print "</%s name=%s, type=%s, length=%d>" % (name, self.fieldName, self.fieldType, self.fieldLength)
if name == "Field":
......@@ -1218,8 +1229,8 @@ class VisItMovieTemplate:
"seqBase=%s, outputName=%s" % \
(nFrames, seqBase, outputName))
command = "visit -transition %s %s %s %s" % \
(transitionInputs[0], transitionInputs[1],\
command = "visit -transition -v %s %s %s %s %s" % \
(Version(), transitionInputs[0], transitionInputs[1],\
transitionInputs[2], transitionInputs[3])
command = command + " -style %s" % transitionTypes2Arg[thisSequence["sequenceType"]]
command = command + " -output %s -nframes %d" % (outputName, nFrames)
......@@ -1504,7 +1515,10 @@ class VisItMovieTemplate:
seqIndex = i
break
sequence_t[seq] = float(image_in_sequence[seq]) / float(sequence_frames[seq][0]-1)
if sequence_frames[seq][0] > 1:
sequence_t[seq] = float(image_in_sequence[seq]) / float(sequence_frames[seq][0]-1)
else:
sequence_t[seq] = 1.
if seqType in self.compositingSequences:
# Get the filename for the composite sequence since
# this sequence is kind of a transition and needs inputs.
......@@ -1644,7 +1658,7 @@ class VisItMovieTemplate:
index = index + 1
f.close()
command = "visit -composite %s %s" % (paramFile, outputName)
command = "visit -composite -v %s %s %s" % (Version(), paramFile, outputName)
self.Debug(5, command)
os.system(command)
......
/*****************************************************************************
*
* Copyright (c) 2000 - 2006, The Regents of the University of California
* Produced at the Lawrence Livermore National Laboratory
* All rights reserved.
*
* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. 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 materials provided with the distribution.
* - Neither the name of the UC/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 THE REGENTS OF THE UNIVERSITY OF
* CALIFORNIA, 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.
*
*****************************************************************************/
// ************************************************************************* //
// avtEvalPointExpression.h //
// ************************************************************************* //
#include <avtEvalPointExpression.h>
#include <vtkMatrix4x4.h>
#include <avtCustomTransform.h>
#include <avtSourceFromAVTDataset.h>
#include <ExpressionException.h>
// ****************************************************************************
// Method: avtEvalPointExpression constructor
//
// Purpose:
// Defines the constructor. Note: this should not be inlined in the
// header because it causes problems for certain compilers.
//
// Programmer: Hank Childs
// Creation: December 21, 2006
//
// ****************************************************************************
avtEvalPointExpression::avtEvalPointExpression()
{
}
// ****************************************************************************
// Method: avtEvalPointExpression destructor
//
// Purpose:
// Defines the destructor. Note: this should not be inlined in the
// header because it causes problems for certain compilers.
//
// Programmer: Hank Childs
// Creation: December 21, 2006
//
// ****************************************************************************
avtEvalPointExpression::~avtEvalPointExpression()
{
}
// ****************************************************************************
// Method: avtEvalPointExpression::TransformData
//
// Purpose:
// Transforms the data based on the input parameters.
//
// Programmer: Hank Childs
// Creation: December 21, 2006
//
// ****************************************************************************
avtDataObject_p
avtEvalPointExpression::TransformData(avtDataObject_p input)
{
//
// Gameplan: For each point (X,Y,Z), the vector to a point (X0, Y0, Z0)
// is (X0-X, Y0-Y, Z0-Z). So we want to move 2*(X0-X, Y0-Y, Z0-Z).
// Then the final point is (2X0-X, 2Y0-Y, 2Z0-Z). So set up a transform
// that does this.
//
float X = inputParameters[0];
float Y = inputParameters[1];
float Z = inputParameters[2];
vtkMatrix4x4 *mat = vtkMatrix4x4::New();
mat->SetElement(0, 0, -1);
mat->SetElement(1, 1, -1);
mat->SetElement(2, 2, -1);
mat->SetElement(0, 3, +2*X);
mat->SetElement(1, 3, +2*Y);
mat->SetElement(2, 3, +2*Z);
avtDataset_p ds;
CopyTo(ds, input);
avtSourceFromAVTDataset termsrc(ds);
avtCustomTransform transform;
transform.SetMatrix(mat);
transform.SetInput(termsrc.GetOutput());
avtDataObject_p output = transform.GetOutput();
output->Update(GetGeneralPipelineSpecification());
mat->Delete();
return output;
}
/*****************************************************************************
*
* Copyright (c) 2000 - 2006, The Regents of the University of California
* Produced at the Lawrence Livermore National Laboratory
* All rights reserved.
*
* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. 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 materials provided with the distribution.
* - Neither the name of the UC/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 THE REGENTS OF THE UNIVERSITY OF
* CALIFORNIA, 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.
*
*****************************************************************************/
// ************************************************************************* //
// avtEvalPointExpression.h //
// ************************************************************************* //
#ifndef AVT_EVAL_POINT_EXPRESSION_H
#define AVT_EVAL_POINT_EXPRESSION_H
#include <avtSymmEvalExpression.h>
// ****************************************************************************
// Class: avtEvalPointExpression
//
// Purpose:
// Creates an expression that evaluates values after a transformation.
//
// Programmer: Hank Childs
// Creation: December 21, 2006
//
// ****************************************************************************
class EXPRESSION_API avtEvalPointExpression : public avtSymmEvalExpression
{
public:
avtEvalPointExpression();
virtual ~avtEvalPointExpression();
protected:
virtual int GetNumberOfInputParameters(void) { return 3; };
virtual avtDataObject_p TransformData(avtDataObject_p);
};
#endif
......@@ -36,7 +36,7 @@
*****************************************************************************/
// ************************************************************************* //
// avtSymmPlaneExpression.h //
// avtSymmPlaneExpression.h //
// ************************************************************************* //
#include <avtSymmPlaneExpression.h>
......@@ -77,7 +77,7 @@ avtSymmPlaneExpression::~avtSymmPlaneExpression()
//
// Purpose:
// Applies the macro to create a new expression corresponding to
// the Laplacian.
// plane symmetry.
//
// Programmer: Hank Childs
// Creation: January 21, 2006
......
/*****************************************************************************
*
* Copyright (c) 2000 - 2006, The Regents of the University of California
* Produced at the Lawrence Livermore National Laboratory
* All rights reserved.
*
* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. 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 materials provided with the distribution.
* - Neither the name of the UC/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 THE REGENTS OF THE UNIVERSITY OF
* CALIFORNIA, 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.
*
*****************************************************************************/
// ************************************************************************* //
// avtSymmPointExpression.h //
// ************************************************************************* //
#include <avtSymmPointExpression.h>
#include <stdio.h>
// ****************************************************************************
// Method: avtSymmPointExpression constructor
//
// Programmer: Hank Childs
// Creation: December 21, 2006
//
// ****************************************************************************
avtSymmPointExpression::avtSymmPointExpression()
{
;
}
// ****************************************************************************
// Method: avtSymmPointExpression destructor
//
// Programmer: Hank Childs
// Creation: December 21, 2006
//
// ****************************************************************************
avtSymmPointExpression::~avtSymmPointExpression()
{
;
}
// ****************************************************************************
// Method: avtSymmPointExpression::GetMacro
//
// Purpose:
// Applies the macro to create a new expression corresponding to
// the symmetry around a point.
//
// Programmer: Hank Childs
// Creation: December 21, 2006
//
// ****************************************************************************
void
avtSymmPointExpression::GetMacro(std::vector<std::string> &args, std::string &ne,
Expression::ExprType &type)
{
char new_expr[1024];
sprintf(new_expr, "%s - eval_point(%s, %s, %s)",
args[0].c_str(), args[0].c_str(), args[0].c_str(),
args[1].c_str());
ne = new_expr;
type = Expression::ScalarMeshVar;
}
/*****************************************************************************
*
* Copyright (c) 2000 - 2006, The Regents of the University of California
* Produced at the Lawrence Livermore National Laboratory
* All rights reserved.
*
* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. 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 materials provided with the distribution.
* - Neither the name of the UC/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 THE REGENTS OF THE UNIVERSITY OF
* CALIFORNIA, 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.
*
*****************************************************************************/
// ************************************************************************* //
// avtSymmPointExpression.h //
// ************************************************************************* //
#ifndef AVT_SYMM_POINT_EXPRESSION_H
#define AVT_SYMM_POINT_EXPRESSION_H
#include <avtMacroExpressionFilter.h>
// ****************************************************************************
// Class: avtSymmPointExpression
//
// Purpose:
// Uses the EvalPointExpression to calculate differences.
//
// Programmer: Hank Childs
// Creation: December 21, 2006
//
// ****************************************************************************
class EXPRESSION_API avtSymmPointExpression : public avtMacroExpressionFilter
{
public:
avtSymmPointExpression();
virtual ~avtSymmPointExpression();
virtual const char *GetType(void)
{ return "avtSymmPointExpression"; };
virtual const char *GetDescription(void)
{ return "Calculating the SymmPoint"; };
protected:
virtual void GetMacro(std::vector<std::string> &,
std::string &ne, Expression::ExprType &type);
};
#endif
......@@ -177,6 +177,9 @@
# avtStrainGreenLagrangeFilter, avtStrainInfinitesimalFilter
# avtStrainRateFilter, and avtStrainTensorFilter
#
# Hank Childs, Fri Dec 22 09:56:13 PST 2006
# Added avtEvalPointExpression and avtSymmPointExpression.
#
##############################################################################
@SET_MAKE@
......@@ -213,11 +216,13 @@ Conditional_src= \
CMFE_src= \
CMFE/avtCMFEExpression.C \
CMFE/avtConnCMFEExpression.C \
CMFE/avtEvalPointExpression.C \
CMFE/avtEvalPlaneExpression.C \
CMFE/avtEvalTransformExpression.C \
CMFE/avtPosCMFEAlgorithm.C \
CMFE/avtPosCMFEExpression.C \
CMFE/avtSymmEvalExpression.C \
CMFE/avtSymmPointExpression.C \
CMFE/avtSymmPlaneExpression.C \
CMFE/avtSymmTransformExpression.C
......
......@@ -140,6 +140,8 @@
#include <avtSymmTransformExpression.h>
#include <avtEvalPlaneExpression.h>
#include <avtSymmPlaneExpression.h>
#include <avtEvalPointExpression.h>
#include <avtSymmPointExpression.h>
#include <avtTimeExpression.h>
#include <avtMinMaxExpression.h>
......@@ -427,6 +429,9 @@ avtVectorExpr::CreateFilters(ExprPipelineState *state)
// avtStrainInfinitesimalFilter, avtStrainRateFilter, and
// avtDisplacementFilter
//
// Hank Childs, Fri Dec 22 10:03:40 PST 2006
// Added eval_point and symm_point.
//
// ****************************************************************************
avtExpressionFilter *
......@@ -689,6 +694,10 @@ avtFunctionExpr::CreateFilters(string functionName)
return new avtEvalPlaneExpression;
if (functionName == "symm_plane")
return new avtSymmPlaneExpression;
if (functionName == "eval_point")
return new avtEvalPointExpression;
if (functionName == "symm_point")
return new avtSymmPointExpression;
if (functionName == "time")
return new avtTimeExpression;
if (functionName == "surface_normal" ||
......
......@@ -46,6 +46,8 @@
#include <avtDataObjectString.h>
#include <avtDataObjectWriter.h>
#include <avtExtents.h>
#include <avtWebpage.h>
#include <BufferConnection.h>
#include <PlotInfoAttributes.h>
......@@ -4085,3 +4087,202 @@ avtDataAttributes::SetPlotInfoAtts(const PlotInfoAttributes *pia)
}
// ****************************************************************************
// Method: avtDataAttributes::DebugDump
//
// Purpose:
// Dump the attributes to a webpage.
//
// Programmer: Hank Childs
// Creation: December 21, 2006
//
// ****************************************************************************
static const char *
YesOrNo(bool b)
{
static const char *yes_str = "yes";
static const char *no_str = "no";
if (b)
return yes_str;
return no_str;
}
static void ExtentsToString(avtExtents *exts, char *str)
{
int dim = exts->GetDimension();
double e[6];
exts->CopyTo(e);