21 #ifndef vtkXYChartRepresentationInternals_h 22 #define vtkXYChartRepresentationInternals_h 25 #include "vtkChartXY.h" 27 #include "vtkDataArray.h" 29 #include "vtkPlotBar.h" 30 #include "vtkPlotFunctionalBag.h" 31 #include "vtkPlotPoints.h" 32 #include "vtkSmartPointer.h" 43 vtkSmartPointer<vtkPlot>
Plot;
49 class PlotsMap :
public std::map<std::string, PlotsMapItem>
51 bool Contains(
const std::string& key,
const std::string& role)
const 53 PlotsMap::const_iterator iter1 = this->find(key);
54 if (iter1 != this->end())
56 PlotsMapItem::const_iterator iter2 = iter1->second.find(role);
57 return (iter2 != iter1->second.end());
64 const std::string& columnName,
const std::string& role = std::string())
const 66 const std::string key =
self->GetDefaultSeriesLabel(tableName, columnName);
67 PlotsMap::const_iterator iter1 = this->find(key);
68 if (iter1 != this->end())
70 PlotsMapItem::const_iterator iter2 = iter1->second.find(role);
71 if (iter2 != iter1->second.end())
73 return iter2->second.Plot;
76 return vtkSmartPointer<vtkPlot>();
80 const std::string& columnName,
const std::string& role = std::string())
82 const std::string key =
self->GetDefaultSeriesLabel(tableName, columnName);
83 PlotsMap::iterator iter1 = this->find(key);
84 if (iter1 != this->end())
86 PlotsMapItem::iterator iter2 = iter1->second.find(role);
87 if (iter2 != iter1->second.end())
89 iter1->second.erase(iter2);
97 const std::string& columnName,
const std::string& role, vtkPlot* plot)
99 const std::string key =
self->GetDefaultSeriesLabel(tableName, columnName);
100 PlotInfo& info = (*this)[key][role];
108 for (PlotsMap::const_iterator iter1 = this->begin(); iter1 != this->end(); ++iter1)
110 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin();
111 iter2 != iter1->second.end(); ++iter2)
113 iter2->second.Plot->SetVisible(val);
120 for (PlotsMap::const_iterator iter1 = this->begin(); iter1 != this->end(); ++iter1)
122 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin();
123 iter2 != iter1->second.end(); ++iter2)
125 chartXY->RemovePlotInstance(iter2->second.Plot.GetPointer());
133 for (PlotsMap::iterator iter1 = this->begin(); iter1 != this->end(); ++iter1)
135 for (PlotsMapItem::iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end();)
137 if (other.Contains(iter1->first, iter2->first) ==
false)
139 chartXY->RemovePlotInstance(iter2->second.Plot.GetPointer());
140 PlotsMapItem::iterator iter2old = iter2;
142 iter1->second.erase(iter2old);
164 const std::string& columnName,
const std::string& vtkNotUsed(role),
165 const std::map<std::string, T>& parameter_map,
const T default_value = T())
const 167 typename std::map<std::string, T>::const_iterator iter;
174 std::string key =
self->GetDefaultSeriesLabel(tableName, columnName);
175 iter = parameter_map.find(key);
176 if (iter != parameter_map.end())
182 key =
self->GetDefaultSeriesLabel(std::string(), columnName);
183 iter = parameter_map.find(key);
184 if (iter != parameter_map.end())
188 return default_value;
199 std::map<std::string, vtkColor3d>
Colors;
202 std::map<std::string, std::string>
Labels;
204 std::map<std::string, vtkScalarsToColors*>
Lut;
213 : PreviousUseIndexForXAxis(false)
234 const std::string& vtkNotUsed(tableName),
const std::string& vtkNotUsed(columnName))
236 return std::string();
240 const std::string& columnName,
const std::string& role)
247 vtkChartXY* chartXY =
self->GetChart();
250 return chartXY->AddPlot(self->GetChartType());
255 const std::string& vtkNotUsed(columnName),
const std::string& vtkNotUsed(role))
265 assert(
self != NULL);
266 vtkChartXY* chartXY =
self->GetChart();
267 for (MapOfTables::const_iterator tablesIter = tables.begin(); tablesIter != tables.end();
270 const std::string& tableName = tablesIter->first;
271 vtkTable* table = tablesIter->second.GetPointer();
272 vtkIdType numCols = table->GetNumberOfColumns();
273 for (vtkIdType cc = 0; cc < numCols; ++cc)
275 std::string columnName = table->GetColumnName(cc);
276 std::string role = this->
GetSeriesRole(tableName, columnName);
277 vtkSmartPointer<vtkPlot> plot =
278 this->SeriesPlots.
GetPlot(
self, tableName, columnName, role);
281 plot = this->
NewPlot(
self, tableName, columnName, role);
287 plot->SetInputData(table);
288 plot->SetUseIndexForXSeries(self->GetUseIndexForXAxis());
289 plot->SetInputArray(0, self->GetXAxisSeriesName());
290 plot->SetInputArray(this->
GetInputArrayIndex(tableName, columnName, role), columnName);
291 this->SeriesPlots.
AddPlot(
self, tableName, columnName, role, plot);
292 newPlots.
AddPlot(
self, tableName, columnName, role, plot);
297 this->SeriesPlots.
Intersect(newPlots, chartXY);
304 vtkChartXY* chartXY =
self->GetChart();
305 vtkPlot* lastFunctionalBagPlot = 0;
306 for (PlotsMap::iterator iter1 = this->SeriesPlots.begin(); iter1 != this->SeriesPlots.end();
309 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end();
312 const PlotInfo& plotInfo = iter2->second;
313 const std::string& tableName = plotInfo.
TableName;
314 const std::string& columnName = plotInfo.
ColumnName;
315 vtkPlot* plot = plotInfo.
Plot;
316 const std::string& role = iter2->first;
321 vtkPlotFunctionalBag* plotBag = vtkPlotFunctionalBag::SafeDownCast(plot);
325 if (columnName ==
"QMedianLine")
327 plotBag->SelectableOff();
329 if (plotBag->IsBag())
331 if (!lastFunctionalBagPlot)
333 chartXY->LowerPlot(plotBag);
337 chartXY->StackPlotAbove(plotBag, lastFunctionalBagPlot);
339 lastFunctionalBagPlot = plotBag;
351 for (PlotsMap::iterator iter1 = this->SeriesPlots.begin(); iter1 != this->SeriesPlots.end();
354 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end();
357 const PlotInfo& plotInfo = iter2->second;
358 vtkPlot* plot = plotInfo.
Plot;
359 if (!plot->GetVisible())
363 const std::string& columnName = plotInfo.
ColumnName;
364 vtkTable* table = plot->GetInput();
365 vtkDataArray* xarray =
self->GetUseIndexForXAxis()
367 : vtkDataArray::SafeDownCast(table->GetColumnByName(self->GetXAxisSeriesName()));
368 vtkAbstractArray* yarray = table->GetColumnByName(columnName.c_str());
371 exporter->
AddColumn(yarray, plot->GetLabel().c_str(), xarray);
382 const std::string& tableName,
const std::string& columnName,
const std::string& role,
385 vtkChartXY* chartXY =
self->GetChart();
387 this->
GetSeriesParameter(
self, tableName, columnName, role, this->SeriesVisibilities,
false);
388 plot->SetVisible(visible);
394 std::string default_label =
self->GetDefaultSeriesLabel(tableName, columnName);
396 this->
GetSeriesParameter(
self, tableName, columnName, role, this->Labels, default_label);
397 if (self->GetSeriesLabelPrefix())
399 label = std::string(self->GetSeriesLabelPrefix()) + label;
401 plot->SetLabel(label);
404 self, tableName, columnName, role, this->Colors, vtkColor3d(0, 0, 0));
405 plot->SetColor(color.GetRed(), color.GetGreen(), color.GetBlue());
406 plot->GetSelectionPen()->SetColorF(self->SelectionColor);
409 this->
GetSeriesParameter(
self, tableName, columnName, role, this->LineThicknesses, 2));
411 self, tableName, columnName, role, this->LineStyles, static_cast<int>(vtkPen::SOLID_LINE)));
413 if (vtkPlotPoints* plotPoints = vtkPlotPoints::SafeDownCast(plot))
415 plotPoints->SetMarkerStyle(this->
GetSeriesParameter(
self, tableName, columnName, role,
416 this->MarkerStyles, static_cast<int>(vtkPlotPoints::NONE)));
420 plotPoints->SetValidPointMaskName(
"vtkValidPointMask");
423 chartXY->SetPlotCorner(
424 plot, this->
GetSeriesParameter(
self, tableName, columnName, role, this->AxisCorners, 0));
427 vtkPlotBar* plotBar = vtkPlotBar::SafeDownCast(plot);
428 if (plotBar && columnName ==
"bin_values")
431 this->
GetSeriesParameter(
self, tableName, columnName, role, this->UseColorMapping,
false);
432 plotBar->SetScalarVisibility(colorMapping);
433 plotBar->SelectColorArray(
"bin_extents");
435 self, tableName, columnName, role, this->Lut, static_cast<vtkScalarsToColors*>(NULL));
438 plotBar->SetLookupTable(lut);
std::map< std::string, vtkScalarsToColors * > Lut
bool RemovePlot(vtkChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role=std::string())
std::map< std::string, PlotInfo > PlotsMapItem
bool PreviousUseIndexForXAxis
T GetSeriesParameter(vtkXYChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &vtkNotUsed(role), const std::map< std::string, T > ¶meter_map, const T default_value=T()) const
vtkXYChartRepresentation is representation that is used to add vtkPlot subclasses to a vtkChartXY ins...
std::map< std::string, std::string > Labels
void AddPlot(vtkChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role, vtkPlot *plot)
virtual std::string GetSeriesRole(const std::string &vtkNotUsed(tableName), const std::string &vtkNotUsed(columnName))
Subclasses can override this method to assign a role for a specific data array in the input dataset...
vtkXYChartRepresentation::MapOfTables MapOfTables
vtkSmartPointer< vtkPlot > Plot
std::map< std::string, int > AxisCorners
std::map< std::string, int > LineStyles
std::map< std::string, vtkSmartPointer< vtkTable > > MapOfTables
virtual int GetInputArrayIndex(const std::string &vtkNotUsed(tableName), const std::string &vtkNotUsed(columnName), const std::string &vtkNotUsed(role))
std::map< std::string, int > MarkerStyles
void AddColumn(vtkAbstractArray *yarray, const char *yarrayname=NULL, vtkDataArray *xarray=NULL)
In STREAM_COLUMNS mode, use this method to add a column (yarray).
virtual bool UpdateSinglePlotProperties(vtkXYChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role, vtkPlot *plot)
vtkSmartPointer< vtkPlot > GetPlot(vtkChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role=std::string()) const
std::map< std::string, bool > UseColorMapping
void RemoveAllPlots(vtkChartXY *chartXY)
void RemoveAllPlots(vtkChartXY *chartXY)
virtual void UpdatePlotProperties(vtkXYChartRepresentation *self)
std::map< std::string, bool > SeriesVisibilities
std::map< std::string, int > LineThicknesses
std::string PreviousXAxisSeriesName
virtual void UpdatePlots(vtkXYChartRepresentation *self, const MapOfTables &tables)
vtkChartRepresentation is the base representation for charting representations.
exporter used by certain views to export data as a CSV file.
virtual vtkPlot * NewPlot(vtkXYChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role)
virtual bool Export(vtkXYChartRepresentation *self, vtkCSVExporter *exporter)
void SetPlotVisibility(bool val) const
void Intersect(const PlotsMap &other, vtkChartXY *chartXY)
std::map< std::string, vtkColor3d > Colors