ok, I solved it myself by "if" and "else if" conditions:

Qt Code:
  1. class SimpleData: public QwtData
  2. {
  3. // The x values depend on its index and the y values
  4. // can be calculated from the corresponding x value.
  5. // So we don't need to store the values.
  6. // Such an implementation is slower because every point
  7. // has to be recalculated for every replot, but it demonstrates how
  8. // QwtData can be used.
  9.  
  10. public:
  11. SimpleData( double (*b)(double), double rang1[2], double rang2[2], double step)
  12. {
  13. constraintFunc = b;
  14. _step = step;
  15. rangeX[0]= rang1[0]; rangeX[1] = rang1[1];
  16. rangeY[0]= rang2[0]; rangeY[1] = rang2[1];
  17. range = (rang1[1] - rang1[0])/step;
  18. if(range<0){
  19. range = range *(-1);
  20. }
  21. d_size = size_t(range);
  22. }
  23.  
  24. virtual QwtData *copy() const
  25. {
  26. return new SimpleData(*this);
  27. }
  28.  
  29. virtual size_t size() const
  30. {
  31. return d_size;
  32. }
  33.  
  34. virtual double x(size_t i) const
  35. {
  36. if(rangeX[0]<0){
  37. return (-(range- i) + i)/ range;
  38. }
  39. else
  40. return ((range + i) + i)/ range;
  41. }
  42.  
  43. virtual double y(size_t i) const
  44. {
  45. if((*constraintFunc)(x(i)) > rangeY[1]){
  46. return rangeY[1];
  47. }
  48. else if((*constraintFunc)(x(i)) < rangeY[0]){
  49. return rangeY[0];
  50. }
  51. else return (*constraintFunc)(x(i));
  52. }
  53. private:
  54. size_t d_size;
  55. double range;
  56. double _step;
  57. double (*constraintFunc)(double); // function pointer for constraint function
  58. double rangeX[2];
  59. double rangeY[2];
  60. };
To copy to clipboard, switch view to plain text mode