Menu

#84 Enable "plot3d" for data with fewer than 3 columns

v1.0.x
closed
None
v1.0.9
Change Request
2016-08-05
2016-07-27
Erik Hänel
No

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.

Discussion

  • Erik Hänel

    Erik Hänel - 2016-07-28
    • status: open --> accepted
     
  • Erik Hänel

    Erik Hänel - 2016-07-28
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -1 +1,7 @@
     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:**
    +
    +**Implementation:**
    +
    +**Tests:**
    
    • status: accepted --> analyzing
     
  • Erik Hänel

    Erik Hänel - 2016-07-28
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -1,6 +1,103 @@
     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:
    +~~~C
    +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:**
    
    • status: analyzing --> implementing
     
  • Erik Hänel

    Erik Hänel - 2016-07-28
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -100,5 +100,6 @@
     ~~~
    
     **Implementation:**
    +Change was implemented as proposed by the analysis. Implementation tests were passed and detected deviations were removed.
    
     **Tests:**
    
    • status: implementing --> testing
     
  • Erik Hänel

    Erik Hänel - 2016-08-05
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -103,3 +103,4 @@
     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.
    
    • status: testing --> closed
     

Anonymous
Anonymous

Add attachments
Cancel





MongoDB Logo MongoDB