结合使用对象图形与新型图形
16756 为本文评分:
暂无评分
结合使用对象图形与新型图形
匿名作者 2014年12月11日 星期四
IDL 拥有一些出色的图形功能——我今天想讨论的是如何将对象图形和IDL(新型)图形结合使用。
对象图形非常适合那些在创建和操作图形时希望获得高级控制的用户。您可以创建单独的图形和形状,将它们放入可缩放和旋转的模型中,然后将任意数量的模型放入视图中。这允许您对图形场景中的所有元素进行离散且高级的控制。
IDL 图形非常适合以多种方式绘制数据,包括散点图、直方图和气泡图。这些图形带有相应的方法,允许您将图形窗口复制到变量中、将图形保存为各种文件格式,或者使用关键字更改图形的属性。
这两种方法各有优势,那么如何将它们结合起来以利用两者的优势呢?幸运的是,IDL 的设置使得这一过程相当简单。
IDL 图形窗口可与对象图形视图(IDLgrView)互换使用。在下面的示例中,我将展示如何创建一个图形模型,然后将其放入 IDL 图形窗口中。由于我们同时使用这两种图形包,现在可以轻松地旋转、缩放和更改对象图形层次结构的属性,同时也能使用新型图形附带的方法和属性。
只需记住在更改后使用 Refresh 方法来更新显示!
pro grahpics_mixing
compile_opt idl2
;创建多边形图形原子并将其添加到模型中。
x = [-0.8, 0.0, 0.8]
y = [-sqrt(3)/3, sqrt(2)/2, -sqrt(3)/3]
oPoly = IDLgrPolygon(x, y)
oModel = IDLgrModel()
oModel.Add, oPoly
;创建显示窗口,添加模型并刷新。
win = WINDOW(WINDOW_TITLE="我的窗口", $
DIMENSIONS=[600,400])
win.Add, oModel
win.Refresh
;旋转模型,从而旋转多边形。
for i=0, 179 do begin
oModel.Rotate, [0, 0, 1], 2
win.Refresh
endfor
;创建一个视频对象并添加视频流,将下一部分保存为 mp4。
vid = IDLffVideoWrite('video.mp4', format='mp4')
framerate = 24
dims = win.dimensions
stream = vid.addvideostream(dims[0],dims[1],framerate,codec='mpeg4')
;彩虹色表
ctable = transpose(colortable(13))
;逐步遍历色表,每次处理一对RGB值,设置多边形的颜色,
;更新窗口,并保存到视频流。
for i=0, 255 do begin
oPoly.SetProperty, COLOR=ctable[*, i]
win.Refresh
capture = win.CopyWindow()
timestamp = vid.put(stream, capture)
endfor
;销毁视频对象以完成写入。
vid.Cleanup
end
运行此代码后,将在 IDL 的当前目录中生成一个三角形颜色变化的 .mp4 格式视频。