Plot3D::Plot3D(Kernel &k, const Tuple &cmd) : k(k) { spacetype = FLAT_SPACE; var expr = cmd[1]; var xrange = cmd[2]; var yrange = cmd[3]; var xparam = xrange.tuple()[1]; var yparam = yrange.tuple()[1]; xmin = toD(N(k, k.eval(xrange.tuple()[2])).object()); xmax = toD(N(k, k.eval(xrange.tuple()[3])).object()); ymin = toD(N(k, k.eval(yrange.tuple()[2])).object()); ymax = toD(N(k, k.eval(yrange.tuple()[3])).object()); if (cmd[cmd.size - 1].isTuple(SYS(Optional))) { var opts = cmd[cmd.size - 1]; readOptions(opts.tuple()); } sur = new Surface*[1]; surnum = 1; F2P *f3d = new F2P(k, expr, xparam, yparam); sur[0] = new Surface(f3d, xmin, xmax, ymin, ymax); delete f3d; zmin = sur[0]->zmin; zmax = sur[0]->zmax; for (int i = 1; i < surnum; i++) { if (sur[i]->zmin < zmin) zmin = sur[i]->zmin; if (sur[i]->zmax > zmax) zmax = sur[i]->zmax; } }