    static CImg<floatT> isosurface3d(CImgList<tf>& primitives, const tfunc& func, const float isovalue,
                                     const float x0, const float y0, const float z0,
                                     const float x1, const float y1, const float z1,
                                     const int size_x=32, const int size_y=32, const int size_z=32) {
      CImgList<floatT> vertices;
      primitives.assign();
      typename CImg<floatT>::_functor_isosurface3d add_vertex(vertices);
      typename CImg<tf>::_functor_isosurface3d add_triangle(primitives);
      isosurface3d(add_vertex,add_triangle,func,isovalue,x0,y0,z0,x1,y1,z1,size_x,size_y,size_z);
      return vertices>'x';
    }
    static CImg<floatT> isosurface3d(CImgList<tf>& primitives, const tfunc& func, const float isovalue,
                                     const float x0, const float y0, const float z0,
                                     const float x1, const float y1, const float z1,
                                     const int size_x=32, const int size_y=32, const int size_z=32) {
      CImgList<floatT> vertices;
      primitives.assign();
      typename CImg<floatT>::_functor_isosurface3d add_vertex(vertices);
      typename CImg<tf>::_functor_isosurface3d add_triangle(primitives);
      isosurface3d(add_vertex,add_triangle,func,isovalue,x0,y0,z0,x1,y1,z1,size_x,size_y,size_z);
      return vertices>'x';
    }