void avtTopologyPlot::SetColors() { std::vector < std::string > labels(4); LevelColorMap levelColorMap; labels[0] = avtTopologyFilter::labelNames[0]; labels[1] = avtTopologyFilter::labelNames[1]; labels[2] = avtTopologyFilter::labelNames[2]; labels[3] = avtTopologyFilter::labelNames[3]; ColorAttributeList cal(atts.GetMultiColor()); int numColors = cal.GetNumColors(); // // Create colors from original color table. // unsigned char *colors = new unsigned char[numColors * 4]; unsigned char *cptr = colors; for(int i = 0; i < numColors; i++) { cal[i].SetAlpha((unsigned char)(255 * opacity[i])); *cptr++ = (unsigned char)cal[i].Red(); *cptr++ = (unsigned char)cal[i].Green(); *cptr++ = (unsigned char)cal[i].Blue(); *cptr++ = (unsigned char)cal[i].Alpha(); // // Create a label-to-color-index mapping // levelColorMap.insert(LevelColorMap::value_type(labels[i], i)); } avtLUT->SetLUTColorsWithOpacity(colors, numColors); levelsMapper->SetColors(cal, needsRecalculation); levelsLegend->SetLevels(labels); levelsMapper->SetLabelColorMap(levelColorMap); levelsLegend->SetLabelColorMap(levelColorMap); delete [] colors; SetLineWidth(atts.GetLineWidth()); SetLineStyle(atts.GetLineStyle()); }
void avtSubsetPlot::SetColors() { vector < string > allLabels = atts.GetSubsetNames(); vector < string > labels; LevelColorMap levelColorMap; behavior->GetInfo().GetAttributes().GetLabels(labels); if (labels.size() == 0) { levelsLegend->SetColorBarVisibility(0); levelsLegend->SetMessage("No subsets present"); } else { levelsLegend->SetColorBarVisibility(1); levelsLegend->SetMessage(NULL); } if (atts.GetColorType() == SubsetAttributes::ColorBySingleColor) { ColorAttribute ca(atts.GetSingleColor()); ca.SetAlpha((unsigned char)(float(ca.Alpha()) * atts.GetOpacity())); ColorAttributeList cal; cal.AddColors(ca); avtLUT->SetLUTColorsWithOpacity(ca.GetColor(), 1); levelsMapper->SetColors(cal); // // Send an empty color map, rather than one where all // entries map to same value. // levelsLegend->SetLabelColorMap(levelColorMap); levelsLegend->SetLevels(labels); return; } else if (atts.GetColorType() == SubsetAttributes::ColorByMultipleColors) { ColorAttributeList cal(atts.GetMultiColor()); int numColors = cal.GetNumColors(); // // Create colors from original color table. // unsigned char *colors = new unsigned char[numColors * 4]; unsigned char *cptr = colors; for(int i = 0; i < numColors; i++) { unsigned char c = (unsigned char)(cal[i].Alpha() * atts.GetOpacity()); cal[i].SetAlpha(c); *cptr++ = (unsigned char)cal[i].Red(); *cptr++ = (unsigned char)cal[i].Green(); *cptr++ = (unsigned char)cal[i].Blue(); *cptr++ = (unsigned char)cal[i].Alpha(); // // Create a label-to-color-index mapping // levelColorMap.insert(LevelColorMap::value_type(allLabels[i], i)); } avtLUT->SetLUTColorsWithOpacity(colors, numColors); levelsMapper->SetColors(cal); levelsLegend->SetLevels(labels); levelsMapper->SetLabelColorMap(levelColorMap); levelsLegend->SetLabelColorMap(levelColorMap); delete [] colors; } else // ColorByColorTable { ColorAttributeList cal(atts.GetMultiColor()); int numColors = cal.GetNumColors(); unsigned char *colors = new unsigned char[numColors * 4]; unsigned char *cptr = colors; avtColorTables *ct = avtColorTables::Instance(); int opacity = int((float)atts.GetOpacity()*255.f); // // Detect if we're using the default color table or a color table // that does not exist anymore. // string ctName(atts.GetColorTableName()); if(ctName == "Default") ctName = string(ct->GetDefaultDiscreteColorTable()); else if(!ct->ColorTableExists(ctName.c_str())) { delete [] colors; EXCEPTION1(InvalidColortableException, ctName); } // // Create a label-to-color-index mapping // for(int i = 0; i < numColors; ++i) levelColorMap.insert(LevelColorMap::value_type(allLabels[i], i)); bool invert = atts.GetInvertColorTable(); // // Add a color for each subset name. // if(ct->IsDiscrete(ctName.c_str())) { // The CT is discrete, get its color color control points. for(int i = 0; i < numColors; ++i) { unsigned char rgb[3] = {0,0,0}; ct->GetControlPointColor(ctName.c_str(), i, rgb, invert); *cptr++ = rgb[0]; *cptr++ = rgb[1]; *cptr++ = rgb[2]; *cptr++ = opacity; cal[i].SetRgba(rgb[0], rgb[1], rgb[2], opacity); } } else { // The CT is continuous, sample the CT so we have a unique color // for each element. unsigned char *rgb = ct->GetSampledColors(ctName.c_str(), numColors, invert); if(rgb) { for(int i = 0; i < numColors; ++i) { int j = i * 3; *cptr++ = rgb[j]; *cptr++ = rgb[j+1]; *cptr++ = rgb[j+2]; *cptr++ = opacity; cal[i].SetRgba(rgb[j], rgb[j+1], rgb[j+2], opacity); } delete [] rgb; } } avtLUT->SetLUTColorsWithOpacity(colors, numColors); levelsMapper->SetColors(cal); levelsLegend->SetLevels(labels); levelsMapper->SetLabelColorMap(levelColorMap); levelsLegend->SetLabelColorMap(levelColorMap); delete [] colors; } }
void avtFilledBoundaryPlot::SetColors() { vector < string > allLabels = atts.GetBoundaryNames(); vector < string > labels; LevelColorMap levelColorMap; behavior->GetInfo().GetAttributes().GetLabels(labels); if (labels.size() == 0) { levelsLegend->SetColorBarVisibility(0); levelsLegend->SetMessage("No subsets present"); } else { levelsLegend->SetColorBarVisibility(1); levelsLegend->SetMessage(NULL); } if (atts.GetColorType() == FilledBoundaryAttributes::ColorBySingleColor) { ColorAttribute ca(atts.GetSingleColor()); ca.SetAlpha((unsigned char)(float(ca.Alpha()) * atts.GetOpacity())); ColorAttributeList cal; cal.AddColors(ca); avtLUT->SetLUTColorsWithOpacity(ca.GetColor(), 1); levelsMapper->SetColors(cal, needsRecalculation); // // Send an empty color map, rather than one where all // entries map to same value. // levelsLegend->SetLabelColorMap(levelColorMap); levelsLegend->SetLevels(labels); } else if (atts.GetColorType() == FilledBoundaryAttributes::ColorByMultipleColors) { ColorAttributeList cal(atts.GetMultiColor()); // // If we are doing clean-zones-only, we will need a mixed color // allLabels.push_back("mixed"); cal.AddColors(atts.GetMixedColor()); int numColors = cal.GetNumColors(); // // Create colors from original color table. // unsigned char *colors = new unsigned char[numColors * 4]; unsigned char *cptr = colors; for(int i = 0; i < numColors; i++) { unsigned char c = (unsigned char)(cal[i].Alpha() * atts.GetOpacity()); cal[i].SetAlpha(c); *cptr++ = (unsigned char)cal[i].Red(); *cptr++ = (unsigned char)cal[i].Green(); *cptr++ = (unsigned char)cal[i].Blue(); *cptr++ = (unsigned char)cal[i].Alpha(); // // Create a label-to-color-index mapping // levelColorMap.insert(LevelColorMap::value_type(allLabels[i], i)); } avtLUT->SetLUTColorsWithOpacity(colors, numColors); levelsMapper->SetColors(cal, needsRecalculation); levelsLegend->SetLevels(labels); levelsMapper->SetLabelColorMap(levelColorMap); levelsLegend->SetLabelColorMap(levelColorMap); delete [] colors; } else // ColorByColorTable { ColorAttributeList cal(atts.GetMultiColor()); // // If we are doing clean-zones-only, we will need a mixed color // allLabels.push_back("mixed"); cal.AddColors(atts.GetMixedColor()); // // It is a litte more complicated to handle c.z.o. here relative // to when using MultiColor, because we want to interpolate the // color table using only the size of array *before* adding the // mixed color. We use two "numColors" variables to handle this. // int numColorsFull = cal.GetNumColors(); int numColors = numColorsFull - 1; unsigned char *colors = new unsigned char[numColorsFull * 4]; unsigned char *cptr = colors; avtColorTables *ct = avtColorTables::Instance(); int opacity = int((float)atts.GetOpacity()*255.f); // // Detect if we're using the default color table or a color table // that does not exist anymore. // string ctName(atts.GetColorTableName()); if(ctName == "Default") ctName = string(ct->GetDefaultDiscreteColorTable()); else if(!ct->ColorTableExists(ctName.c_str())) { delete [] colors; EXCEPTION1(InvalidColortableException, ctName); } // // Create a label-to-color-index mapping // for(int i = 0; i < numColorsFull; ++i) levelColorMap.insert(LevelColorMap::value_type(allLabels[i], i)); bool invert = atts.GetInvertColorTable(); // // Add a color for each boundary name. // if(ct->IsDiscrete(ctName.c_str())) { // The CT is discrete, get its color color control points. for(int i = 0; i < numColors; ++i) { unsigned char rgb[3] = {0,0,0}; ct->GetControlPointColor(ctName.c_str(), i, rgb, invert); *cptr++ = rgb[0]; *cptr++ = rgb[1]; *cptr++ = rgb[2]; *cptr++ = opacity; cal[i].SetRgba(rgb[0], rgb[1], rgb[2], opacity); } } else { // The CT is continuous, sample the CT so we have a unique color // for each element. unsigned char *rgb = ct->GetSampledColors(ctName.c_str(), numColors, invert); if(rgb) { for(int i = 0; i < numColors; ++i) { int j = i * 3; *cptr++ = rgb[j]; *cptr++ = rgb[j+1]; *cptr++ = rgb[j+2]; *cptr++ = opacity; cal[i].SetRgba(rgb[j], rgb[j+1], rgb[j+2], opacity); } delete [] rgb; } } *cptr++ = (unsigned char)cal[numColors].Red(); *cptr++ = (unsigned char)cal[numColors].Green(); *cptr++ = (unsigned char)cal[numColors].Blue(); *cptr++ = (unsigned char)cal[numColors].Alpha(); avtLUT->SetLUTColorsWithOpacity(colors, numColorsFull); levelsMapper->SetColors(cal, needsRecalculation); levelsLegend->SetLevels(labels); levelsMapper->SetLabelColorMap(levelColorMap); levelsLegend->SetLabelColorMap(levelColorMap); delete [] colors; } }