# File interpolate.rb, line 31
    def mouse_cut(dimx, dimy, num=2)

      # < preparation >

      dimx = dim_index(dimx)
      dimy = dim_index(dimy)

      rundef = DCL.glpget("rundef")
      line = nil
      while(true)
        puts "\n*** Waiting for mouse click. Click #{num} points in the current viewport."
        line = DCLMouseLine.new(num)
        if line.ux.include?(rundef)
          puts "** The points specified include one(s) outside the U window. Do it again."
        else
          break
        end
      end
      line.draw
      vx = line.vx
      vy = line.vy
      ux = line.ux
      uy = line.uy
      len = ux.length
      kx = Array.new
      ky = Array.new
      cut = [true]*rank
      for i in 0...len
        cut[dimx] = ux[i]
        cut[dimy] = uy[i]
        dummy, sl = grid.cut(*cut)
        kx[i] = sl[dimx]
        ky[i] = sl[dimy]
      end
      ndiv = Array.new
      ndsum = [0]
      for i in 0...len-1
        ndiv[i] = Math.sqrt( (kx[i+1]-kx[i])**2 + (ky[i+1]-ky[i])**2).to_i
        ndsum.push ndsum[-1] + ndiv[i]   # 0, ndiv[0], ndiv[0]+ndiv[1], ...
      end
      ndtot = ndsum[-1]
      vxdiv = NArray.float(ndtot)
      vydiv = NArray.float(ndtot)
      for i in 0...len-1
        a = NArray.float(ndiv[i]).indgen / ndiv[i]
        vxdiv[ndsum[i]...ndsum[i+1]] = (1.0-a)*vx[i] + a*vx[i+1]
        vydiv[ndsum[i]...ndsum[i+1]] = (1.0-a)*vy[i] + a*vy[i+1]
      end
      uxdiv = NArray.float(ndtot)
      uydiv = NArray.float(ndtot)
      for i in 0...ndtot
        uxdiv[i], uydiv[i] = DCL.stitrf(vxdiv[i], vydiv[i])
      end
      cx = coord(dimx)
      xcrd = VArray.new(uxdiv, cx, cx.name)
      cy = coord(dimy)
      ycrd = VArray.new(uydiv, cy, cy.name)
      if (vxdiv[-1]-vxdiv[0]).abs > (vydiv[-1]-vydiv[0]).abs
        cutter = [xcrd,ycrd]  # x will be the main coord var if not map proj
        crd = xcrd
      else
        cutter = [ycrd,xcrd]  # x will be the main coord var if not map proj
        crd = ycrd
      end
      axnm = crd.name
      itr = DCL.sgqtrn
      if itr>=10 and itr<=40
        newcrd = __sp_dist(xcrd,ycrd)
        modifier = Proc.new{|gp|
          newax = Axis.new.set_pos(newcrd)
          gp.grid.set_axis(axnm,newax)
          g = Grid.new( newax )
          gxcrd = GPhys.new(g,xcrd)
          gycrd = GPhys.new(g,ycrd)
          gp.set_assoc_coords([gxcrd, gycrd])
          gp
        }
      else
        modifier = nil
      end
      @@interpo_previous_cutter = cutter
      @@interpo_previous_modifier = modifier

      # < do the job >

      gpnew = interpolate(cutter)
      gpnew = modifier[gpnew] if modifier
      [gpnew, line]
    end