21 #ifndef vtkXYChartRepresentationInternals_h 22 #define vtkXYChartRepresentationInternals_h 50 class PlotsMap :
public std::map<std::string, PlotsMapItem>
52 bool Contains(
const std::string&
key,
const std::string& role)
const 54 PlotsMap::const_iterator iter1 = this->find(
key);
55 if (iter1 != this->end())
57 PlotsMapItem::const_iterator iter2 = iter1->second.find(role);
58 return (iter2 != iter1->second.end());
65 const std::string& columnName,
const std::string& role = std::string())
const 67 const std::string
key =
self->GetDefaultSeriesLabel(tableName, columnName);
68 PlotsMap::const_iterator iter1 = this->find(
key);
69 if (iter1 != this->end())
71 PlotsMapItem::const_iterator iter2 = iter1->second.find(role);
72 if (iter2 != iter1->second.end())
74 return iter2->second.Plot;
81 const std::string& columnName,
const std::string& role = std::string())
83 const std::string
key =
self->GetDefaultSeriesLabel(tableName, columnName);
84 PlotsMap::iterator iter1 = this->find(
key);
85 if (iter1 != this->end())
87 PlotsMapItem::iterator iter2 = iter1->second.find(role);
88 if (iter2 != iter1->second.end())
90 iter1->second.erase(iter2);
98 const std::string& columnName,
const std::string& role,
vtkPlot* plot)
100 const std::string
key =
self->GetDefaultSeriesLabel(tableName, columnName);
102 info.TableName = tableName;
103 info.ColumnName = columnName;
109 for (PlotsMap::const_iterator iter1 = this->begin(); iter1 != this->end(); ++iter1)
111 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin();
112 iter2 != iter1->second.end(); ++iter2)
114 iter2->second.Plot->SetVisible(val);
121 for (PlotsMap::const_iterator iter1 = this->begin(); iter1 != this->end(); ++iter1)
123 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin();
124 iter2 != iter1->second.end(); ++iter2)
134 for (PlotsMap::iterator iter1 = this->begin(); iter1 != this->end(); ++iter1)
136 for (PlotsMapItem::iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end();)
138 if (other.Contains(iter1->first, iter2->first) ==
false)
141 PlotsMapItem::iterator iter2old = iter2;
143 iter1->second.erase(iter2old);
165 const std::string& columnName,
const std::string& vtkNotUsed(role),
166 const std::map<std::string, T>& parameter_map,
const T default_value = T())
const 168 typename std::map<std::string, T>::const_iterator iter;
175 std::string
key =
self->GetDefaultSeriesLabel(tableName, columnName);
176 iter = parameter_map.find(
key);
177 if (iter != parameter_map.end())
183 key =
self->GetDefaultSeriesLabel(std::string(), columnName);
184 iter = parameter_map.find(
key);
185 if (iter != parameter_map.end())
189 return default_value;
201 std::map<std::string, vtkColor3d>
Colors;
205 std::map<std::string, std::string>
Labels;
207 std::map<std::string, vtkScalarsToColors*>
Lut;
237 const std::string& vtkNotUsed(tableName),
const std::string& vtkNotUsed(columnName))
239 return { std::string() };
243 const std::string& columnName,
const std::string& role)
253 return chartXY->
AddPlot(self->GetChartType());
258 const std::string& vtkNotUsed(columnName),
const std::string& vtkNotUsed(role))
268 assert(
self != NULL);
271 std::multimap<int, std::pair<vtkTable*, std::array<std::string, 3> > > orderMap;
272 for (MapOfTables::const_iterator tablesIter = tables.begin(); tablesIter != tables.end();
275 const std::string& tableName = tablesIter->first;
276 vtkTable* table = tablesIter->second.GetPointer();
278 for (
vtkIdType cc = 0; cc < numCols; ++cc)
283 for (
const auto& role : roles)
290 std::array<std::string, 3> mapValue;
291 mapValue[0] = tableName;
292 mapValue[1] = columnName;
294 orderMap.insert(std::make_pair(
order, std::make_pair(table, mapValue)));
300 for (
auto it = orderMap.begin(); it != orderMap.end(); ++it)
303 const std::string& tableName = it->second.second[0];
304 const std::string& columnName = it->second.second[1];
305 const std::string& role = it->second.second[2];
311 plot = this->
NewPlot(
self, tableName, columnName, role);
321 this->SeriesPlots.
AddPlot(
self, tableName, columnName, role, plot);
322 newPlots.
AddPlot(
self, tableName, columnName, role, plot);
326 this->SeriesPlots.
Intersect(newPlots, chartXY);
334 vtkPlot* lastFunctionalBagPlot = 0;
335 for (PlotsMap::iterator iter1 = this->SeriesPlots.begin(); iter1 != this->SeriesPlots.end();
338 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end();
341 const PlotInfo& plotInfo = iter2->second;
342 const std::string& tableName = plotInfo.
TableName;
343 const std::string& columnName = plotInfo.
ColumnName;
345 const std::string& role = iter2->first;
354 if (columnName ==
"QMedianLine")
358 if (plotBag->
IsBag())
360 if (!lastFunctionalBagPlot)
368 lastFunctionalBagPlot = plotBag;
380 for (PlotsMap::iterator iter1 = this->SeriesPlots.begin(); iter1 != this->SeriesPlots.end();
383 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end();
386 const PlotInfo& plotInfo = iter2->second;
392 const std::string& columnName = plotInfo.
ColumnName;
411 const std::string& tableName,
const std::string& columnName,
const std::string& role,
416 this->
GetSeriesParameter(
self, tableName, columnName, role, this->SeriesVisibilities,
false);
423 std::string default_label =
self->GetDefaultSeriesLabel(tableName, columnName);
425 this->
GetSeriesParameter(
self, tableName, columnName, role, this->Labels, default_label);
426 if (self->GetSeriesLabelPrefix())
428 label = std::string(self->GetSeriesLabelPrefix()) + label;
433 self, tableName, columnName, role, this->Colors,
vtkColor3d(0, 0, 0));
438 this->
GetSeriesParameter(
self, tableName, columnName, role, this->LineThicknesses, 2));
440 self, tableName, columnName, role, this->LineStyles, static_cast<int>(
vtkPen::SOLID_LINE)));
444 plotPoints->SetMarkerStyle(this->
GetSeriesParameter(
self, tableName, columnName, role,
446 plotPoints->SetMarkerSize(
451 plotPoints->SetValidPointMaskName(
"vtkValidPointMask");
455 plot, this->
GetSeriesParameter(
self, tableName, columnName, role, this->AxisCorners, 0));
459 if (plotBar && columnName ==
"bin_values")
462 this->
GetSeriesParameter(
self, tableName, columnName, role, this->UseColorMapping,
false);
466 self, tableName, columnName, role, this->Lut, static_cast<vtkScalarsToColors*>(NULL));
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
static vtkDataArray * SafeDownCast(vtkObjectBase *o)
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
virtual void SetWidth(float width)
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)
vtkXYChartRepresentation::MapOfTables MapOfTables
static vtkPlotFunctionalBag * SafeDownCast(vtkObjectBase *o)
vtkSmartPointer< vtkPlot > Plot
std::map< std::string, int > AxisCorners
virtual void SetColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
virtual std::vector< std::string > GetSeriesRoles(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.
std::map< std::string, int > LineStyles
void SetPlotCorner(vtkPlot *plot, int corner)
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)
std::map< std::string, double > MarkerSizes
vtkSmartPointer< vtkPlot > GetPlot(vtkChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role=std::string()) const
virtual void SetLookupTable(vtkScalarsToColors *lut)
vtkAbstractArray * GetColumnByName(const char *name)
std::map< std::string, bool > UseColorMapping
virtual vtkPlot * AddPlot(int type)
void RemoveAllPlots(vtkChartXY *chartXY)
static vtkPlotPoints * SafeDownCast(vtkObjectBase *o)
const char * GetColumnName(vtkIdType col)
void RemoveAllPlots(vtkChartXY *chartXY)
virtual bool RemovePlotInstance(vtkPlot *plot)
virtual void UpdatePlotProperties(vtkXYChartRepresentation *self)
virtual vtkTable * GetInput()
virtual void SetInputArray(int index, const vtkStdString &name)
vtkIdType LowerPlot(vtkPlot *plot)
std::map< std::string, bool > SeriesVisibilities
virtual void SetScalarVisibility(bool)
virtual void SetInputData(vtkTable *table)
virtual vtkIdType StackPlotAbove(vtkPlot *plot, vtkPlot *under)
std::map< std::string, int > LineThicknesses
virtual vtkStdString GetLabel()
std::string PreviousXAxisSeriesName
virtual void UpdatePlots(vtkXYChartRepresentation *self, const MapOfTables &tables)
void SelectColorArray(vtkIdType arrayNum)
vtkChartRepresentation is the base representation for charting representations.
void SetColorF(double color[3])
virtual void SetUseIndexForXSeries(bool)
exporter used by certain views to export data as a CSV file.
static vtkPlotBar * SafeDownCast(vtkObjectBase *o)
virtual vtkPlot * NewPlot(vtkXYChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role)
vtkPen * GetSelectionPen()
std::map< std::string, int > SeriesOrder
virtual bool Export(vtkXYChartRepresentation *self, vtkCSVExporter *exporter)
void SetPlotVisibility(bool val) const
vtkIdType GetNumberOfColumns()
virtual void SetVisible(bool)
virtual void SetLabel(const vtkStdString &label)
void SetLineType(int type)
virtual bool GetVisible()
void Intersect(const PlotsMap &other, vtkChartXY *chartXY)
virtual void SelectableOff()
std::map< std::string, vtkColor3d > Colors