?? chapter14happyyou3dscontrol.pro
字號(hào):
; Chapter14HappyYou3DSControl.pro
;----------------------------------------------------------------------------
function Chapter14HappyYou3DSControlMakeView, xdim, ydim, uval
aspect = xdim / float(ydim)
myview = [-1, -1, 2, 2] * sqrt(2)
if (aspect > 1) then begin
myview[0] = myview[0] - ((aspect-1.0)*myview[2])/2.0
myview[2] = myview[2] * aspect
end else begin
myview[1] = myview[1] - (((1.0/aspect)-1.0)*myview[3])/2.0
myview[3] = myview[3] / aspect
end
v = obj_new('IDLgrView', projection=2, eye=3, zclip=[1.5,-1.5], dim=[xdim,ydim],$
viewplane_rect=myview, color=[30,30,60], uvalue=uval )
gg = obj_new('IDLgrModel') & g = obj_new('IDLgrModel') & gg->add,g
b_verts = fltarr(3,5,5) & b_conn = lonarr(5,16) & vert_cols=bytarr(3,25)
j = 0
for i=0,15 do begin
b_conn[0,i] = 4 & b_conn[1,i] = j
b_conn[2,i] = j+1 & b_conn[3,i] = j+6
b_conn[4,i] = j+5 & j = j + 1
if (j MOD 5) EQ 4 then j = j + 1
end
k = 0
for i=0,4 do begin
for j=0,4 do begin
b_verts[0,i,j] = i & b_verts[1,i,j] = j & b_verts[2,i,j] = 0
if (k EQ 1) then begin
vert_cols[*, i+j*5] = [40,40,40]
end else begin
vert_cols[*, i+j*5] = [255,255,255]-40
end
k = 1 - k
end
end
b_verts[0,*,*] = (b_verts[0,*,*]-2)/2.0 & b_verts[1,*,*] = (b_verts[1,*,*]-2)/2.0
baseplate = obj_new('IDLgrPolygon', b_verts, poly=b_conn, $
shading=1, vert_colors=vert_cols )
g->add, baseplate & g->add, obj_new('IDLgrModel')
gg->add, obj_new('IDLgrLight',loc=[2,2,5],type=2,color=[255,255,255],intensity=.5)
gg->add, obj_new('IDLgrLight',type=0, intensity=.5, color=[255,255,255] )
v->add, gg
return, v
end
;----------------------------------------------------------------------------
pro Chapter14HappyYou3DSControlGetViewObjs,view,oWorldRotModel,oBasePlatePolygon,model_top
gg = view->get()
oWorldRotModel = gg->get(pos=0)
oBasePlatePolygon = oWorldRotModel->get(pos=0)
model_top = oWorldRotModel->get(pos=1)
end
;----------------------------------------------------------------------------
pro Chapter14HappyYou3DSControlCone,verts,conn,n
verts = fltarr(3,n+1)
verts[0,0] = 0.0 & verts[1,0] = 0.0 & verts[2,0] = 0.1
t = 0.0 & tinc = (2.*!PI)/float(n)
for i=1,n do begin
verts[0,i] = 0.1*cos(t) & verts[1,i] = 0.1*sin(t) & verts[2,i] = -0.1
t = t + tinc
end
conn = fltarr(4*n+(n+1))
i = 0 & conn[0] = n
for i=1,n do conn[i] = (n-i+1)
j = n+1
for i=1,n do begin
conn[j] = 3 & conn[j+1] = i
conn[j+2] = 0 & conn[j+3] = i + 1
if (i EQ n) then conn[j+3] = 1
j = j + 4
end
end
;----------------------------------------------------------------------------
function Chapter14HappyYou3DSControlMakeObj,type,thefont
oModel= obj_new('IDLgrModel')
case type of
0 : begin
s = obj_new('orb',color=[255,0,0],radius=0.1,shading=1,select_target=1)
str = "Sphere"
end
1 : begin
verts = [[-0.1,-0.1,-0.1],[0.1,-0.1,-0.1],[0.1,0.1,-0.1],[-0.1,0.1,-0.1], $
[-0.1,-0.1, 0.1],[0.1,-0.1, 0.1],[0.1,0.1, 0.1],[-0.1,0.1,0.1]]
conn=[[4,3,2,1,0],[4,4,5,6,7],[4,0,1,5,4],[4,1,2,6,5],[4,2,3,7,6],[4,3,0,4,7]]
s = obj_new('IDLgrPolygon',verts,poly=conn,color=[0,255,0],shading=0)
str = "Cube"
end
2 : begin
Chapter14HappyYou3DSControlCone,verts,conn,3
s = obj_new('IDLgrPolygon',verts,poly=conn,color=[0,255,255],shading=0)
str = "Tetrahedron"
end
3 : begin
Chapter14HappyYou3DSControlCone,verts,conn,20
s = obj_new('IDLgrPolygon',verts,poly=conn,color=[255,128,255],shading=1)
str = "Cone"
end
4 : begin
Chapter14HappyYou3DSControlCone,verts,conn,4
l = obj_new('IDLgrPolygon',verts*0.5,poly=conn,color=[100,255,100],shading=0)
oModel->add,l
l = obj_new('IDLgrPolyline',[[0,0,0],[0,0,-0.1]], color=[100,255,100])
oModel->add,l
s = obj_new('IDLgrLight',loc=[0,0,0],dir=[0,0,-1],cone=40, $
focus=0,type = 3,color=[100,255,100])
str = "Green Light"
end
5 : begin
e_height = BYTARR(64,64, /NOZERO)
OPENR, lun, /GET_LUN, demo_filepath('elevbin.dat', SUBDIR=['examples','data'])
READU, lun, e_height & FREE_LUN, lun
zdata = e_height / (1.7 * max(e_height)) + .001
xdata = (findgen(64)-32.0)/64.0
ydata = (findgen(64)-32.0)/64.0
s = obj_new('IDLgrSurface',zdata,shading=1,style=2,$
datax=xdata,datay=ydata,color=[150,50,150])
str = "Surface"
end
6 : begin
restore, filename='Chapter14HappyYou3DSColorTable.sav'
restore, demo_filepath('marbells.dat', subdir=['examples','data'])
image = bytscl(elev, min=2658, max=4241)
image = image[8:*, *] ; Trim unsightly junk from left side.
sz = size(image)
img = bytarr(3,sz[1],sz[2])
img[0,*,*]=ctab[0,image] & img[1,*,*]=ctab[1,image] & img[2,*,*]=ctab[2,image]
oTextureImage = obj_new('IDLgrImage', img, loc=[0.0,0.0],dim=[0.01,0.01],hide=1)
oModel->add, oTextureImage
xp=0.5 & yp=0.5*(72./92.) & zp=0.1
s=obj_new('IDLgrPolygon',[[-xp,-yp,zp],[xp,-yp,zp],[xp,yp,zp],[-xp,yp,zp]],$
texture_coord=[[0,0],[1,0],[1,1],[0,1]],texture_map=oTextureImage, $
color=[255,255,255] )
str = "Image"
end
7 : begin
Chapter14HappyYou3DSControlCone, verts, conn, 4
oModel->add, obj_new('IDLgrPolygon', verts*0.5, poly=conn, $
color=[255,255,255], shading=0 )
oModel->add, obj_new('IDLgrPolyline', [[0,0,0], [0,0,-0.1]],color=[255,255,255])
s = obj_new('IDLgrLight', loc=[0,0,0], dir=[0,0,-1], cone=20,focus=0, type=3, $
color=[255,255,255] )
str = "White Light"
end
8 : begin
s=obj_new('IDLgrText', "IDL", location=[0,0,0.001], align=0.5, $
color=[255,0,255], font=thefont[0] )
str = "Text"
end
9 : begin
N = 1024 ; number of time samples in data set
delt = 0.02; sampling interval in seconds
U = -0.3 + 1.0 * Sin(2*!Pi* 2.8 *delt*FIndGen(N)) $
+ 1.0 * Sin(2*!Pi*6.25*delt*FIndGen(N))+1.0*Sin(2*!Pi*11.0*delt*FIndGen(N))
V = fft(U) & signal_x = FINDGEN(N/2+1) / (N*delt)
mag = ABS(V[0:N/2]) & signal_y = 20*ALOG10(mag)
phi = ATAN(V[0:N/2]) ; phase of first half of v
xc=[-0.5,1.0/25.0] & yc=[0.5,1.0/80.0]
s=obj_new('IDLgrPolygon', [[-7,-90,-0.002],[30,-90,-0.002], [30,10,-0.002],$
[-7,10,-0.002]],color=[0,0,0], xcoord_conv=xc, ycoord_conv=yc )
oModel->add,s
s=obj_new('IDLgrAxis', 0, range=[0.0,25.0], xcoord_conv=xc, ycoord_conv=yc, $
location=[0,-80.0], color=[0,255,0], ticklen=5, /exact )
s->GetProperty,ticktext=tt
tt->setproperty,font=thefont[3]
oModel->add,s
s=obj_new('IDLgrAxis', 0, range=[0.0,25.0], /notext,xcoord_conv=xc, $
ycoord_conv=yc, location=[0.0,0.0], color=[0,255,0], ticklen=-5, /exact)
oModel->add,s
s=obj_new('IDLgrAxis', 1, range=[-80.0,0.0],xcoord_conv=xc, $
ycoord_conv=yc, color=[0,255,0], ticklen=1.0, /exact )
s->GetProperty,ticktext=tt
tt->setproperty,font=thefont[3]
oModel->add,s
s=obj_new('IDLgrAxis', 1, range=[-80.0,0.0], /notext,xcoord_conv=xc, $
ycoord_conv=yc, loc=[25.0,0.0], color=[0,255,0], ticklen=-1.0, /exact )
oModel->add,s
s=obj_new('idlgrplot',signal_x,signal_y,xcoord_conv=xc,ycoord_conv=yc, $
color=[0,255,255] )
str = "Plot"
end
10 : begin
x=indgen(200)
yexp = exp(-x*0.015)
ysexp = exp(-x*0.015)*sin(x*0.1)
dataz=fltarr(200,5)
dataz[*,0] = yexp & dataz[*,1] = yexp
dataz[*,2] = REPLICATE(1.1,200)
dataz[*,3] = ysexp-0.01 & dataz[*,4] = ysexp-0.01
datay = fltarr(200,5)
datay[*,0] = 0.0 & datay[*,1] = 1.0 & datay[*,2] = 0.0
datay[*,3] = 0.0 & datay[*,4] = 1.0
cbins = bytarr(3,60)
for i=0,59 do begin
color_convert, float(i)*4., 1., 1., r,g,b, /HSV_RGB
cbins[*,59-i] = [r,g,b]
end
colors = bytarr(3,200*5)
colors[0,0:599] = REPLICATE(80,3*200)
colors[1,0:599] = REPLICATE(80,3*200)
colors[2,0:599] = REPLICATE(200,3*200)
colors[*,600:799] = cbins[*,(ysexp+1.0)*30.0]
colors[*,800:999] = cbins[*,(ysexp+1.0)*30.0]
xc = [-0.5,1.0/200.0]*0.8
yc = [-0.5,1.0/1.0]*0.1 & zc = [-0.5,1.0/1.0]*0.4
s=obj_new('IDLgrAxis', 0, range=[0,200], color=[255,255,255], ticklen=0.2, $
xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc )
oModel->add,s
s=obj_new('IDLgrAxis', 2, range=[-1.,1.],color=[255,255,255], ticklen=4, $
xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc )
oModel->add,s
s=obj_new('IDLgrSurface', dataz, style=2, vert_colors=colors,datay=datay, $
max_value=1.05,shading=1,xcoord_conv=xc,ycoord_conv=yc,zcoord_conv=zc)
oModel->add,s
s=obj_new('IDLgrSurface', dataz, style=3, color=[0,0,0],datay=datay, $
max_value=1.05, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc )
str = 'Ribbon Plot'
end
11 : begin
dataz = dist(8)
dataz[1,*] = -1 & dataz[3,*] = -1 & dataz[5,*] = -1
dataz[*,1] = -1 & dataz[*,3] = -1 & dataz[*,5] = -1
dataz = dataz + 1
cbins=[ [255, 0,0],[255, 85,0],[255,170,0],[255,255,0],$
[170,255,0],[ 85,255,0],[ 0,255,0] ]
colors = bytarr(3, 8*8)
minz = min(dataz) & maxz = max(dataz)
zi = round((dataz - minz)/(maxz-minz) * 6.0)
colors[*,*] = cbins[*,zi]
xc = [-0.5,1.0/8.0]*0.4 & yc = [-0.5,1.0/8.0]*0.4 & zc = [0,1.0/8.0]*0.4
s=obj_new('IDLgrAxis',0,range=[0,8],major=5,color=[255,255,255],ticklen=0.2, $
/exact, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc )
oModel->add,s
s=obj_new('IDLgrAxis', 1, range=[0,8], major=5,color=[255,255,255], $
ticklen=0.2, /exact, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc )
oModel->add,s
s=obj_new('IDLgrAxis', 2, range=[0,8], major=5, color=[255,255,255], $
ticklen=0.2, /exact, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc )
oModel->add,s
s=obj_new('IDLgrSurface', dataz, STYLE=6, VERT_COLORS=colors,$
xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc )
str = 'Bar Plot'
end
endcase
oModel->Add, s
oModel->SetProperty, uvalue=str
return, oModel
end
;----------------------------------------------------------------------------
pro Chapter14HappyYou3DSControlNewMode, state, mode
widget_control, /hourglass
state.oModelMan->SetProperty, mode=mode
widget_control, state.wModelModeRadio, set_value=mode
end
;----------------------------------------------------------------------------
pro Chapter14HappyYou3DSControlAdd, state, oModel, as_child=as_child
if keyword_set(as_child) then begin
state.selected->add, oModel
endif else begin
state.oCurrentTopModel->add, oModel
endelse
state.oCurrentView->GetProperty, uvalue=view_uval
*(state.model_lists[view_uval.num]) = [oModel, *(state.model_lists[view_uval.num])]
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -