    static CImg<floatT> isoline3d(CImgList<tf>& primitives, const tfunc& func, const float isovalue,
                                  const float x0, const float y0, const float x1, const float y1,
                                  const int size_x=256, const int size_y=256) {
      CImgList<floatT> vertices;
      primitives.assign();
      typename CImg<floatT>::_functor_isoline3d add_vertex(vertices);
      typename CImg<tf>::_functor_isoline3d add_segment(primitives);
      isoline3d(add_vertex,add_segment,func,isovalue,x0,y0,x1,y1,size_x,size_y);
      return vertices>'x';
    }
    static CImg<floatT> isoline3d(CImgList<tf>& primitives, const tfunc& func, const float isovalue,
                                  const float x0, const float y0, const float x1, const float y1,
                                  const int size_x=256, const int size_y=256) {
      CImgList<floatT> vertices;
      primitives.assign();
      typename CImg<floatT>::_functor_isoline3d add_vertex(vertices);
      typename CImg<tf>::_functor_isoline3d add_segment(primitives);
      isoline3d(add_vertex,add_segment,func,isovalue,x0,y0,x1,y1,size_x,size_y);
      return vertices>'x';
    }