; docformat = 'rst' ;+ ; Batch file containing all the code intended to be typed at the command line ; from the "Direct graphics" chapter. ;- ; Direct graphics vs. object graphics ; Color section help, /device device, decomposed=1 device, decomposed=0 device, get_decomposed=dec xloadct loadct, 5 loadct, get_names=ctNames print, strtrim(indgen(75), 2) + '. ' + ctNames, format='(2A-30)' loadct, 15 xpalette r = bindgen(256) g = bindgen(256) b = 255B - bindgen(256) tvlct, r, g, b xpalette loadct, 15 tvlct, r, g, b, /get print, bindgen(10), r[0:9], g[0:9], b[0:9] erase, '2080ff'x erase, 255L + 128L * 2L^8 + 16 * 2L^16 ; Handling windows section window, 0 window, 1 window, /free winId = !d.window winId = !d.window window, xsize=400, ysize=400 window, xpos=400, ypos=100 window, xsize=200, ysize=200 tvscl, hanning(200, 200) device, copy=[0, 0, 100, 100, 100, 100] ; Line plots ; load line plot data openr, lun, file_which('damp_sn.dat'), /get_lun sn = bytarr(512) readu, lun, sn free_lun, lun openr, lun, file_which('damp_sn2.dat'), /get_lun sn2 = bytarr(512) readu, lun, sn2 free_lun, lun ; simple line plot device, decomposed=1 window, /free, title='Simple line plot', xsize=700, ysize=300 plot, sn plot, sn, xstyle=9, ystyle=8 oplot, sn2, linestyle=2, color='0000ff'x device, decomposed=0 ali = read_image(file_which('people.jpg')) plot, ali[0, *, *], ali[1, *, *], psym=4, symsize=0.25, $ xstyle=9, ystyle=9, xrange=[0, 255], yrange=[0, 255], $ xtitle='Red band', ytitle='Blue band' usersym, [-1, 1, 0, -1], [-1, -1, 1, -1] plot, x[ind], y[ind], psym=8, symsize=0.25, xstyle=9, ystyle=9, xrange=[0, 255], yrange=[0, 255], $ xtitle='Red band', ytitle='Blue band' endo = read_image(file_which('endocell.jpg')) plot, histogram(endo, binsize=2), psym=10, xrange=[0, 255], xstyle=9, ystyle=8 plot, [1, 2, 3, 2, 1], psym=10, xstyle=9, ystyle=8 plot, sn, xstyle=1, ystyle=9, charsize=0.75, yrange=[0, 255] axis, yaxis=1, yrange=[0, 2*255], ystyle=1, /save, charsize=0.75 plot, sn2, linestyle=0, color='0000cc'x, thick=1 window, xsize=400, ysize=400, /free t = findgen(360) * !dtor plot, 1. + cos(t), t, /polar, position=[0.1, 0.1, 0.95, 0.95], charsize=0.75 data = randomu(0L, 1461) for i = 0, 5 do data = smooth(data, 3, /edge_truncate) times = timegen(units='Hours', step_size=6, $ start=julday(1, 1, 2000), final=julday(12, 31, 2000)) dummy = label_date(date_format=['%D','%M']) plot, times, data, xstyle=9, ystyle=8, ymargin=[6, 2], $ xtickinterval=7, xtickformat=['label_date', 'label_date'], $ xtickunits=['Days', 'Months'] ; Coordinate systems print, convert_coord(5, 5, /data, /to_normal) print, cv_coord(from_polar=[!pi / 4, 1], /to_rect) ; Annotation filename = file_which('sine_waves.txt') data = fltarr(2, file_lines(filename)) openr, lun, filename, /get_lun readf, lun, data free_lun, lun plot, data[0, *], xstyle=9, ystyle=8 oplot, data[1, *], color='0000ff'x xyouts, 125, 265, 'chirp.dat', charsize=0.8 xyouts, 175, 235, 'damp_sn.dat', charsize=0.8, color='0000ff'x xyouts, 0.5, 0.9, 'Combined plots of chirp.dat and damp_sn.dat', /normal, alignment=0.5 xyouts, 0.5, 0.5, '!9I!X!8x!Xd!8x!X', /normal, font=-1, charsize=4., alignment=0.5 showfont, 9, 'Math font' xyouts, 0.5, 0.5, 'e!Ei!4p!X!N = -1', /normal, charsize=8., alignment=0.5, font=-1 device, set_font='Helvetica', /tt_font window, xsize=400, ysize=400, /free plot, findgen(11), /nodata, xstyle=9, ystyle=9, position=[0.1, 0.1, 0.9, 0.9], charsize=0.75 _x = [2, 4, 7, 9] _y = [2, 7, 4, 9] spline_p, _x, _y, x, y, interval=0.1 plots, _x, _y, psym=1 plots, x, y plot, data[0, *], xstyle=9, ystyle=8, charsize=0.75 polyfill, [0., findgen(512), 511.], [0., reform(data[0, *]), 0.], color='808080'x ; Images endoFilename = file_which('endocell.jpg') read_jpeg, endoFilename, endo help, endo device, decomposed=1 window, /free, xsize=615, ysize=416 tv, endo device, decomposed=0 window, /free, xsize=615, ysize=416 loadct, 5 tv, endo device, decomposed=1 window, /free, xsize=300, ysize=300 h = hanning(300, 300) tv, h tvscl, h f = filepath('people.jpg', subdir=['examples', 'data']) ali = read_image(f) help, ali window, /free, xsize=256, ysize=256 device, decomposed=1 tv, ali, true=1 tv, reform(ali[0, *, *]) bsqAli = transpose(ali, [1, 2, 0]) help, bsqAli tv, bsqAli, true=3 convec = read_binary(file_which('convec.dat'), data_dims=[248, 248]) help, convec window, /free, xsize=248 * 3, ysize = 248 * 2 loadct, 0 tvscl, convec, 0 tvscl, shift(abs(fft(convec)), 124, 124), 1 tvscl, unsharp_mask(convec), 2 tvscl, sobel(convec), 3 tvscl, roberts(convec), 4 tvscl, smooth(convec, 5, /edge_truncate), 5 window, /free, xsize=100*2, ysize=100 tvscl, congrid(hanning(20, 20), 100, 100), 0 tvscl, rebin(hanning(20, 20), 100, 100), 1 window, /free, xsize=400, ysize=300 plot, sin(findgen(360) * !dtor) im = tvrd(true=1) write_png, 'sineplot.png', im ; Surface plots ; load DEM data demFilename = file_which('elevbin.dat') dem = read_binary(demFilename, data_dims=[64, 64], data_type=1) help, dem surface, dem, charsize=2.0, xstyle=1, ystyle=1 surface, dem, xstyle=1, ystyle=1, charsize=2.0, ax=60 shade_surf, dem, xstyle=1, ystyle=1 ; load image data read_jpeg, file_which('elev_t.jpg'), im help, im ; massage data bigDem = rebin(dem, 512, 512) redIm = reform(im[0, *, *]) shade_surf, bigDem, zrange=[0, 1000], shades=redIm, xstyle=1, ystyle=1 ; Contour plots window, /free, title='DEM CONTOUR plot example', xsize=600, ysize=600 contour, dem, nlevels=15, xstyle=1, ystyle=1 contour, dem, nlevels=15, xstyle=1, ystyle=1, /follow, /downhill nlevels = 15 levels = indgen(nlevels) * (max(dem) - min(dem)) / nlevels + min(dem) device, decomposed=0 r = byte(findgen(256) * (255. - 84.) / 255. + 84.) g = byte(findgen(256) * (255. - 48.) / 255. + 48.) b = byte(findgen(256) * (255. - 5.) / 255. + 5.) tvlct, r, g, b contour, dem, xstyle=1, ystyle=1, levels=levels, /fill contour, dem, levels=levels, /overplot, /downhill, /follow filename = file_which('irreg_grid1.txt') grid = fltarr(3, file_lines(filename)) openr, lun, filename, /get_lun readf, lun, grid free_lun, lun loadct, 3 contour, grid[2, *], grid[0, *], grid[1, *], /irregular, xstyle=1, ystyle=1, /fill, /isotropic contour, grid[2, *], grid[0, *], grid[1, *], /irregular, /overplot ; Combining 3-dimensional plots window, /free, xsize=600, ysize=600 dem = read_binary(file_which('elevbin.dat'), data_dims=[64, 64], data_type=1) print, !p.t surfr, ax=10, az=45 print, !p.t contour, dem, /t3d, levels=findgen(20) / 19. * max(dem), xstyle=1, ystyle=1 convec = read_binary(file_which('convec.dat'), data_dims=[248, 248]) surfr, ax=30, az=50 print, !p.t window, /free, title='3D CONTOUR plot example', xsize=600, ysize=600 surface, convec, /t3d, charsize=2.0 contour, convec, zvalue=255, /t3d, /noerase, /fill, charsize=2.0 ; Maps ; simple Mercator projection window, /free, title='Mercator projection', xsize=600, ysize=400 map_set, /mercator map_continents, color='80B0FF'x, /fill map_continents, /rivers, color='ff0000'x map_grid ; simple Stereographic projection window, /free, title='Stereographic projection', xsize=600, ysize=400 map_set, /stereographic map_continents, color='80B0FF'x, /fill map_continents, /rivers, color='ff0000'x map_grid window, /free, title='World temperature', xsize=600, ysize=400 device, decomposed=0 loadct, 3 map_set, /mercator temp = read_image(file_which('worldtmp.png')) temp = map_patch(shift(temp, 180, 0), xstart=startx, ystart=starty) tvscl, temp, startx, starty map_continents, color=0, thick=2 ; Polygonal meshes ; load cow mesh; x, y, z, and polylist are in save file restore, filename=file_which('cow10.sav'), /verbose print, polylist[0:19] ; massage data vertices = transpose([[x], [y], [z]]) help, vertices nTriangles = mesh_validate(vertices, polylist) ; clean up print, nTriangles print, mesh_surfacearea(vertices, polylist) window, /free, title='Mesh', xsize=600, ysize=600 scale3, xrange=[-0.5, 0.5], yrange=[-0.5, 0.5], zrange=[-0.5, 0.5], ax=90, az=0 im = polyshade(vertices, polylist, xsize=600, ysize=600, /t3d) tv, im ; Vector fields restore, file_which('globalwinds.dat'), /verbose vel, u, v, nvecs=600 velovect, rebin(u, 64, 32), rebin(v, 64, 32), rebin(x, 64), rebin(y, 32), font=1, $ xticks=4, xtickv=[-180, -90, 0, 90, 180], $ yticks=4, ytickv=[-90, -45, 0, 45, 90] ; Volumes window, /free, title='Mesh', xsize=600, ysize=600 scale3, xrange=[-0.5, 0.5], yrange=[-0.5, 0.5], zrange=[-0.5, 0.5], ax=90, az=0 im = polyshade(vertices, polylist, xsize=600, ysize=600, /t3d) tv, im head = bytarr(80, 100, 57) openr, lun, file_which('head.dat'), /get_lun readu, lun, head free_lun, lun window, xsize=300, ysize=300, /free scale3, xrange=[0, 79], yrange=[0, 99], zrange=[0, 56] headIm = voxel_proj(head) tv, headIm window, xsize=300, ysize=300, /free scale3, xrange=[0, 79], yrange=[0, 99], zrange=[0, 56] headCutIm = voxel_proj(head, cutting_plane=[0., 1., 0., -50.]) tv, headCutIm restore, file_which('cduskcD1400.sav') help, density window, xsize=300, ysize=300, /free scale3, xrange=[0, 29], yrange=[0, 29], zrange=[0, 14] blackhole = voxel_proj(density, /interpolate) tvscl, blackhole rgbo = bytarr(256, 2) rgbo[*, 0] = bindgen(256) ; color rgbo[200: *, 1] = 255B ; opacity window, xsize=300, ysize=300, /free scale3, xrange=[0, 29], yrange=[0, 29], zrange=[0, 14] blackhole = voxel_proj(density, rgbo, /interpolate) tv, blackhole isosurface, density, 80, verts, conn window, xsize=300, ysize=300, /free scale3, xrange=[0, 29], yrange=[0, 29], zrange=[0, 14] p = polyshade(verts, conn, /t3d) tv, p ; Animation .run mg_animation .run mg_mj2_animation mj2_player ; Graphics help, /device originalDevice = !d.name set_plot, 'ps' device, filename='surface.ps' device, xsize=4, ysize=3, /inches surface, dist(20) ; or whatever direct graphics is desired device, /close_file set_plot, originalDevice originalDevice = !d.name set_plot, 'ps' device, filename='postscript-offset-portrait.ps' device, xsize=5, ysize=2, /inches device, xoffset=2, yoffset=2, /inches plot, sin(findgen(360 * 3) * !dtor), xstyle=9, ystyle=8 device, /close_file device, filename='postscript-offset-landscape.ps' device, /landscape device, xsize=5, ysize=2, /inches device, xoffset=2, yoffset=10, /inches plot, sin(findgen(360 * 3) * !dtor), xstyle=9, ystyle=8 device, /close_file set_plot, originalDevice endo = read_image(file_which('endocell.jpg')) originalDevice = !d.name set_plot, 'ps' device, filename='endocell.ps', xsize=6.15, ysize=4.16 / 2, /inches device, /color, bits_per_pixel=8 loadct, 0 tv, endo, 0, 0, xsize=6.15 / 2, ysize=4.16 / 2, /inches loadct, 5 tv, endo, 6.15 / 2, 0, xsize=6.15 / 2, ysize=4.16 / 2, /inches device, /close_file set_plot, originalDevice originalDevice = !d.name set_plot, 'printer' ok = dialog_printersetup() surface, dist(20) ; or whatever direct graphics is desired device, /close_document set_plot, originalDevice originalDevice = !d.name set_plot, 'z' device, set_resolution=[400, 300] surface, dist(20) ; or whatever direct graphics is desired device, /close im = tvrd() set_plot, originalDevice data = randomu(1234567L, 100, 100) for i = 0, 2 do data = smooth(data, 5, /edge_truncate) y = 45 dims = [500, 400] device, decomposed=1 window, /free, xsize=dims[0], ysize=dims[1] shade_surf, data, /save, charsize=1.5, zrange=[0., 1.] plots, findgen(100), fltarr(100) + y, data[*, y] + 0.01, /t3d, thick=2., color='00ffff'x orig_device = !d.name set_plot, 'z' device, set_resolution=dims, set_pixel_depth=24 shade_surf, data, /save, charsize=1.1, zrange=[0., 1.], color='ffffff'x plots, findgen(100), fltarr(100) + y, data[*, y] + 0.01, /t3d, thick=2., color='00ffff'x im = tvrd(true=1) set_plot, orig_device window, /free, xsize=dims[0], ysize=dims[1] device, decomposed=1 tv, im, true=1