9 #ifndef vtkXYChartRepresentationInternals_h 10 #define vtkXYChartRepresentationInternals_h 47 class PlotsMap :
public std::map<std::string, PlotsMapItem>
49 bool Contains(
const std::string&
key,
const std::string& role)
const 51 PlotsMap::const_iterator iter1 = this->find(key);
52 if (iter1 != this->end())
54 PlotsMapItem::const_iterator iter2 = iter1->second.find(role);
55 return (iter2 != iter1->second.end());
62 const std::string& columnName,
const std::string& role = std::string())
const 64 const std::string key =
self->GetDefaultSeriesLabel(tableName, columnName);
65 PlotsMap::const_iterator iter1 = this->find(key);
66 if (iter1 != this->end())
68 PlotsMapItem::const_iterator iter2 = iter1->second.find(role);
69 if (iter2 != iter1->second.end())
71 return iter2->second.Plot;
78 const std::string& columnName,
const std::string& role = std::string())
80 const std::string key =
self->GetDefaultSeriesLabel(tableName, columnName);
81 PlotsMap::iterator iter1 = this->find(key);
82 if (iter1 != this->end())
84 PlotsMapItem::iterator iter2 = iter1->second.find(role);
85 if (iter2 != iter1->second.end())
87 iter1->second.erase(iter2);
95 const std::string& columnName,
const std::string& role,
vtkPlot* plot)
97 const std::string key =
self->GetDefaultSeriesLabel(tableName, columnName);
106 for (PlotsMap::const_iterator iter1 = this->begin(); iter1 != this->end(); ++iter1)
108 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin();
109 iter2 != iter1->second.end(); ++iter2)
111 iter2->second.Plot->SetVisible(val);
118 for (PlotsMap::const_iterator iter1 = this->begin(); iter1 != this->end(); ++iter1)
120 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin();
121 iter2 != iter1->second.end(); ++iter2)
131 for (PlotsMap::iterator iter1 = this->begin(); iter1 != this->end(); ++iter1)
133 for (PlotsMapItem::iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end();)
135 if (other.Contains(iter1->first, iter2->first) ==
false)
138 PlotsMapItem::iterator iter2old = iter2;
140 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;
200 std::map<std::string, vtkColor3d>
Colors;
205 std::map<std::string, std::string>
Labels;
207 std::map<std::string, vtkScalarsToColors*>
Lut;
216 : PreviousUseIndexForXAxis(false)
241 const std::string& vtkNotUsed(tableName),
const std::string& vtkNotUsed(columnName))
243 return { std::string() };
251 const std::string& columnName,
const std::string& role,
unsigned int block = 0)
261 return chartXY->
AddPlot(self->GetChartType(), block);
266 const std::string& vtkNotUsed(columnName),
const std::string& vtkNotUsed(role))
278 assert(
self !=
nullptr);
281 std::multimap<int, std::pair<vtkTable*, TableInfo>> orderMap;
282 for (MapOfTables::const_iterator tablesIter = tables.begin(); tablesIter != tables.end();
285 const std::string& tableName = tablesIter->first;
286 vtkTable* table = tablesIter->second.first.GetPointer();
288 for (
vtkIdType cc = 0; cc < numCols; ++cc)
293 for (
const auto& role : roles)
304 info.
Block = tablesIter->second.second;
305 orderMap.insert(std::make_pair(order, std::make_pair(tablesIter->second.first, info)));
312 std::map<vtkTable*, vtkSmartPointer<vtkTable>> indexedTables;
315 for (
auto it = orderMap.begin(); it != orderMap.end(); ++it)
337 const bool useIndex =
self->GetUseIndexForXAxis();
340 auto& indexedTable = indexedTables[table];
345 table = indexedTable;
364 this->SeriesPlots.
Intersect(newPlots, chartXY);
374 vtkPlot* lastFunctionalBagPlot =
nullptr;
375 for (PlotsMap::iterator iter1 = this->SeriesPlots.begin(); iter1 != this->SeriesPlots.end();
378 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end();
381 const PlotInfo& plotInfo = iter2->second;
382 const std::string& tableName = plotInfo.
TableName;
383 const std::string& columnName = plotInfo.
ColumnName;
385 const std::string& role = iter2->first;
394 if (columnName ==
"QMedianLine")
398 if (plotBag->
IsBag())
400 if (!lastFunctionalBagPlot)
408 lastFunctionalBagPlot = plotBag;
422 for (PlotsMap::iterator iter1 = this->SeriesPlots.begin(); iter1 != this->SeriesPlots.end();
425 for (PlotsMapItem::const_iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end();
428 const PlotInfo& plotInfo = iter2->second;
434 const std::string& columnName = plotInfo.
ColumnName;
440 if (yarray !=
nullptr)
442 const std::string plotName = plot->
GetLabel();
443 exporter->
AddColumn(yarray, plotName.c_str(), xarray);
444 exporter->
AddStyle(plot, plotName.c_str());
469 result->ShallowCopy(table);
475 for (
vtkIdType cc = 0; cc < numRows; ++cc)
477 indices->SetTypedComponent(cc, 0, cc);
479 result->AddColumn(indices);
488 const std::string& tableName,
const std::string& columnName,
const std::string& role,
493 this->
GetSeriesParameter(
self, tableName, columnName, role, this->SeriesVisibilities,
false);
501 this->
GetSeriesParameter(
self, tableName, columnName, role, this->Labels, columnName);
502 if (self->GetSeriesLabelPrefix())
504 label = std::string(self->GetSeriesLabelPrefix()) + label;
506 if (self->GetArraySelectionMode() == ArraySelectionModes::INDIVIDUAL_BLOCKS &&
507 self->GetShowBlockName())
509 label = label +
" (" + tableName +
")";
514 self, tableName, columnName, role, this->Colors,
vtkColor3d(0, 0, 0));
521 this->
GetSeriesParameter(
self, tableName, columnName, role, this->LineThicknesses, 2));
523 self, tableName, columnName, role, this->LineStyles, static_cast<int>(
vtkPen::SOLID_LINE)));
527 plotPoints->SetMarkerStyle(this->
GetSeriesParameter(
self, tableName, columnName, role,
529 plotPoints->SetMarkerSize(
534 plotPoints->SetValidPointMaskName(
"vtkValidPointMask");
538 plot, this->
GetSeriesParameter(
self, tableName, columnName, role, this->AxisCorners, 0));
542 if (plotBar && columnName ==
"bin_values")
545 this->
GetSeriesParameter(
self, tableName, columnName, role, this->UseColorMapping,
false);
549 self, tableName, columnName, role, this->Lut, static_cast<vtkScalarsToColors*>(
nullptr));
virtual void SetGlobalStyle(vtkChart *chart)=0
Set Global style elements like graph and axis titles.
std::map< std::string, vtkScalarsToColors * > Lut
virtual bool Export(vtkXYChartRepresentation *self, vtkAbstractChartExporter *exporter)
Export visible plots to a CSV file.
bool RemovePlot(vtkChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role=std::string())
std::map< std::string, PlotInfo > PlotsMapItem
virtual ~vtkInternals()=default
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
Makes is easy to obtain a value for a series parameter, is set, else the default. ...
virtual void SetWidth(float width)
const double & GetBlue() const
static vtkSmartPointer< vtkTable > AddIndexColumn(vtkTable *table)
Returns a shallow copy of the table with an additional column, named IndexColumnName(), holding the row indices.
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 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)
static vtkSmartPointer< T > New()
virtual int GetInputArrayIndex(const std::string &vtkNotUsed(tableName), const std::string &vtkNotUsed(columnName), const std::string &vtkNotUsed(role))
const double & GetRed() const
std::map< std::string, int > MarkerStyles
virtual bool UpdateSinglePlotProperties(vtkXYChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role, vtkPlot *plot)
Returns false for in-visible plots.
std::map< std::string, double > MarkerSizes
virtual void SetName(const char *)
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)
static const char * IndexColumnName()
Name of the index column added by AddIndexColumn().
std::map< std::string, std::pair< vtkSmartPointer< vtkTable >, unsigned int > > MapOfTables
vtkAbstractArray * GetColumnByName(const char *name)
std::map< std::string, bool > UseColorMapping
virtual void AddStyle(vtkPlot *plot, const char *plotName)=0
Attach information about the style of the plot (color,line type, marker type etc. ...
virtual vtkPlot * AddPlot(int type)
void RemoveAllPlots(vtkChartXY *chartXY)
Destroy all vtkPlot instances.
static vtkPlotPoints * SafeDownCast(vtkObjectBase *o)
const char * GetColumnName(vtkIdType col)
void RemoveAllPlots(vtkChartXY *chartXY)
virtual bool RemovePlotInstance(vtkPlot *plot)
std::map< std::string, double > Opacities
virtual void UpdatePlotProperties(vtkXYChartRepresentation *self)
Update properties for plots in the chart.
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)
Update i.e.
void SelectColorArray(vtkIdType arrayNum)
vtkChartRepresentation is the base representation for charting representations.
void SetColorF(double color[3])
virtual void SetUseIndexForXSeries(bool)
static vtkPlotBar * SafeDownCast(vtkObjectBase *o)
void HideAllPlots()
Hide all plots.
vtkPen * GetSelectionPen()
std::map< std::string, int > SeriesOrder
virtual void SetNumberOfTuples(vtkIdType numTuples)=0
void SetPlotVisibility(bool val) const
vtkIdType GetNumberOfColumns()
virtual void SetVisible(bool)
virtual void SetLabel(const vtkStdString &label)
virtual vtkPlot * NewPlot(vtkXYChartRepresentation *self, const std::string &tableName, const std::string &columnName, const std::string &role, unsigned int block=0)
Add new plot.
void SetLineType(int type)
exporter used by certain views to export data into a file or stream.
virtual bool GetVisible()
vtkIdType GetNumberOfRows()
void Intersect(const PlotsMap &other, vtkChartXY *chartXY)
const double & GetGreen() const
virtual void AddColumn(vtkAbstractArray *yarray, const char *yarrayname=nullptr, vtkDataArray *xarray=nullptr)=0
In STREAM_COLUMNS mode, use this method to add a column (yarray).
virtual void SelectableOff()
std::map< std::string, vtkColor3d > Colors