Commit d99e994e authored by hrchilds's avatar hrchilds

Update from April 4, 2005

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@444 18c085ea-50e0-402c-830e-de6fd14e8384
parent 469dbf79
......@@ -16,6 +16,7 @@
#define VAR_CATEGORY_CURVE 0x0040
#define VAR_CATEGORY_TENSOR 0x0080
#define VAR_CATEGORY_SYMMETRIC_TENSOR 0x0100
#define VAR_CATEGORY_LABEL 0x0200
// Forward declarations.
class AttributeSubject;
......
......@@ -1004,6 +1004,9 @@ PickVarInfo::PrintSelf(ostream &os)
// Kathleen Bonnell, Thu Jul 22 12:06:53 PDT 2004
// Cast values to char if treatAsASCII is true.
//
// Brad Whitlock, Mon Apr 4 12:12:19 PDT 2005
// Added support for printing label variables.
//
// ****************************************************************************
void
PickVarInfo::CreateOutputString(std::string &os, const std::string &type)
......@@ -1188,6 +1191,17 @@ PickVarInfo::CreateOutputString(std::string &os, const std::string &type)
int ncomps = values.size() / names.size();
PrintSymmetricTensor(os, values, i, ncomps, buf_len);
}
else if (variableType == "label")
{
int labelSize = values.size() / names.size();
os += "= ";
for (int j = labelSize*i; j < labelSize * (i+1); j++)
{
char c[2] = {(char)values[j], 0};
os += c;
}
os += "\n";
}
else
{
os += "\n";
......
......@@ -154,6 +154,9 @@ Definition:
// Kathleen Bonnell, Thu Jul 22 12:06:53 PDT 2004
// Cast values to char if treatAsASCII is true.
//
// Brad Whitlock, Mon Apr 4 12:12:19 PDT 2005
// Added support for printing label variables.
//
// ****************************************************************************
void
PickVarInfo::CreateOutputString(std::string &os, const std::string &type)
......@@ -338,6 +341,17 @@ PickVarInfo::CreateOutputString(std::string &os, const std::string &type)
int ncomps = values.size() / names.size();
PrintSymmetricTensor(os, values, i, ncomps, buf_len);
}
else if (variableType == "label")
{
int labelSize = values.size() / names.size();
os += "= ";
for (int j = labelSize*i; j < labelSize * (i+1); j++)
{
char c[2] = {(char)values[j], 0};
os += c;
}
os += "\n";
}
else
{
os += "\n";
......
......@@ -405,6 +405,29 @@ public:
void Validate(void);
};
//----------------------------------------------------------------------------
// Class: avtLabelMetaData
//
// Modifications:
//
//----------------------------------------------------------------------------
struct DBATTS_API avtLabelMetaData : public AttributeSubject
{
std::string name;
std::string originalName;
std::string meshName;
avtCentering centering;
bool validVariable;
public:
avtLabelMetaData();
avtLabelMetaData(const std::string &, const std::string &, avtCentering);
avtLabelMetaData(const avtLabelMetaData&);
virtual ~avtLabelMetaData();
const avtLabelMetaData &operator=(const avtLabelMetaData&);
virtual void SelectAll();
void Print(ostream &, int = 0) const;
};
//----------------------------------------------------------------------------
// Class: avtDefaultPlotMetaData
//----------------------------------------------------------------------------
......@@ -448,7 +471,11 @@ public:
// Hank Childs, Mon Feb 14 14:11:29 PST 2005
// Added support for forbidden characters.
//
// Brad Whitlock, Fri Apr 1 15:04:48 PST 2005
// Added support for avtLabelMetaData.
//
//----------------------------------------------------------------------------
class DBATTS_API avtDatabaseMetaData : public AttributeSubject
{
bool hasTemporalExtents;
......@@ -483,6 +510,7 @@ class DBATTS_API avtDatabaseMetaData : public AttributeSubject
std::vector<avtMaterialMetaData *> materials;
std::vector<avtSpeciesMetaData *> species;
std::vector<avtCurveMetaData *> curves;
std::vector<avtLabelMetaData *> labels;
std::vector<avtDefaultPlotMetaData *> defaultPlots;
std::vector<avtSILMetaData *> sils;
......@@ -567,6 +595,7 @@ public:
void Add(avtSpeciesMetaData *);
void Add(avtCurveMetaData *);
void Add(avtSILMetaData *);
void Add(avtLabelMetaData *);
void Add(avtDefaultPlotMetaData *);
int GetNumMeshes() const { return meshes.size(); };
......@@ -578,6 +607,7 @@ public:
int GetNumSpecies() const { return species.size(); };
int GetNumCurves() const { return curves.size(); };
int GetNumSILs() const { return sils.size(); };
int GetNumLabels() const { return labels.size(); };
int GetNumDefaultPlots() const { return defaultPlots.size(); };
const avtMeshMetaData *GetMesh(int) const;
......@@ -598,6 +628,8 @@ public:
const avtCurveMetaData *GetCurve(const std::string&) const;
const avtSILMetaData *GetSIL(int) const;
const avtSILMetaData *GetSIL(const std::string&) const;
const avtLabelMetaData *GetLabel(int) const;
const avtLabelMetaData *GetLabel(const std::string&) const;
const avtDefaultPlotMetaData *GetDefaultPlot(int) const;
void SetBlocksForMesh(int index, int nBlocks);
......
......@@ -17,10 +17,11 @@ enum avtVarType
AVT_VECTOR_VAR, /* 2 */
AVT_TENSOR_VAR, /* 3 */
AVT_SYMMETRIC_TENSOR_VAR, /* 4 */
AVT_MATERIAL, /* 5 */
AVT_MATSPECIES, /* 6 */
AVT_CURVE, /* 7 */
AVT_UNKNOWN_TYPE /* 8 */
AVT_LABEL_VAR, /* 5 */
AVT_MATERIAL, /* 6 */
AVT_MATSPECIES, /* 7 */
AVT_CURVE, /* 8 */
AVT_UNKNOWN_TYPE /* 9 */
};
......
......@@ -307,6 +307,9 @@ avtDatabase::GetOutput(const char *var, int ts)
// Kathleen Bonnell, Thu Jan 27 09:14:35 PST 2005
// Share the number of states with DataAttributes.
//
// Brad Whitlock, Mon Apr 4 09:07:04 PDT 2005
// Added support for Label type variables.
//
// ****************************************************************************
void
......@@ -516,6 +519,15 @@ avtDatabase::PopulateDataObjectInformation(avtDataObject_p &dob,
atts.SetYUnits(cmd->yUnits);
atts.SetYLabel(cmd->yLabel);
}
const avtLabelMetaData *lmd = GetMetaData(ts)->GetLabel(var_list[i]);
if (lmd != NULL)
{
atts.AddVariable(var_list[i]);
atts.SetVariableDimension(1, var_list[i]);
atts.SetCentering(lmd->centering, var_list[i]);
atts.SetTreatAsASCII(true, var_list[i]);
}
}
atts.SetActiveVariable(var);
......@@ -1250,6 +1262,9 @@ avtDatabase::GetFileListFromTextFile(const char *textfile,
// Kathleen Bonnell, Thu Feb 3 09:27:22 PST 2005
// Determine var type for Expressions from ParsingExprList.
//
// Brad Whitlock, Mon Apr 4 11:44:28 PDT 2005
// Added code to query label variables.
//
// ****************************************************************************
void
......@@ -1452,6 +1467,11 @@ avtDatabase::Query(PickAttributes *pa)
if (!pa->GetPickVarInfo(varNum).HasInfo())
pa->GetPickVarInfo(varNum).SetVariableType("mesh");
break;
case AVT_LABEL_VAR : success =
QueryLabels(vName, foundDomain, foundEl, ts, incEls,
pa->GetPickVarInfo(varNum), zonePick);
pa->GetPickVarInfo(varNum).SetVariableType("label");
break;
default :
break;
}
......
......@@ -208,6 +208,9 @@ typedef struct {
// Hank Childs, Sun Feb 27 11:20:39 PST 2005
// Added argument to CanDoDynamicLoadBalancing.
//
// Brad Whitlock, Mon Apr 4 11:46:10 PDT 2005
// Added QueryLabels.
//
// ****************************************************************************
class DATABASE_API avtDatabase
......@@ -323,6 +326,11 @@ class DATABASE_API avtDatabase
const intVector &,
PickVarInfo &, const bool)
{return false; };
virtual bool QueryLabels(const std::string &, const int,
const int, const int,
const intVector &,
PickVarInfo &, const bool)
{return false; };
virtual bool QueryMaterial(const std::string &, const int,
const int, const int,
const intVector &,
......
......@@ -231,6 +231,9 @@ class PickVarInfo;
// Hank Childs, Fri Mar 11 11:21:57 PST 2005
// Fix memory leak with non-cachable variables.
//
// Brad Whitlock, Sat Apr 2 00:31:24 PDT 2005
// Added methods to get Label datasets.
//
// ****************************************************************************
class DATABASE_API avtGenericDatabase : public avtDatasetDatabase
......@@ -291,6 +294,8 @@ class DATABASE_API avtGenericDatabase : public avtDatasetDatabase
const char *);
vtkDataSet *GetSpeciesDataset(const char *, int, int,
const char *);
vtkDataSet *GetLabelVarDataset(const char *, int, int,
const char *);
vtkDataArray *GetScalarVariable(const char *, int, int,
const char *);
vtkDataArray *GetVectorVariable(const char *, int, int,
......@@ -301,6 +306,8 @@ class DATABASE_API avtGenericDatabase : public avtDatasetDatabase
const char *);
vtkDataArray *GetSpeciesVariable(const char *, int, int,
const char *, int);
vtkDataArray *GetLabelVariable(const char *, int, int,
const char *);
vtkDataArray *GetGlobalNodeIds(int, const char *, int);
vtkDataArray *GetGlobalZoneIds(int, const char *, int);
void AddSecondaryVariables(vtkDataSet *, int, int,
......@@ -410,6 +417,10 @@ class DATABASE_API avtGenericDatabase : public avtDatasetDatabase
const int, const int, const int,
const intVector &,
PickVarInfo &, const bool);
virtual bool QueryLabels(const std::string &, const int,
const int , const int ,
const intVector &,
PickVarInfo &, const bool);
virtual bool QueryMaterial(const std::string &, const int,
const int , const int,
const intVector &,
......
// ************************************************************************* //
// avtVariableCache.C //
// avtVariableCache.C //
// ************************************************************************* //
#include <vtkDataSet.h>
......@@ -21,6 +21,7 @@ const char *avtVariableCache::VECTORS_NAME = "VECTORS";
const char *avtVariableCache::TENSORS_NAME = "TENSORS";
const char *avtVariableCache::SYMMETRIC_TENSORS_NAME
= "SYMMETRIC_TENSORS";
const char *avtVariableCache::LABELS_NAME = "LABELS";
const char *avtVariableCache::DATASET_NAME = "DATASET";
......
......@@ -46,6 +46,9 @@ class vtkObject;
// Moved inlined constructor and destructor definitions to .C files
// because certain compilers have problems with them.
//
// Brad Whitlock, Sat Apr 2 00:50:39 PDT 2005
// Added label support.
//
// ****************************************************************************
class DATABASE_API avtVariableCache
......@@ -58,6 +61,7 @@ class DATABASE_API avtVariableCache
static const char *VECTORS_NAME;
static const char *TENSORS_NAME;
static const char *SYMMETRIC_TENSORS_NAME;
static const char *LABELS_NAME;
static const char *DATASET_NAME;
vtkObject *GetVTKObject(const char *name, const char *type,
......
......@@ -669,6 +669,9 @@ avtPickQuery::RetrieveVarInfo(vtkDataSet* ds)
// Kathleen Bonnell, Wed Dec 15 09:19:39 PST 2004
// Use GlobalZone/Node numbers when present.
//
// Brad Whitlock, Mon Apr 4 16:47:06 PST 2005
// Added support for label data.
//
// ****************************************************************************
void
......@@ -744,9 +747,17 @@ avtPickQuery::RetrieveVarInfo(vtkDataSet* ds, const int findElement,
foundData = false;
}
}
bool labelData = false;
if (foundData)
{
nComponents = varArray->GetNumberOfComponents();
// Determine if the data is a label. All label variables have
// this marker in their field data.
labelData = (nComponents > 1) &&
(ds->GetFieldData()->GetArray("avtLabelVariableSize") != 0);
temp = new double[nComponents];
intVector globalIncEl = pickAtts.GetGlobalIncidentElements();
if (zoneCent != zonePick)
......@@ -769,10 +780,11 @@ avtPickQuery::RetrieveVarInfo(vtkDataSet* ds, const int findElement,
for (int i = 0; i < nComponents; i++)
{
vals.push_back(temp[i]);
if (nComponents > 1) // assume its a vector, get its mag.
// assume its a vector, get its mag.
if (nComponents > 1 && !labelData)
mag += (temp[i] * temp[i]);
}
if (nComponents > 1)
if (nComponents > 1 && !labelData)
{
mag = sqrt(mag);
vals.push_back(mag);
......@@ -793,10 +805,10 @@ avtPickQuery::RetrieveVarInfo(vtkDataSet* ds, const int findElement,
for (int i = 0; i < nComponents; i++)
{
vals.push_back(temp[i]);
if (nComponents > 1)
if (nComponents > 1 && !labelData)
mag += (temp[i] * temp[i]);
}
if (nComponents > 1)
if (nComponents > 1 && !labelData)
{
mag = sqrt(mag);
vals.push_back(mag);
......@@ -814,7 +826,9 @@ avtPickQuery::RetrieveVarInfo(vtkDataSet* ds, const int findElement,
pickAtts.GetPickVarInfo(varNum).SetTreatAsASCII(treatAsASCII);
if (pickAtts.GetPickVarInfo(varNum).GetVariableType() != "species")
{
if (nComponents == 1)
if (labelData)
pickAtts.GetPickVarInfo(varNum).SetVariableType("label");
else if (nComponents == 1)
pickAtts.GetPickVarInfo(varNum).SetVariableType("scalar");
else if (nComponents == 3)
pickAtts.GetPickVarInfo(varNum).SetVariableType("vector");
......@@ -835,7 +849,9 @@ avtPickQuery::RetrieveVarInfo(vtkDataSet* ds, const int findElement,
varInfo.SetNames(names);
varInfo.SetValues(vals);
delete [] temp;
if (nComponents == 1)
if (labelData)
varInfo.SetVariableType("label");
else if (nComponents == 1)
varInfo.SetVariableType("scalar");
else if (nComponents == 3)
varInfo.SetVariableType("vector");
......
......@@ -20,6 +20,7 @@
#include <avtDatabaseMetaData.h>
#include <DebugStream.h>
#include <Expression.h>
#include <InvalidVariableException.h>
#include <InvalidDBTypeException.h>
#include <InvalidFilesException.h>
......@@ -181,6 +182,9 @@ avtPixieFileFormat::FreeUpResources(void)
// Mark C. Miller, Mon Dec 6 14:13:11 PST 2004
// Added std:: name resolution to call to sot
//
// Mark C. Miller, Mon Apr 4 14:55:14 PDT 2005
// Added expressions
//
// ****************************************************************************
void
......@@ -246,6 +250,41 @@ avtPixieFileFormat::Initialize()
meshes[std::string(tmp)] = it->second;
}
//
// Look for expressions dataset
//
int expid;
if ((expid = H5Dopen(fileId,"/visit_expressions")) >= 0)
{
// examine size, dimensionality and type of the dataspace
hid_t spid = H5Dget_space(expid);
hid_t tyid = H5Dget_type(expid);
hsize_t hsize = H5Dget_storage_size(expid);
int ndims = H5Sget_simple_extent_ndims(spid);
// should be a 1D, character data set
if (ndims != 1 || H5Tget_class(tyid) != H5T_STRING)
{
EXCEPTION2(InvalidFilesException, (const char *)filenames[0],
"The dataset \"visit_expressions\" is not a 1D, character dataset");
}
// allocate and read
char *expChars = new char[hsize+1];
if (H5Dread(expid, tyid, H5S_ALL, H5S_ALL, H5P_DEFAULT, expChars) < 0)
{
EXCEPTION1(InvalidVariableException, "/visit_expressions");
}
expChars[hsize] = '\0';
rawExpressionString = expChars;
delete [] expChars;
H5Tclose(tyid);
H5Sclose(spid);
H5Dclose(expid);
}
// Sort the cycles.
std::sort(cycles.begin(), cycles.end());
......@@ -453,6 +492,12 @@ avtPixieFileFormat::MeshIsCurvilinear(const std::string &name) const
// curvilinear mesh are now nodal. I also modified the call to Determine
// VarDimensions since an argument was added to it.
//
// Mark C. Miller, Mon Apr 4 14:55:14 PDT 2005
// Added expressions
//
// Jeremy Meredith, Mon Apr 4 17:05:32 PDT 2005
// Added "std::" prefix to string constructors.
//
// ****************************************************************************
void
......@@ -545,6 +590,39 @@ avtPixieFileFormat::PopulateDatabaseMetaData(avtDatabaseMetaData *md)
AddScalarVarToMetaData(md, "pointvar", "pointmesh", AVT_NODECENT);
}
#endif
//
// Add expressions
//
if (rawExpressionString.size())
{
std::string::size_type s = 0;
while (s != std::string::npos)
{
std::string::size_type nexts = rawExpressionString.find_first_of(" ; ", s);
std::string exprStr;
if (nexts != std::string::npos)
{
exprStr = std::string(rawExpressionString,s,nexts);
nexts += 3;
}
else
{
exprStr = std::string(rawExpressionString,s,std::string::npos);
}
std::string::size_type t = exprStr.find_first_of(':');
Expression vec;
vec.SetName(std::string(exprStr,0,t));
vec.SetDefinition(std::string(exprStr,t+1,std::string::npos));
vec.SetType(Expression::VectorMeshVar);
md->AddExpression(&vec);
s = nexts;
}
}
}
// ****************************************************************************
......
......@@ -41,6 +41,9 @@
// Modified the reader to handle gaps in the cycle numbering (e.g. allowing
// 0, 10, 20, 30 instead of requiring 0, 1, 2, 3).
//
// Mark C. Miller, Mon Apr 4 14:55:14 PDT 2005
// Added rawExpressionString data member to support expressions
//
// ****************************************************************************
class avtPixieFileFormat : public avtMTSDFileFormat
......@@ -118,6 +121,7 @@ protected:
VarInfoMap meshes;
int nTimeStates;
bool haveMeshCoords;
std::string rawExpressionString;
std::string timeStatePrefix;
std::vector<int> cycles;
......
......@@ -21,6 +21,8 @@
// Creation: Thu Mar 24 12:18:02 PDT 2005
//
// Modifications:
// Brad Whitlock, Fri Apr 1 23:41:51 PST 2005
// Added GetNumRepeats.
//
// ****************************************************************************
......@@ -72,6 +74,7 @@ protected:
int CountMemberPoints(esriShapeType_t) const;
int CountShapes(esriShapeType_t) const;
int CountCellsForShape(esriShapeType_t) const;
int GetNumRepeats(void *shape, esriShapeType_t shapeType) const;
bool initialized;
esriShapeVector shapes;
......
......@@ -22,7 +22,8 @@ static const char *categoryMenuNames[] = {
"Species",
"Curves",
"Tensors",
"Symmetric Tensors"
"Symmetric Tensors",
"Labels"
};
//
// Masks of the types of variables in the order that we want them
......@@ -37,7 +38,8 @@ static int categoryMasks[] = {
VAR_CATEGORY_SPECIES,
VAR_CATEGORY_CURVE,
VAR_CATEGORY_TENSOR,
VAR_CATEGORY_SYMMETRIC_TENSOR
VAR_CATEGORY_SYMMETRIC_TENSOR,
VAR_CATEGORY_LABEL
};
// ****************************************************************************
......@@ -215,6 +217,7 @@ const int QvisVariableButton::Species = VAR_CATEGORY_SPECIES;
const int QvisVariableButton::Curves = VAR_CATEGORY_CURVE;
const int QvisVariableButton::Tensors = VAR_CATEGORY_TENSOR;
const int QvisVariableButton::SymmetricTensors = VAR_CATEGORY_SYMMETRIC_TENSOR;
const int QvisVariableButton::Labels = VAR_CATEGORY_LABEL;
// ****************************************************************************
// Method: QvisVariableButton::QvisVariableButton
......
......@@ -26,7 +26,9 @@ class VariableMenuPopulator;
// Creation: Fri Dec 3 10:20:56 PDT 2004
//
// Modifications:
//
// Brad Whitlock, Fri Apr 1 16:23:43 PST 2005
// Added Label var support.
//
// ****************************************************************************
class GUI_API QvisVariableButton : public QPushButton
......@@ -62,6 +64,7 @@ public:
static const int Curves;
static const int Tensors;
static const int SymmetricTensors;
static const int Labels;
signals:
void activated(const QString &varName);
public slots:
......
......@@ -4,7 +4,7 @@
<Field name="factor" label="Displacement multiplier " type="double">
1.000000
</Field>
<Field name="variable" label="variable" type="variablename" vartypes="000100000">
<Field name="variable" label="variable" type="variablename" vartypes="0001000000">
DISPL
</Field>
</Attribute>
......
......@@ -34,7 +34,7 @@
<Field name="max" label="Max" type="double" enabler="maxFlag:true">
1.000000
</Field>
<Field name="variable" label="Elevate by Variable" type="variablename" vartypes="010000000">
<Field name="variable" label="Elevate by Variable" type="variablename" vartypes="0100000000">
default
</Field>
</Attribute>
......
......@@ -35,7 +35,7 @@
<Field name="scaling" label="scaling" type="enum" subtype="Scaling">
Linear
</Field>
<Field name="variable" label="variable" type="variablename" vartypes="010000000">
<Field name="variable" label="variable" type="variablename" vartypes="0100000000">
default
</Field>
</Attribute>
......
......@@ -7,7 +7,7 @@
<Field name="ubound" label="Upper bound" type="double">
1e37
</Field>
<Field name="variable" label="variable" type="variablename" vartypes="010000000">
<Field name="variable" label="variable" type="variablename" vartypes="0100000000">
default
</Field>
</Attribute>
......
......@@ -42,7 +42,7 @@
<Field name="tieResolver" label="Resolve ties" type="enum" subtype="TieResolver">
random
</Field>
<Field name="tieResolverVariable" label="Variable to resolve ties" type="variablename" enabler="tieResolver:smallest,largest" vartypes="010000000">
<Field name="tieResolverVariable" label="Variable to resolve ties" type="variablename" enabler="tieResolver:smallest,largest" vartypes="0100000000">
default
</Field>
<Field name="defaultValue" label="Value for uncovered regions" type="double">
......
......@@ -14,7 +14,7 @@
<Field name="ubound" label="Upper bound" type="double">
+1e37
</Field>
<Field name="variable" label="variable" type="variablename" vartypes="010000000">
<Field name="variable" label="variable" type="variablename" vartypes="0100000000">
default
</Field>
</Attribute>
......
......@@ -63,7 +63,7 @@
<Field name="pointSizeVarEnabled" label="Point size by var enabled" type="bool">
false
</Field>
<Field name="pointSizeVar" label="Point size by var" type="variablename" vartypes="010000000">
<Field name="pointSizeVar" label="Point size by var" type="variablename" vartypes="0100000000">
default
</Field>
<Function name="ChangesRequireRecalculation" user="true" member="true">
......
......@@ -75,7 +75,7 @@
<Field name="pointSizeVarEnabled" label="Point size by var enabled" type="bool">
false
</Field>
<Field name="pointSizeVar" label="Point size by var" type="variablename" vartypes="010000000">
<Field name="pointSizeVar" label="Point size by var" type="variablename" vartypes="0100000000">
default
</Field>
<Function name="ChangesRequireRecalculation" user="true" member="true">
......
......@@ -50,7 +50,44 @@
<< ", while the #cells is: " << nCells << endl;
}
if(data->GetNumberOfComponents() == 1)
if(input->GetFieldData()->GetArray("avtLabelVariableSize") != 0)
{
debug3 << "Labelling cells with label data" << endl;
int labelLength = data->GetNumberOfComponents();
if(data->IsA("vtkUnsignedCharArray"))
{
unsigned char *label = (unsigned char *)data->GetVoidPointer(0);
for(vtkIdType id = 0; id < nCells; id += skipIncrement)
{
BEGIN_LABEL
CREATE_LABEL(labelString, MAX_LABEL_SIZE, "%s", label);
END_LABEL
label += labelLength;
}
}
else
{ // VisIt turned the label into floats!
debug3 << "*** WARNING - VisIt turned the Label data into floats. That is not efficient!" << endl;
const float *fptr = (const float *)data->GetVoidPointer(0);
char *tempstr = new char[labelLength];
memset(tempstr, 0, labelLength);
for(vtkIdType id = 0; id < nCells; id += skipIncrement)
{
// Store the float-ified label in a real string.
for(int k = 0; k < labelLength - 1; ++k)
tempstr[k] = (char)*fptr++;
++fptr;
// Use the label.
BEGIN_LABEL
CREATE_LABEL(labelString, MAX_LABEL_SIZE, "%s", tempstr);
END_LABEL
}
delete [] tempstr;
}
}
else if(data->GetNumberOfComponents() == 1)
{
debug3 << "Labelling cells with scalar data" << endl;
......