def mouse_cut(dimx, dimy, num=2)
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]
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]
crd = xcrd
else
cutter = [ycrd,xcrd]
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
gpnew = interpolate(cutter)
gpnew = modifier[gpnew] if modifier
[gpnew, line]
end