public static double[][][] eval(
      double[][][] dest,
      NslDouble3 num,
      int start1,
      int start2,
      int start3,
      int end1,
      int end2,
      int end3) {

    double[][][] _data = num.get();

    if (start1 < 0) start1 = 0;
    if (start2 < 0) start2 = 0;
    if (start3 < 0) start3 = 0;
    if (end1 > _data.length) end1 = _data.length;
    if (end2 > _data[0].length) end2 = _data[0].length;
    if (end3 > _data[0][0].length) end3 = _data[0][0].length;

    int length1 = end1 - start1 + 1;
    int length2 = end2 - start2 + 1;
    int length3 = end3 - start3 + 1;

    return eval(dest, _data, start1, start2, start3, end1, end2, end3);
  }
 public double[][][] eval(double[][][] dest, NslDouble3 a, NslDouble3 b) {
   return eval(dest, a.getdouble3(), b.getdouble3());
 }
 public double[][][] eval(double a, NslDouble3 b) {
   return eval(a, b.getdouble3());
 }
 public double[][][] eval(NslDouble3 a, NslDouble3 b) {
   return eval(a.getdouble3(), b.getdouble3());
 }
 public double[][][] eval(NslDouble3 a, double b) {
   return eval(a.getdouble3(), b);
 }