-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmk3dmodeloverflow.pro
114 lines (81 loc) · 2.8 KB
/
mk3dmodeloverflow.pro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
if keyword_set(bval) then begin
dx = xx[1]-xx[0]
dy = yy[1]-yy[0]
dz = zz[1]-zz[0]
bx = bgrid[*,*,*,0]
by = bgrid[*,*,*,1]
bz = bgrid[*,*,*,2]
bmag = sqrt(bx*bx+by*by+bz*bz)
shade_volume,bmag,bval,vert,poly
vert[0,*]=vert[0,*]*dx+xx[0]
vert[1,*]=vert[1,*]*dy+yy[0]
vert[2,*]=vert[2,*]*dz+zz[0]
oSurface=obj_new(keyword_set(wireframe)? "IDLgrPolyline" : $
"IDLgrPolygon",data=vert,polygons=poly,color=[64,0,0])
oModel->add,oSurface
endif
if keyword_set(jval) then begin
jmag = sqrt(vecmag2(mkjg(data)))
shade_volume,jmag,jval,vert,poly
xx = (xx(0:data.grid.npts(0)-3)+xx(1:data.grid.npts(0)-2))/2
yy = (yy(0:data.grid.npts(1)-3)+yy(1:data.grid.npts(1)-2))/2
zz = (zz(0:data.grid.npts(2)-3)+zz(1:data.grid.npts(2)-2))/2
dx = xx[1]-xx[0]
dy = yy[1]-yy[0]
dz = zz[1]-zz[0]
oSurface=obj_new(keyword_set(wireframe)? "IDLgrPolyline" : $
"IDLgrPolygon",data=vert,polygons=poly,color=[0,120,0])
oModel->add,oSurface
endif
if keyword_set(eval) then begin
epar =
emag = sqrt(vecmag2(epar)) ; sort epar!
shade_volume,emag,eval,vert,poly
xx = (xx(0:data.grid.npts(0)-3)+xx(1:data.grid.npts(0)-2))/2
yy = (yy(0:data.grid.npts(1)-3)+yy(1:data.grid.npts(1)-2))/2
zz = (zz(0:data.grid.npts(2)-3)+zz(1:data.grid.npts(2)-2))/2
dx = jxx[1]-jxx[0]
dy = jyy[1]-jyy[0]
dz = jzz[1]-jzz[0]
vert[0,*]=vert[0,*]*dx+xx[0]
vert[1,*]=vert[1,*]*dy+yy[0]
vert[2,*]=vert[2,*]*dz+zz[0]
oSurface=obj_new(keyword_set(wireframe)? "IDLgrPolyline" : $
"IDLgrPolygon",data=vert,polygons=poly,color=[0,120,0])
oModel->add,oSurface
endif
pro model_add_eparallel, oModel, bgrid, egrid, xx, yy, zz, eval=eval
wireframe=0
ex = egrid[*,*,*,0]
ey = egrid[*,*,*,1]
ez = egrid[*,*,*,2]
bx = bgrid[*,*,*,0]
by = bgrid[*,*,*,1]
bz = bgrid[*,*,*,2]
bmag = sqrt(bx*bx+by*by+bz*bz)
epar = (ex*bx+ey*by+ez*bz)/bmag
if (eval eq -99) then begin
mxepar = max(epar)
mnepar = min(epar)
val_epar = (mxepar-mnepar)/2.
val = 0.85*[-val_epar,val_epar]
print,frame,' epar [min,max]: [',mxepar,',',mnepar,']'
print,frame,' values - 0.333*[min,max]: [',val[0],',',val[1],']'
endif else begin
case n_elements(value) of
0: val=[-1e-5,1e-5]
1: val=[-1,1]*abs((value eq 1)? 1e-5 : value)
else: val=value[0:1]
endcase
endelse
for i=0,1 do begin
if val[i] ge max(epar) or val[0] le min(epar) then continue
shade_volume,epar,val[i],vert,poly
vert[0,*]=vert[0,*]*10./65.
vert[1,*]=vert[1,*]*10./65.
vert[2,*]=vert[2,*]*10./65.
oSurface=obj_new(keyword_set(wireframe)? "IDLgrPolyline" : $
"IDLgrPolygon",data=vert,polygons=poly,color=(i)? [64,0,0] : [0,0,64])
oModel->add,oSurface
endfor
end