##// END OF EJS Templates
Adds method to get all variables from model...
Adds method to get all variables from model This method will be used to generate forbidden names when renaming a variable (i.e. names of existing variables)

File last commit:

r646:5cae61f2b3b8
r684:c7028b4894dd
Show More
VectorSeries.cpp
83 lines | 2.7 KiB | text/x-c | CppLexer
/ core / src / Data / VectorSeries.cpp
Alexandre Leroux
Creates vector series...
r561 #include "Data/VectorSeries.h"
Alexandre Leroux
Updates VectorSeries() to create a single QVector for ArrayData with three vectors in entry
r646 namespace {
/**
* Flatten the three components of a vector to a single QVector that can be passed to an ArrayData
*
* Example:
* xValues = {1, 2, 3}
* yValues = {4, 5, 6}
* zValues = {7, 8, 9}
*
* result = {1, 4, 7, 2, 5, 8, 3, 6, 9}
*
* @param xValues the x-component values of the vector
* @param yValues the y-component values of the vector
* @param zValues the z-component values of the vector
* @return the single QVector
* @remarks the three components are consumed
* @sa ArrayData
*/
QVector<double> flatten(QVector<double> xValues, QVector<double> yValues, QVector<double> zValues)
{
if (xValues.size() != yValues.size() || xValues.size() != zValues.size()) {
/// @todo ALX : log
return {};
}
auto result = QVector<double>{};
result.reserve(xValues.size() * 3);
while (!xValues.isEmpty()) {
result.append({xValues.takeFirst(), yValues.takeFirst(), zValues.takeFirst()});
}
return result;
}
} // namespace
Alexandre Leroux
Creates vector series...
r561 VectorSeries::VectorSeries(QVector<double> xAxisData, QVector<double> xValuesData,
QVector<double> yValuesData, QVector<double> zValuesData,
const Unit &xAxisUnit, const Unit &valuesUnit)
Alexandre Leroux
Updates VectorSeries() to create a single QVector for ArrayData with three vectors in entry
r646 : VectorSeries{std::move(xAxisData), flatten(std::move(xValuesData), std::move(yValuesData),
std::move(zValuesData)),
xAxisUnit, valuesUnit}
{
}
VectorSeries::VectorSeries(QVector<double> xAxisData, QVector<double> valuesData,
const Unit &xAxisUnit, const Unit &valuesUnit)
Alexandre Leroux
Creates vector series...
r561 : DataSeries{std::make_shared<ArrayData<1> >(std::move(xAxisData)), xAxisUnit,
Alexandre Leroux
Updates VectorSeries() to create a single QVector for ArrayData with three vectors in entry
r646 std::make_shared<ArrayData<2> >(std::move(valuesData), 3), valuesUnit}
Alexandre Leroux
Creates vector series...
r561 {
}
std::unique_ptr<IDataSeries> VectorSeries::clone() const
{
return std::make_unique<VectorSeries>(*this);
}
std::shared_ptr<IDataSeries> VectorSeries::subDataSeries(const SqpRange &range)
{
auto subXAxisData = QVector<double>();
auto subXValuesData = QVector<double>();
auto subYValuesData = QVector<double>();
auto subZValuesData = QVector<double>();
this->lockRead();
{
Alexandre Leroux
(Refactoring) Renames IDataSeries::subData()
r605 auto bounds = xAxisRange(range.m_TStart, range.m_TEnd);
Alexandre Leroux
Creates vector series...
r561 for (auto it = bounds.first; it != bounds.second; ++it) {
subXAxisData.append(it->x());
subXValuesData.append(it->value(0));
subYValuesData.append(it->value(1));
subZValuesData.append(it->value(2));
}
}
this->unlock();
return std::make_shared<VectorSeries>(subXAxisData, subXValuesData, subYValuesData,
subZValuesData, this->xAxisUnit(), this->valuesUnit());
}