Commit a2da7a11 authored by bonnell's avatar bonnell

Add ability for plots to invert their color tables.

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@13564 18c085ea-50e0-402c-830e-de6fd14e8384
parent 369f0b7c
......@@ -45,6 +45,9 @@
# Restore separate vars for libraries (to handle different names on
# different platforms).
#
# Kathleen Bonnell, Mon Jan 17 17:24:44 MST 2011
# Don't set BOXLIB_2D/3D_LIB unless BOXLIB_FOUND.
#
#****************************************************************************/
# Use the BOXLIB_DIR hint from the config-site .cmake file
......@@ -57,15 +60,17 @@ ELSE (WIN32)
SET_UP_THIRD_PARTY(BOXLIB lib include box2D box3D)
ENDIF (WIN32)
# place the 2D and 3D libraries into separate vars for plugin use.
LIST(GET BOXLIB_LIB 0 tmp)
SET(BOXLIB_2D_LIB ${tmp} CACHE STRING "2D boxlib" FORCE)
IF(BOXLIB_FOUND)
# place the 2D and 3D libraries into separate vars for plugin use.
LIST(GET BOXLIB_LIB 0 tmp)
SET(BOXLIB_2D_LIB ${tmp} CACHE STRING "2D boxlib" FORCE)
LIST(GET BOXLIB_LIB 1 tmp)
SET(BOXLIB_3D_LIB ${tmp} CACHE STRING "3D boxlib" FORCE)
LIST(GET BOXLIB_LIB 1 tmp)
SET(BOXLIB_3D_LIB ${tmp} CACHE STRING "3D boxlib" FORCE)
# unset unneeded vars.
UNSET(tmp)
UNSET(BOXLIB_LIB CACHE)
# unset unneeded vars.
UNSET(tmp)
UNSET(BOXLIB_LIB CACHE)
ENDIF(BOXLIB_FOUND)
......@@ -471,6 +471,37 @@ static const float ct_shapely_colors[] = {
// Static pointer to single instance.
avtColorTables *avtColorTables::instance = NULL;
void
reverse_colors(unsigned char* c, int nc)
{
unsigned char tmp[3];
for (int i = 0, j= (nc-1)*3; i < j; i+=3,j-=3)
{
tmp[0] = c[i];
tmp[1] = c[i+1];
tmp[2] = c[i+2];
c[i] = c[j];
c[i+1] = c[j+1];
c[i+2] = c[j+2];
c[j] = tmp[0];
c[j+1] = tmp[1];
c[j+2] = tmp[2];
}
}
void
reverse_alphas(unsigned char *a, int na)
{
unsigned char tmp;
for (int i = 0, j= (na-1); i < j; ++i,--j)
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
// ****************************************************************************
// Method: avtColorTables::avtColorTables
//
......@@ -766,10 +797,13 @@ avtColorTables::SetDefaultDiscreteColorTable(const std::string &ctName)
// Brad Whitlock, Tue Dec 3 14:24:06 PST 2002
// I rewrote the method.
//
// Kathleen Bonnell, Mon Jan 17 11:22:22 MST 2011
// Add invert functionality.
//
// ****************************************************************************
const unsigned char *
avtColorTables::GetColors(const std::string &ctName)
avtColorTables::GetColors(const std::string &ctName, bool invert)
{
const unsigned char *retval = NULL;
int index;
......@@ -777,6 +811,8 @@ avtColorTables::GetColors(const std::string &ctName)
{
const ColorControlPointList &ct = ctAtts->operator[](index);
ct.GetColors(tmpColors, GetNumColors());
if (invert)
reverse_colors(tmpColors, GetNumColors());
retval = tmpColors;
}
......@@ -795,9 +831,13 @@ avtColorTables::GetColors(const std::string &ctName)
// Programmer: Jeremy Meredith
// Creation: February 20, 2009
//
// Modifications:
// Kathleen Bonnell, Mon Jan 17 11:22:22 MST 2011
// Add invert functionality.
//
// ****************************************************************************
const unsigned char *
avtColorTables::GetAlphas(const std::string &ctName)
avtColorTables::GetAlphas(const std::string &ctName, bool invert)
{
unsigned char dummy[256*3];
const unsigned char *retval = NULL;
......@@ -806,6 +846,8 @@ avtColorTables::GetAlphas(const std::string &ctName)
{
const ColorControlPointList &ct = ctAtts->operator[](index);
ct.GetColors(dummy, GetNumColors(), tmpAlphas);
if (invert)
reverse_alphas(tmpAlphas, GetNumColors());
retval = tmpAlphas;
}
......@@ -869,11 +911,13 @@ avtColorTables::ColorTableIsFullyOpaque(const std::string &reqName)
// Creation: Mon Nov 25 14:20:10 PST 2002
//
// Modifications:
// Kathleen Bonnell, Mon Jan 17 11:22:22 MST 2011
// Add invert functionality.
//
// ****************************************************************************
unsigned char *
avtColorTables::GetSampledColors(const std::string &ctName, int nColors) const
avtColorTables::GetSampledColors(const std::string &ctName, int nColors, bool invert) const
{
unsigned char *retval = NULL;
int index;
......@@ -884,6 +928,8 @@ avtColorTables::GetSampledColors(const std::string &ctName, int nColors) const
int nc = (nColors < 1) ? 1 : nColors;
retval = new unsigned char[nc * 3];
ct.GetColors(retval, nc);
if (invert)
reverse_colors(retval, nc);
}
return retval;
......@@ -914,11 +960,14 @@ avtColorTables::GetSampledColors(const std::string &ctName, int nColors) const
// Brad Whitlock, Tue Mar 13 11:21:38 PDT 2007
// Changed due to code generation changes.
//
// Kathleen Bonnell, Mon Jan 17 11:22:22 MST 2011
// Add invert functionality.
//
// ****************************************************************************
bool
avtColorTables::GetControlPointColor(const std::string &ctName, int i,
unsigned char *rgb) const
unsigned char *rgb, bool invert) const
{
bool retval = false;
int index;
......@@ -926,6 +975,8 @@ avtColorTables::GetControlPointColor(const std::string &ctName, int i,
{
const ColorControlPointList &ct = ctAtts->operator[](index);
int j = i % ct.GetNumControlPoints();
if (invert)
j = ct.GetNumControlPoints() -1 -j;
rgb[0] = ct[j].GetColors()[0];
rgb[1] = ct[j].GetColors()[1];
......
......@@ -75,6 +75,9 @@ class ColorTableAttributes;
// Added DeleteInstance function to delete global data. Helps with valgrind.
// It is inline because it will only be used if you define DEBUG_MEMORY_LEAKS.
//
// Kathleen Bonnell, Mon Jan 17 11:18:35 MST 2011
// Added invert arg to color retrieval methods.
//
// ****************************************************************************
class PIPELINE_API avtColorTables
......@@ -87,14 +90,18 @@ public:
const std::string &GetDefaultDiscreteColorTable() const;
void SetDefaultDiscreteColorTable(const std::string &);
const unsigned char *GetColors(const std::string &ctName);
const unsigned char *GetAlphas(const std::string &ctName);
const unsigned char *GetColors(const std::string &ctName,
bool invert = false);
const unsigned char *GetAlphas(const std::string &ctName,
bool invert = false);
bool ColorTableIsFullyOpaque(const std::string &ctName);
unsigned char *GetSampledColors(const std::string &ctName,
int nColors) const;
int nColors,
bool invert = false) const;
bool GetControlPointColor(const std::string &ctName,
int i, unsigned char *rgb) const;
int i, unsigned char *rgb,
bool invert = false) const;
int GetNumColors() const { return 256; };
bool IsDiscrete(const std::string &ctName) const;
bool ColorTableExists(const std::string &ctName) const;
......
......@@ -151,7 +151,6 @@ avtLookupTable::SetLUTColors(const unsigned char *colors, int nColors)
logLUT->SetNumberOfTableValues(nColors);
skewLUT->SetNumberOfTableValues(nColors);
const unsigned char *cptr = colors;
for(int i = 0; i < nColors; ++i)
{
......@@ -243,7 +242,7 @@ avtLookupTable::SetLUTColorsWithOpacity(const unsigned char *colors,
double g = (double) cptr[1] * INV_255 ;
double b = (double) cptr[2] * INV_255 ;
double a = (double) cptr[3] * INV_255 ;
stdLUT->SetTableValue(i, r, g, b, a);
logLUT->SetTableValue(i, r, g, b, a);
skewLUT->SetTableValue(i, r, g, b, a);
......@@ -314,11 +313,14 @@ avtLookupTable::GetNumberOfColors()
// Added ability to also set the LUT colors with opacities from the
// color table (if requested by the caller in the new argument).
//
// Kathleen Bonnell, Mon Jan 17 17:38:40 MST 2011
// Added invert argument.
//
// ****************************************************************************
bool
avtLookupTable::SetColorTable(const char *ctName, bool validName,
bool useOpacities)
bool useOpacities, bool invert)
{
bool retval = false;
bool useDefault = false;
......@@ -341,7 +343,7 @@ avtLookupTable::SetColorTable(const char *ctName, bool validName,
const char *dct = ct->GetDefaultContinuousColorTable().c_str();
if(dct == 0)
dct = ct->GetDefaultDiscreteColorTable().c_str();
const unsigned char *c = ct->GetColors(dct);
const unsigned char *c = ct->GetColors(dct, invert);
const unsigned char *a = NULL;
if (useOpacities)
a = ct->GetAlphas(dct);
......@@ -358,7 +360,7 @@ avtLookupTable::SetColorTable(const char *ctName, bool validName,
else if (validName)
{
// Use the specified color table. It was a valid color table.
const unsigned char *c = ct->GetColors(ctName);
const unsigned char *c = ct->GetColors(ctName, invert);
const unsigned char *a = NULL;
if (useOpacities)
a = ct->GetAlphas(ctName);
......
......@@ -65,6 +65,9 @@ class vtkSkewLookupTable;
// Allowed SetColorTable to optionally also use the color table's opacity.
// Added new SetLUTColorsAndOpacity method to actually perform the work.
//
// Kathleen Bonnell, Mon Jan 17 17:36:52 MST 2011
// Added invert argument to SetColorTable.
//
// ****************************************************************************
class PIPELINE_API avtLookupTable
......@@ -75,7 +78,8 @@ class PIPELINE_API avtLookupTable
void SetSkewFactor(const double);
bool SetColorTable(const char *ctName, bool,
bool useOpacities = false);
bool useOpacities = false,
bool invert = false);
void SetLUTColors(const unsigned char *, int);
void SetLUTColorsWithOpacity(
const unsigned char *, int);
......
......@@ -38,7 +38,7 @@ enhancements and bug-fixes that were added to this release.</p>
<li>Lineouts can now be directly calculated (i.e. without having to make a Pseudocolor plot to extract a Lineout from). You can access this feature by making a Curve plot of a scalar listed under operators/Lineout.</li>
<li>VisIt now has a "-safe" mode. This mode will tell you if your data has NaNs, infs, or bad connectivity. Access this mode by adding "-safe" to VisIt's invocation. (This mode is not the default because it incurs a performance penalty.)</li>
<li>The manner in which operators are copied from existing plots to new plots has changed. The new behavior copies operators from the first selected plot instead of always copying operators from the first plot.</li>
<li></li>
<li>Plots that allow setting of different Color Tables now have a toggle that allow the Color Table to be inverted.</li>
</ul>
<a name="Advanced_Features"></a>
......
......@@ -25,6 +25,9 @@
<Field name="colorTableName" label="Color table" type="colortable">
Default
</Field>
<Field name="invertColorTable" label="Invert Color table" type="bool">
false
</Field>
<Field name="filledFlag" label="filledFlag" type="bool">
true
</Field>
......
......@@ -153,14 +153,11 @@ BoundaryAttributes::PointType_FromString(const std::string &s, BoundaryAttribute
return false;
}
// Type map format string
const char *BoundaryAttributes::TypeMapFormatString = "isbbiiaas*idbidibsi";
// ****************************************************************************
// Method: BoundaryAttributes::BoundaryAttributes
//
// Purpose:
// Constructor for the BoundaryAttributes class.
// Init utility for the BoundaryAttributes class.
//
// Note: Autogenerated by xml2atts.
//
......@@ -171,12 +168,10 @@ const char *BoundaryAttributes::TypeMapFormatString = "isbbiiaas*idbidibsi";
//
// ****************************************************************************
BoundaryAttributes::BoundaryAttributes() :
AttributeSubject(BoundaryAttributes::TypeMapFormatString),
colorTableName("Default"), singleColor(),
pointSizeVar("default")
void BoundaryAttributes::Init()
{
colorType = ColorByMultipleColors;
invertColorTable = false;
filledFlag = true;
legendFlag = true;
lineStyle = 0;
......@@ -189,13 +184,15 @@ BoundaryAttributes::BoundaryAttributes() :
pointType = Point;
pointSizeVarEnabled = false;
pointSizePixels = 2;
BoundaryAttributes::SelectAll();
}
// ****************************************************************************
// Method: BoundaryAttributes::BoundaryAttributes
//
// Purpose:
// Copy constructor for the BoundaryAttributes class.
// Copy utility for the BoundaryAttributes class.
//
// Note: Autogenerated by xml2atts.
//
......@@ -206,11 +203,11 @@ BoundaryAttributes::BoundaryAttributes() :
//
// ****************************************************************************
BoundaryAttributes::BoundaryAttributes(const BoundaryAttributes &obj) :
AttributeSubject(BoundaryAttributes::TypeMapFormatString)
void BoundaryAttributes::Copy(const BoundaryAttributes &obj)
{
colorType = obj.colorType;
colorTableName = obj.colorTableName;
invertColorTable = obj.invertColorTable;
filledFlag = obj.filledFlag;
legendFlag = obj.legendFlag;
lineStyle = obj.lineStyle;
......@@ -228,7 +225,100 @@ BoundaryAttributes::BoundaryAttributes(const BoundaryAttributes &obj) :
pointSizeVar = obj.pointSizeVar;
pointSizePixels = obj.pointSizePixels;
SelectAll();
BoundaryAttributes::SelectAll();
}
// Type map format string
const char *BoundaryAttributes::TypeMapFormatString = BOUNDARYATTRIBUTES_TMFS;
const AttributeGroup::private_tmfs_t BoundaryAttributes::TmfsStruct = {BOUNDARYATTRIBUTES_TMFS};
// ****************************************************************************
// Method: BoundaryAttributes::BoundaryAttributes
//
// Purpose:
// Default constructor for the BoundaryAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: omitted
//
// Modifications:
//
// ****************************************************************************
BoundaryAttributes::BoundaryAttributes() :
AttributeSubject(BoundaryAttributes::TypeMapFormatString),
colorTableName("Default"), singleColor(),
pointSizeVar("default")
{
BoundaryAttributes::Init();
}
// ****************************************************************************
// Method: BoundaryAttributes::BoundaryAttributes
//
// Purpose:
// Constructor for the derived classes of BoundaryAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: omitted
//
// Modifications:
//
// ****************************************************************************
BoundaryAttributes::BoundaryAttributes(private_tmfs_t tmfs) :
AttributeSubject(tmfs.tmfs),
colorTableName("Default"), singleColor(),
pointSizeVar("default")
{
BoundaryAttributes::Init();
}
// ****************************************************************************
// Method: BoundaryAttributes::BoundaryAttributes
//
// Purpose:
// Copy constructor for the BoundaryAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: omitted
//
// Modifications:
//
// ****************************************************************************
BoundaryAttributes::BoundaryAttributes(const BoundaryAttributes &obj) :
AttributeSubject(BoundaryAttributes::TypeMapFormatString)
{
BoundaryAttributes::Copy(obj);
}
// ****************************************************************************
// Method: BoundaryAttributes::BoundaryAttributes
//
// Purpose:
// Copy constructor for derived classes of the BoundaryAttributes class.
//
// Note: Autogenerated by xml2atts.
//
// Programmer: xml2atts
// Creation: omitted
//
// Modifications:
//
// ****************************************************************************
BoundaryAttributes::BoundaryAttributes(const BoundaryAttributes &obj, private_tmfs_t tmfs) :
AttributeSubject(tmfs.tmfs)
{
BoundaryAttributes::Copy(obj);
}
// ****************************************************************************
......@@ -270,26 +360,9 @@ BoundaryAttributes&
BoundaryAttributes::operator = (const BoundaryAttributes &obj)
{
if (this == &obj) return *this;
colorType = obj.colorType;
colorTableName = obj.colorTableName;
filledFlag = obj.filledFlag;
legendFlag = obj.legendFlag;
lineStyle = obj.lineStyle;
lineWidth = obj.lineWidth;
singleColor = obj.singleColor;
multiColor = obj.multiColor;
boundaryNames = obj.boundaryNames;
boundaryType = obj.boundaryType;
opacity = obj.opacity;
wireframe = obj.wireframe;
smoothingLevel = obj.smoothingLevel;
pointSize = obj.pointSize;
pointType = obj.pointType;
pointSizeVarEnabled = obj.pointSizeVarEnabled;
pointSizeVar = obj.pointSizeVar;
pointSizePixels = obj.pointSizePixels;
SelectAll();
BoundaryAttributes::Copy(obj);
return *this;
}
......@@ -314,6 +387,7 @@ BoundaryAttributes::operator == (const BoundaryAttributes &obj) const
// Create the return value
return ((colorType == obj.colorType) &&
(colorTableName == obj.colorTableName) &&
(invertColorTable == obj.invertColorTable) &&
(filledFlag == obj.filledFlag) &&
(legendFlag == obj.legendFlag) &&
(lineStyle == obj.lineStyle) &&
......@@ -475,6 +549,7 @@ BoundaryAttributes::SelectAll()
{
Select(ID_colorType, (void *)&colorType);
Select(ID_colorTableName, (void *)&colorTableName);
Select(ID_invertColorTable, (void *)&invertColorTable);
Select(ID_filledFlag, (void *)&filledFlag);
Select(ID_legendFlag, (void *)&legendFlag);
Select(ID_lineStyle, (void *)&lineStyle);
......@@ -535,6 +610,12 @@ BoundaryAttributes::CreateNode(DataNode *parentNode, bool completeSave, bool for
node->AddNode(new DataNode("colorTableName", colorTableName));
}
if(completeSave || !FieldsEqual(ID_invertColorTable, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("invertColorTable", invertColorTable));
}
if(completeSave || !FieldsEqual(ID_filledFlag, &defaultObject))
{
addToParent = true;
......@@ -693,6 +774,8 @@ BoundaryAttributes::SetFromNode(DataNode *parentNode)
}
if((node = searchNode->GetNode("colorTableName")) != 0)
SetColorTableName(node->AsString());
if((node = searchNode->GetNode("invertColorTable")) != 0)
SetInvertColorTable(node->AsBool());
if((node = searchNode->GetNode("filledFlag")) != 0)
SetFilledFlag(node->AsBool());
if((node = searchNode->GetNode("legendFlag")) != 0)
......@@ -773,6 +856,13 @@ BoundaryAttributes::SetColorTableName(const std::string &colorTableName_)
Select(ID_colorTableName, (void *)&colorTableName);
}
void
BoundaryAttributes::SetInvertColorTable(bool invertColorTable_)
{
invertColorTable = invertColorTable_;
Select(ID_invertColorTable, (void *)&invertColorTable);
}
void
BoundaryAttributes::SetFilledFlag(bool filledFlag_)
{
......@@ -907,6 +997,12 @@ BoundaryAttributes::GetColorTableName()
return colorTableName;
}
bool
BoundaryAttributes::GetInvertColorTable() const
{
return invertColorTable;
}
bool
BoundaryAttributes::GetFilledFlag() const
{
......@@ -1087,6 +1183,7 @@ BoundaryAttributes::GetFieldName(int index) const
{
case ID_colorType: return "colorType";
case ID_colorTableName: return "colorTableName";
case ID_invertColorTable: return "invertColorTable";
case ID_filledFlag: return "filledFlag";
case ID_legendFlag: return "legendFlag";
case ID_lineStyle: return "lineStyle";
......@@ -1129,6 +1226,7 @@ BoundaryAttributes::GetFieldType(int index) const
{
case ID_colorType: return FieldType_enum;
case ID_colorTableName: return FieldType_colortable;
case ID_invertColorTable: return FieldType_bool;
case ID_filledFlag: return FieldType_bool;
case ID_legendFlag: return FieldType_bool;
case ID_lineStyle: return FieldType_linestyle;
......@@ -1171,6 +1269,7 @@ BoundaryAttributes::GetFieldTypeName(int index) const
{
case ID_colorType: return "enum";
case ID_colorTableName: return "colortable";
case ID_invertColorTable: return "bool";
case ID_filledFlag: return "bool";
case ID_legendFlag: return "bool";
case ID_lineStyle: return "linestyle";
......@@ -1223,6 +1322,11 @@ BoundaryAttributes::FieldsEqual(int index_, const AttributeGroup *rhs) const
retval = (colorTableName == obj.colorTableName);
}
break;
case ID_invertColorTable:
{ // new scope
retval = (invertColorTable == obj.invertColorTable);
}
break;
case ID_filledFlag:
{ // new scope
retval = (filledFlag == obj.filledFlag);
......
......@@ -40,6 +40,7 @@
#define BOUNDARYATTRIBUTES_H
#include <string>
#include <AttributeSubject.h>
#include <ColorAttribute.h>
#include <ColorAttributeList.h>
......@@ -83,13 +84,23 @@ public:
Sphere
};
// These constructors are for objects of this class
BoundaryAttributes();
BoundaryAttributes(const BoundaryAttributes &obj);
protected:
// These constructors are for objects derived from this class
BoundaryAttributes(private_tmfs_t tmfs);
BoundaryAttributes(const BoundaryAttributes &obj, private_tmfs_t tmfs);
public:
virtual ~BoundaryAttributes();
virtual BoundaryAttributes& operator = (const BoundaryAttributes &obj);
virtual bool operator == (const BoundaryAttributes &obj) const;
virtual bool operator != (const BoundaryAttributes &obj) const;
private:
void Init();
void Copy(const BoundaryAttributes &obj);
public:
virtual const std::string TypeName() const;
virtual bool CopyAttributes(const AttributeGroup *);
......@@ -107,6 +118,7 @@ public:
// Property setting methods
void SetColorType(ColoringMethod colorType_);
void SetColorTableName(const std::string &colorTableName_);
void SetInvertColorTable(bool invertColorTable_);
void SetFilledFlag(bool filledFlag_);
void SetLegendFlag(bool legendFlag_);
void SetLineStyle(int lineStyle_);
......@@ -128,6 +140,7 @@ public:
ColoringMethod GetColorType() const;
const std::string &GetColorTableName() const;
std::string &GetColorTableName();
bool GetInvertColorTable() const;
bool GetFilledFlag() const;
bool GetLegendFlag() const;
int GetLineStyle() const;
......@@ -185,6 +198,7 @@ public:
enum {
ID_colorType = 0,
ID_colorTableName,
ID_invertColorTable,
ID_filledFlag,
ID_legendFlag,
ID_lineStyle,
......@@ -200,12 +214,14 @@ public:
ID_pointType,
ID_pointSizeVarEnabled,
ID_pointSizeVar,
ID_pointSizePixels
ID_pointSizePixels,
ID__LAST
};
private:
int colorType;
std::string colorTableName;
bool invertColorTable;
bool filledFlag;
bool legendFlag;
int lineStyle;
......@@ -225,6 +241,8 @@ private:
// Static class format string for type map.
static const char *TypeMapFormatString;
static const private_tmfs_t TmfsStruct;
};
#define BOUNDARYATTRIBUTES_TMFS "isbbbiiaas*idbidibsi"
#endif
This diff is collapsed.
......@@ -52,7 +52,7 @@
// Note: Autogenerated by xml2python. Do not modify by hand!
//
// Programmer: xml2python
// Creation: Fri Aug 8 12:03:33 PDT 2008
// Creation: omitted
//
// ****************************************************************************
......@@ -99,6 +99,11 @@ PyBoundaryAttributes_ToString(const BoundaryAttributes *atts, const char *prefix
SNPRINTF(tmpStr, 1000, "%scolorTableName = \"%s\"\n", prefix, atts->GetColorTableName().c_str());
str += tmpStr;
if(atts->GetInvertColorTable())
SNPRINTF(tmpStr, 1000, "%sinvertColorTable = 1\n", prefix);
else
SNPRINTF(tmpStr, 1000, "%sinvertColorTable = 0\n", prefix);
str += tmpStr;
if(atts->GetFilledFlag())
SNPRINTF(tmpStr, 1000, "%sfilledFlag = 1\n", prefix);
else
......@@ -282,6 +287,30 @@ BoundaryAttributes_GetColorTableName(PyObject *self, PyObject *args)
return retval;
}