Enable "plot3d" for data with fewer than 3 columns
Framework for numerical computations, data analysis and visualisation
Brought to you by:
numere
Currently, only data sets with three or more columns are allowed for the command plot3d. Add the support for two columns (effectively adding a column with the value 0.0).
Analysis:
The command plto3d requires nDataDim[] >= 3. This can be used, to add another fork in the following lines adding this change request:
else if (nDataDim[i] >= 3 && j == 1)
{
// --> xyz-Datenwerte! <--
if (j_pos[0] < j_pos[1] || sj_pos[1] == "inf")
{
for (int q = 0; q < nDataDim[i]; q++)
{
if (_pInfo.b2D && q == 2)
{
for (int k = 0; k < i_pos[1]-i_pos[0]; k++)
{
if (_data.num(sDataTable, i_pos[0], i_pos[1], j_pos[0]+1) <= k)
{
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = NAN;
continue;
}
if (_data.getCols(sDataTable) > q + k + j_pos[0] && _data.isValidEntry(l+i_pos[0], q+k+j_pos[0], sDataTable) && (j_pos[0] <= j_pos[1] || sj_pos[1] == "inf"))
{
if (!l && (isnan(_data.getElement(l+i_pos[0], q + k + j_pos[0], sDataTable)) || isinf(_data.getElement(l+i_pos[0], q + k + j_pos[0], sDataTable))))
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = NAN;
else if (isinf(_data.getElement(l+i_pos[0], q+k + j_pos[0], sDataTable)))
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = NAN;
else
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = _data.getElement(l+i_pos[0], q+k + j_pos[0], sDataTable);
}
else
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = NAN;
}
}
else
{
// --> Vorwaerts zaehlen <--
if (_data.getCols(sDataTable) > q + j_pos[0] && _data.isValidEntry(l+i_pos[0], q+j_pos[0], sDataTable) && (j_pos[0] <= j_pos[1] || sj_pos[1] == "inf"))
{
if (!l && (isnan(_data.getElement(l+i_pos[0], q + j_pos[0], sDataTable)) || isinf(_data.getElement(l+i_pos[0], q + j_pos[0], sDataTable))))
_mDataPlots[i][q].a[l] = NAN;
else if (isinf(_data.getElement(l+i_pos[0], q + j_pos[0], sDataTable)))
_mDataPlots[i][q].a[l] = NAN;
else
_mDataPlots[i][q].a[l] = _data.getElement(l+i_pos[0], q + j_pos[0], sDataTable);
}
else if (l)
_mDataPlots[i][q].a[l] = NAN;
else
_mDataPlots[i][q].a[0] = NAN;
}
}
}
else
{
for (int q = 0; q < nDataDim[i]; q++)
{
if (_pInfo.b2D && q == 2)
{
for (int k = 0; k < i_pos[1]-i_pos[0]; k++)
{
if (_data.num(sDataTable, i_pos[0], i_pos[1], j_pos[0]-1) <= k)
{
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = NAN;
continue;
}
if (_data.getCols(sDataTable) > j_pos[0] && _data.isValidEntry(l+i_pos[0], j_pos[0]-q-k, sDataTable) && (j_pos[0]-q-k >= j_pos[1] && j_pos[0]-q-k >= 0))
{
if (!l && (isnan(_data.getElement(l+i_pos[0], j_pos[0]-q-k, sDataTable)) || isinf(_data.getElement(l+i_pos[0], j_pos[0]-q-k, sDataTable))))
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = NAN;
else if (isinf(_data.getElement(l+i_pos[0], q+k + j_pos[0], sDataTable)))
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = NAN;
else
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = _data.getElement(l+i_pos[0], j_pos[0]-q-k, sDataTable);
}
else
_mDataPlots[i][q].a[l+(i_pos[1]-i_pos[0])*k] = NAN;
}
}
else
{
// --> Rueckwaerts zaehlen <--
if (_data.getCols(sDataTable) > j_pos[0] && _data.isValidEntry(l+i_pos[0], j_pos[0]-q,sDataTable) && j_pos[0]-q >= 0 && j_pos[0]-q >= j_pos[1])
{
if (!l && (isnan(_data.getElement(l+i_pos[0], j_pos[0]-q, sDataTable)) || isinf(_data.getElement(l+i_pos[0], j_pos[0]-q, sDataTable))))
_mDataPlots[i][q].a[l] = NAN;
else if (isinf(_data.getElement(l+i_pos[0], j_pos[0]-q, sDataTable)))
_mDataPlots[i][q].a[l] = NAN;
else
_mDataPlots[i][q].a[l] = _data.getElement(l+i_pos[0], j_pos[0]-q, sDataTable);
}
else if (l)
_mDataPlots[i][q].a[l] = NAN;
else
_mDataPlots[i][q].a[0] = NAN;
}
}
}
}
Implementation:
Change was implemented as proposed by the analysis. Implementation tests were passed and detected deviations were removed.
Tests:
Tests were passed successfully. Implementation of change request accepted.
Anonymous
Diff:
Diff:
Diff:
Diff: