Commit 0f246e95 authored by hrchilds's avatar hrchilds

Update from July 8, 2003

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@29 18c085ea-50e0-402c-830e-de6fd14e8384
parent facf795d
......@@ -18,6 +18,8 @@
static void RemovePrependedDirs(const char *, char *);
static void Finalize(void);
static char executableName[256];
static char componentName[256];
// ****************************************************************************
// Function: striparg
......@@ -164,6 +166,8 @@ Init::Initialize(int &argc, char *argv[], int r, int n, bool strip)
char progname_wo_dir[256];
RemovePrependedDirs(argv[0], progname_wo_dir);
strcpy(executableName, progname_wo_dir);
strcpy(componentName, progname_wo_dir);
char progname[256];
if (n > 1)
{
......@@ -206,6 +210,53 @@ Init::Initialize(int &argc, char *argv[], int r, int n, bool strip)
atexit(Finalize);
}
// ****************************************************************************
// Function: Init::SetComponentName
//
// Purpose: Sets the name of the component
//
// ****************************************************************************
void
Init::SetComponentName(const char *cname)
{
int len;
if (cname != 0 && (len = strlen(cname) > 0))
{
len = len < sizeof(componentName) ? len : sizeof(componentName) - 1;
strncpy(componentName, cname, len);
componentName[len]='\0';
}
}
// ****************************************************************************
// Function: Init::GetComponentName
//
// Purpose: Gets the name of the component. Defaults to name of the
// executable of it was not set.
//
// ****************************************************************************
const char *
Init::GetComponentName(void)
{
return (const char *) componentName;
}
// ****************************************************************************
// Function: Init::GetExecutableName
//
// Purpose: Gets the name of the executable
//
// ****************************************************************************
const char *
Init::GetExecutableName(void)
{
return (const char *) executableName;
}
// ****************************************************************************
// Method: Finalize
//
......
......@@ -5,6 +5,9 @@
namespace Init
{
void MISC_API Initialize(int &argc, char *argv[], int r=0, int n=1, bool strip=true);
void MISC_API SetComponentName(const char *);
const char * MISC_API GetExecutableName();
const char * MISC_API GetComponentName();
}
#endif
......@@ -10,13 +10,13 @@
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
// ****************************************************************************
PlaneAttributes::PlaneAttributes() : AttributeSubject("DDDbd")
PlaneAttributes::PlaneAttributes() : AttributeSubject("DDDbdb")
{
origin[0] = 0;
origin[1] = 0;
......@@ -29,6 +29,7 @@ PlaneAttributes::PlaneAttributes() : AttributeSubject("DDDbd")
upAxis[2] = 0;
haveRadius = false;
radius = 1;
threeSpace = false;
}
// ****************************************************************************
......@@ -40,13 +41,13 @@ PlaneAttributes::PlaneAttributes() : AttributeSubject("DDDbd")
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
// ****************************************************************************
PlaneAttributes::PlaneAttributes(const PlaneAttributes &obj) : AttributeSubject("DDDbd")
PlaneAttributes::PlaneAttributes(const PlaneAttributes &obj) : AttributeSubject("DDDbdb")
{
origin[0] = obj.origin[0];
origin[1] = obj.origin[1];
......@@ -62,6 +63,7 @@ PlaneAttributes::PlaneAttributes(const PlaneAttributes &obj) : AttributeSubject(
haveRadius = obj.haveRadius;
radius = obj.radius;
threeSpace = obj.threeSpace;
SelectAll();
}
......@@ -75,7 +77,7 @@ PlaneAttributes::PlaneAttributes(const PlaneAttributes &obj) : AttributeSubject(
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -95,7 +97,7 @@ PlaneAttributes::~PlaneAttributes()
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -118,6 +120,7 @@ PlaneAttributes::operator = (const PlaneAttributes &obj)
haveRadius = obj.haveRadius;
radius = obj.radius;
threeSpace = obj.threeSpace;
SelectAll();
}
......@@ -131,7 +134,7 @@ PlaneAttributes::operator = (const PlaneAttributes &obj)
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -162,7 +165,8 @@ PlaneAttributes::operator == (const PlaneAttributes &obj) const
normal_equal &&
upAxis_equal &&
(haveRadius == obj.haveRadius) &&
(radius == obj.radius));
(radius == obj.radius) &&
(threeSpace == obj.threeSpace));
}
// ****************************************************************************
......@@ -174,7 +178,7 @@ PlaneAttributes::operator == (const PlaneAttributes &obj) const
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -195,7 +199,7 @@ PlaneAttributes::operator != (const PlaneAttributes &obj) const
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -216,7 +220,7 @@ PlaneAttributes::TypeName() const
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -244,7 +248,7 @@ PlaneAttributes::CopyAttributes(const AttributeGroup *atts)
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -270,7 +274,7 @@ PlaneAttributes::CreateCompatible(const std::string &tname) const
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -284,6 +288,7 @@ PlaneAttributes::SelectAll()
Select(2, (void *)upAxis, 3);
Select(3, (void *)&haveRadius);
Select(4, (void *)&radius);
Select(5, (void *)&threeSpace);
}
///////////////////////////////////////////////////////////////////////////////
......@@ -299,7 +304,7 @@ PlaneAttributes::SelectAll()
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -346,6 +351,12 @@ PlaneAttributes::CreateNode(DataNode *parentNode, bool forceAdd)
node->AddNode(new DataNode("radius", radius));
}
if(!FieldsEqual(5, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("threeSpace", threeSpace));
}
// Add the node to the parent node.
if(addToParent || forceAdd)
......@@ -365,7 +376,7 @@ PlaneAttributes::CreateNode(DataNode *parentNode, bool forceAdd)
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -392,6 +403,8 @@ PlaneAttributes::SetFromNode(DataNode *parentNode)
SetHaveRadius(node->AsBool());
if((node = searchNode->GetNode("radius")) != 0)
SetRadius(node->AsDouble());
if((node = searchNode->GetNode("threeSpace")) != 0)
SetThreeSpace(node->AsBool());
}
///////////////////////////////////////////////////////////////////////////////
......@@ -439,6 +452,13 @@ PlaneAttributes::SetRadius(double radius_)
Select(4, (void *)&radius);
}
void
PlaneAttributes::SetThreeSpace(bool threeSpace_)
{
threeSpace = threeSpace_;
Select(5, (void *)&threeSpace);
}
///////////////////////////////////////////////////////////////////////////////
// Get property methods
///////////////////////////////////////////////////////////////////////////////
......@@ -491,6 +511,12 @@ PlaneAttributes::GetRadius() const
return radius;
}
bool
PlaneAttributes::GetThreeSpace() const
{
return threeSpace;
}
///////////////////////////////////////////////////////////////////////////////
// Select property methods
///////////////////////////////////////////////////////////////////////////////
......@@ -526,7 +552,7 @@ PlaneAttributes::SelectUpAxis()
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -542,6 +568,7 @@ PlaneAttributes::GetFieldName(int index) const
case 2: return "upAxis";
case 3: return "haveRadius";
case 4: return "radius";
case 5: return "threeSpace";
default: return "invalid index";
}
}
......@@ -555,7 +582,7 @@ PlaneAttributes::GetFieldName(int index) const
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -571,6 +598,7 @@ PlaneAttributes::GetFieldType(int index) const
case 2: return FieldType_doubleArray;
case 3: return FieldType_bool;
case 4: return FieldType_double;
case 5: return FieldType_bool;
default: return FieldType_unknown;
}
}
......@@ -584,7 +612,7 @@ PlaneAttributes::GetFieldType(int index) const
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -600,6 +628,7 @@ PlaneAttributes::GetFieldTypeName(int index) const
case 2: return "doubleArray";
case 3: return "bool";
case 4: return "double";
case 5: return "bool";
default: return "invalid index";
}
}
......@@ -613,7 +642,7 @@ PlaneAttributes::GetFieldTypeName(int index) const
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -668,6 +697,11 @@ PlaneAttributes::FieldsEqual(int index_, const AttributeGroup *rhs) const
retval = (radius == obj.radius);
}
break;
case 5:
{ // new scope
retval = (threeSpace == obj.threeSpace);
}
break;
default: retval = false;
}
......
......@@ -12,7 +12,7 @@
// Notes: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: Tue May 20 13:40:01 PST 2003
// Creation: Thu Jul 3 11:13:15 PDT 2003
//
// Modifications:
//
......@@ -45,6 +45,7 @@ public:
void SetUpAxis(const double *upAxis_);
void SetHaveRadius(bool haveRadius_);
void SetRadius(double radius_);
void SetThreeSpace(bool threeSpace_);
// Property getting methods
const double *GetOrigin() const;
......@@ -55,6 +56,7 @@ public:
double *GetUpAxis();
bool GetHaveRadius() const;
double GetRadius() const;
bool GetThreeSpace() const;
// Persistence methods
virtual bool CreateNode(DataNode *node, bool forceAdd);
......@@ -73,6 +75,7 @@ private:
double upAxis[3];
bool haveRadius;
double radius;
bool threeSpace;
};
#endif
......@@ -5,5 +5,7 @@
<Field name="upAxis" type="doubleArray" length="3"> 0. 1. 0. </Field>
<Field name="haveRadius" type="bool">false</Field>
<Field name="radius" type="double" >1 </Field>
<Field name="threeSpace" label="threeSpace" type="bool" internal="true"> false
</Field>
</Attribute>
......@@ -85,12 +85,28 @@ avtDataRepresentation::avtDataRepresentation()
//
// ****************************************************************************
avtDataRepresentation::avtDataRepresentation(vtkDataSet *d, int dom, string s)
avtDataRepresentation::avtDataRepresentation(vtkDataSet *d, int dom, string s,
bool dontCopyData)
{
asVTK = d;
if (asVTK != NULL)
if (dontCopyData)
{
asVTK->Register(NULL);
// build the points object (not a vtkDataSet object)
vtkPoints *dummyPoints = vtkPoints::New();
vtkUnstructuredGrid *dummyGrid = vtkUnstructuredGrid::New();
dummyPoints->SetNumberOfPoints(0);
dummyGrid->SetPoints(dummyPoints);
asVTK = dummyGrid;
asVTK->Register(NULL);
dummyPoints->Delete();
dummyGrid->Delete();
}
else
{
asVTK = d;
if (asVTK != NULL)
{
asVTK->Register(NULL);
}
}
asChar = NULL;
asCharLength = 0;
......
......@@ -58,7 +58,8 @@ class PIPELINE_API avtDataRepresentation
{
public:
avtDataRepresentation();
avtDataRepresentation(vtkDataSet *, int, std::string);
avtDataRepresentation(vtkDataSet *, int, std::string,
bool dontCopyData = false);
avtDataRepresentation(char *, int, int, std::string,
CharStrRef &, DataSetType);
avtDataRepresentation(const avtDataRepresentation &);
......
......@@ -9,9 +9,6 @@
#include <vtkAppendFilter.h>
#include <vtkDataSet.h>
#include <vtkDataSetWriter.h>
#include <vtkPoints.h>
#include <vtkPolyVertex.h>
#include <vtkUnstructuredGrid.h>
#include <avtDataRepresentation.h>
#include <avtCommonDataFunctions.h>
......@@ -408,37 +405,16 @@ avtDataTree::avtDataTree(avtDataTree_p dt, bool dontCopyData)
else
{
children = NULL;
if (!dontCopyData)
dataRep = new avtDataRepresentation( dt->GetDataRepresentation() );
if (dontCopyData)
{
avtDataRepresentation& oldRep = dt->GetDataRepresentation();
dataRep = new avtDataRepresentation(NULL, oldRep.GetDomain(),
oldRep.GetLabel(),
dontCopyData);
}
else
{
// build a dummy dataset with two points on the extreme diagonal
// bounds of the existing dataset
avtDataRepresentation& oldRep = dt->GetDataRepresentation();
vtkDataSet *origDataSet = oldRep.GetDataVTK();
float bounds[6];
origDataSet->GetBounds(bounds);
// build the points object (not a vtkDataSet object)
vtkPoints *dummyPoints = vtkPoints::New();
dummyPoints->SetNumberOfPoints(2);
dummyPoints->SetDataTypeToDouble();
dummyPoints->InsertPoint(0,bounds[0],bounds[2],bounds[4]);
dummyPoints->InsertPoint(1,bounds[1],bounds[3],bounds[5]);
vtkPolyVertex *dummyVerts = vtkPolyVertex::New();
dummyVerts->GetPointIds()->SetNumberOfIds(2);
dummyVerts->GetPointIds()->SetId(0,0);
dummyVerts->GetPointIds()->SetId(1,1);
vtkUnstructuredGrid *dummyGrid = vtkUnstructuredGrid::New();
dummyGrid->Allocate(1,1);
dummyGrid->InsertNextCell(dummyVerts->GetCellType(),
dummyVerts->GetPointIds());
dummyGrid->SetPoints(dummyPoints);
dataRep = new avtDataRepresentation(dummyGrid, oldRep.GetDomain(),
oldRep.GetLabel());
dataRep = new avtDataRepresentation( dt->GetDataRepresentation() );
}
}
}
......
......@@ -323,6 +323,9 @@ avtResampleFilter::BypassResample(void)
// Brad Whitlock, Thu Apr 4 14:49:01 PST 2002
// Changed CopyTo so it is an inline template function.
//
// Hank Childs, Mon Jul 7 22:31:00 PDT 2003
// Copy over whether or not an error occurred in resampling.
//
// ****************************************************************************
void
......@@ -391,6 +394,13 @@ avtResampleFilter::ResampleInput(void)
avtSamplePoints_p samples = extractor.GetTypedOutput();
samples->Update(GetGeneralPipelineSpecification());
if (samples->GetInfo().GetValidity().HasErrorOccurred())
{
GetOutput()->GetInfo().GetValidity().ErrorOccurred();
GetOutput()->GetInfo().GetValidity().SetErrorMessage(
samples->GetInfo().GetValidity().GetErrorMessage());
}
//
// Create a rectilinear dataset that is stretched according to the
// original bounds.
......
......@@ -16,6 +16,7 @@
#include <avtExtents.h>
#include <DebugStream.h>
#include <VisItException.h>
static bool IsIdentity(vtkMatrix4x4 *);
......@@ -162,6 +163,9 @@ void vtkVisItMatrixToHomogeneousTransform::TransformPointsNormalsVectors(vtkPoin
// Hank Childs, Tue Sep 10 15:22:38 PDT 2002
// Perform all memory management from within this routine.
//
// Hank Childs, Mon Jul 7 22:31:00 PDT 2003
// Throw an exception for unknown data types.
//
// ****************************************************************************
vtkDataSet *
......@@ -198,7 +202,7 @@ avtTransform::ExecuteData(vtkDataSet *in_ds, int, std::string)
default:
debug1 << "Improper input to transform." << endl;
transform->SetInput(vtkUnstructuredGrid::New());
EXCEPTION1(VisItException, "Cannot process unknown data type.");
break;
}
......
......@@ -212,10 +212,11 @@ avtWholeImageCompositer::Execute(void)
unsigned char *rgb0 = zeroImageRep.GetRGBBuffer();
for (i = 0; i < nPixels; i++)
{
ioz[i] = z0[i];
iorgb[3*i+0] = rgb0[3*i+0];
iorgb[3*i+1] = rgb0[3*i+1];
iorgb[3*i+2] = rgb0[3*i+2];
int ii = 3*i;
ioz[i] = z0[i];
iorgb[ii+0] = rgb0[ii+0];
iorgb[ii+1] = rgb0[ii+1];
iorgb[ii+2] = rgb0[ii+2];
}
}
else
......@@ -325,9 +326,6 @@ MergeBuffers(avtWholeImageCompositer *thisObj, int npixels, bool doParallel,
ZFPixel_t *inzf = new ZFPixel_t [chunk+1];
ZFPixel_t *iozf = new ZFPixel_t [chunk+1];
if (chunk < npixels)
cerr << "avtWholeImageCompositer.MergeBuffers is using multiple chunks" << endl;
io = 0;
while (npixels)
{
......@@ -335,10 +333,11 @@ MergeBuffers(avtWholeImageCompositer *thisObj, int npixels, bool doParallel,
for (int i = 0, j = io; i < len; i++, j++)
{
int jj = 3*j;
inzf[i].z = inz[j];
inzf[i].r = inrgb[3*j+0];
inzf[i].g = inrgb[3*j+1];
inzf[i].b = inrgb[3*j+2];
inzf[i].r = inrgb[jj+0];
inzf[i].g = inrgb[jj+1];
inzf[i].b = inrgb[jj+2];
}
// put the background color info in the last entry in the array
......@@ -357,17 +356,20 @@ MergeBuffers(avtWholeImageCompositer *thisObj, int npixels, bool doParallel,
#else
if (doParallel)
EXCEPTION0(ImproperUseException);
MergeZFPixelBuffers(inzf, iozf, &len, NULL);
{ int adjustedLen = len+1;
MergeZFPixelBuffers(inzf, iozf, &adjustedLen, NULL);
}
#endif
if (!doParallel || mpiRank == mpiRoot)
{
for (int i = 0; i < len; i++, io++)
{
ioz[io] = iozf[i].z;
iorgb[3*io+0] = iozf[i].r;
iorgb[3*io+1] = iozf[i].g;
iorgb[3*io+2] = iozf[i].b;
int ii = 3*io;
ioz[io] = iozf[i].z;
iorgb[ii+0] = iozf[i].r;
iorgb[ii+1] = iozf[i].g;
iorgb[ii+2] = iozf[i].b;
}
}
else
......
......@@ -139,6 +139,9 @@ avtWorldSpaceToImageSpaceTransform::~avtWorldSpaceToImageSpaceTransform()
// Hank Childs, Mon Nov 26 18:33:16 PST 2001
// Made use of aspect ratio.
//
// Hank Childs, Mon Jul 7 22:32:37 PDT 2003
// Add support for image pan and zoom.
//
// ****************************************************************************
void
......@@ -167,6 +170,17 @@ avtWorldSpaceToImageSpaceTransform::CalculateTransform(const avtViewInfo &view,
scaletrans->SetElement(1, 1, scale[1]);
scaletrans->SetElement(2, 2, scale[2]);
//
// Now take in the zoom and pan portions. These are both image space
// operations.
//
vtkMatrix4x4 *imageZoomAndPan = vtkMatrix4x4::New();
imageZoomAndPan->Identity();
imageZoomAndPan->SetElement(0, 0, view.imageZoom);
imageZoomAndPan->SetElement(1, 1, view.imageZoom);
imageZoomAndPan->SetElement(0, 3, 2*view.imagePan[0]*view.imageZoom);
imageZoomAndPan->SetElement(1, 3, 2*view.imagePan[1]*view.imageZoom);
//
// World space is a left-handed coordinate system. Image space (as used
// in the sample point extractor) is a right-handed coordinate system.
......@@ -185,15 +199,20 @@ avtWorldSpaceToImageSpaceTransform::CalculateTransform(const avtViewInfo &view,
// them so I am sure everything will work.
//
vtkMatrix4x4 *tmp = vtkMatrix4x4::New();
vtkMatrix4x4 *tmp2 = vtkMatrix4x4::New();
viewtrans->Transpose();
imageZoomAndPan->Transpose();
vtkMatrix4x4::Multiply4x4(viewtrans, scaletrans, tmp);
vtkMatrix4x4::Multiply4x4(tmp, reflectTrans, trans);
vtkMatrix4x4::Multiply4x4(tmp, imageZoomAndPan, tmp2);
vtkMatrix4x4::Multiply4x4(tmp2, reflectTrans, trans);
trans->Transpose();
viewtrans->Delete();
scaletrans->Delete();
imageZoomAndPan->Delete();
reflectTrans->Delete();
tmp->Delete();
tmp2->Delete();
}
......
......@@ -181,10 +181,13 @@ avtExternallyRenderedImagesActor::PrepareForRender(vtkCamera *cam)
return;
// issue the external rendering callback
avtDataObject_p dob = NULL;
// we play a trick with initialization of dob to create a useful
// NULL-like pointer that we can distinguish from NULL itself
int n = 2;
avtDataObject_p dob = ref_ptr<avtDataObject>((avtDataObject*)1,&n);
DoExternalRender(dob);
if ((*dob != NULL) && !strcmp(dob->GetType(),"avtImage"))
if ((*dob != NULL) && (*dob != (avtDataObject*)1) && !strcmp(dob->GetType(),"avtImage"))
{
// we know this is really an avtImage object, so make one from it
avtImage_p img;
......@@ -192,6 +195,11 @@ avtExternallyRenderedImagesActor::PrepareForRender(vtkCamera *cam)
avtImageRepresentation& imgRep = img->GetImage();
myMapper->SetInput(imgRep.GetImageVTK());
}
else
{
if (*dob == NULL)
myMapper->SetInput(dummyImage);
}
}
......
......@@ -201,6 +201,14 @@ avtMapper::ClearSelf(void)
//
// Nothing should be done with the transparency actor -- we don't own it.
//
mappers = NULL;
actors = NULL;
}
void
avtMapper::ReleaseData(void)
{
ClearSelf();
}
......
......@@ -66,6 +66,7 @@ class PLOTTER_API avtMapper : public avtOriginatingDatasetSink
avtMapper();
virtual ~avtMapper();
void ReleaseData();
avtDrawable_p GetDrawable();
virtual bool GetRange(float &, float &);
virtual bool GetCurrentRange(float &, float &);
......
......@@ -979,6 +979,13 @@ avtPlot::ReleaseData(void)
compactTreeFilter->ReleaseData();
currentExtentFilter->ReleaseData();
vertexNormalsFilter->ReleaseData();
if (GetMapper() != NULL)