IDL培训对象图形篇PPT.ppt

上传人:牧羊曲112 文档编号:6508034 上传时间:2023-11-07 格式:PPT 页数:30 大小:254.49KB
返回 下载 相关 举报
IDL培训对象图形篇PPT.ppt_第1页
第1页 / 共30页
IDL培训对象图形篇PPT.ppt_第2页
第2页 / 共30页
IDL培训对象图形篇PPT.ppt_第3页
第3页 / 共30页
IDL培训对象图形篇PPT.ppt_第4页
第4页 / 共30页
IDL培训对象图形篇PPT.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《IDL培训对象图形篇PPT.ppt》由会员分享,可在线阅读,更多相关《IDL培训对象图形篇PPT.ppt(30页珍藏版)》请在三一办公上搜索。

1、IDL 高级培训对象图形篇,对象图形篇 概述,Basic 对象图形是IDL引入面向对象编程概念后出现的。面向对象编程的基础是对象类的使用。对象类允许程序员将数据和方法封装成为一个包,称之为对象。一个对象类可以反复使用而每次使用都封装不同的数据。IDL里对象类的实现主要是用一组预建的对象类构成对象图形系统。对象图形系统是一个IDL内建的对象类库,可用于创建场景。对象类也可以用IDL编写以实现程序员自己的要求。程序员可以在IDL环境中用传统的过程和函数的编写方法加上对象特性编写自己的对象模块。,对象图形篇 概述,Direct Graphics vs.Object GraphicsDirect Gr

2、aphics:创建2D图形有优秀表现,如:X-Y plot,contours,mapping等 可以在命令行使用,简单、快速 图形创建命令通常连同坐标系一起创建 图形生成时,针对当前图形设备 图形生成并输出后,不可修改或再用。如果需要修改或向其他设备输出,必须重新输出。后输出的项目总在先输出的项目的“上面”Object Graphics:硬件加速的3D场景显示,灵活,交互性强 对象图形系统主要以程序方式使用 图形对象是功能性封装的。即独立的对象包含自己的方法,操作自己的数据 图形输出没有当前设备的概念,图形对象为层次结构,并使用输出目标概念 图形创建后,数据及其属性驻留内存,便于修改,反复使用

3、 对象图形驻留内存,因此在退出时要释放内存,避免内存泄漏,对象图形篇 内容,LIVE_TOOLS工具集 一组预建的IDL组件应用程序,使用IDL的对象图形系统,可以构造高质量的可交互的场景 每一个LIVE工具既可以做为单独的应用程序使用,也可以做为组件用于编程 LIVE工具可以既可以使用鼠标操纵,也可以编程操纵图形对象系统(IDLxxYyyy)一组预建的对象类,可用于构造高质量的2D、3D场景 使用最新的图形硬件加速技术 采用灵活的结构,可以多场景输出 使用IDL的过程或函数构造图形对象的层次结构 图形创建后,场景可以很容易操纵、修改创建自己的图形对象类 利用IDL的面向对象编程概念和方法,程

4、序员可以创建自己的对象类,对象图形篇 LIVE_TOOLS,LIVE_TOOLS共有15个例程,包括创建图形、图形文件输出、打印输出、标注以及控制。,对象图形篇 LIVE_TOOLS,Stand-Alone LIVE Tools LIVE_PLOT,LIVE_CONTOUR,LIVE_SURFACE,LIVE_IMAGE 完整的IDL组件例程,窗口调整、属性设置均可通过鼠标操纵。可以从命令行直接运行。sincurve=sin(findgen(360)*!dtor)live_plot,sincurve 可以通过调用时设置关键字参数,调整交互界面 live_plot,sincurve,/no_to

5、olbar,/no_statusLIVE_OPLOT 向已经创建的LIVE窗口中叠加,只有适合已有坐标系的数据才会加入 sincurve=sin(findgen(360)*!dtor)live_plot,sincurve for i=0.9,0.1,-0.1 do live_oplot,sincurve*I,对象图形篇 LIVE_TOOLS,Multiple LIVE Tools and LIVE_OPLOT 完当同时启动多个LIVE时,LIVE_OPLOT就不知道应该向哪一个窗口叠加。REFERENCE_OUT=ref 返回窗口信息,结构数据。其中win字段即为窗口标识。WINDOW_IN=

6、ref.win 指定叠加的窗口 sincurve=sin(findgen(360)*!dtor)live_plot,sincurve,reference_out=ref for i=0.9,0.1,-0.1 do live_oplot,sincurve*i,window_in=ref.win x=1.2,2.0,7.7,4.5,23.4 y=3.0*x+2.0 new_x=3.9,6.9,12.0,15.6 new_y=interpol(x,y,new_x)pProps=color:Light Blue,linestyle:2,symbol_size:0.05,symbol_type:2 pS

7、tyle=live_style(plot,GRAPHIC_PROPERTIES=pProps)live_plot,y,INDEPENDENT=x,REFERENCE_OUT=refout2,STYLE=pStyle live_oplot,new_y,INDEPENDENT=new_x,WINDOW_IN=refout2.win,对象图形篇 LIVE_TOOLS,LIVE_STYLE(contour|image|plot|surface,)设置LIVE的窗口风格。可以创建一个包括所有输出窗口的图形属性的结构数据,然后传给所有准备创建的LIVE。IDL的灵活的结构数据的特点使得每一个LIVE只保留

8、与之相关的字段值并修改之。a=findgen(40)a=sin(a/5)/exp(a/50)wave=a#a gp=bottom:Blue,color:Brown,shading:1,style:2 surfstyle=live_style(surface,GRAPHIC_PROPERTIES=gp)live_surface,wave,STYLE=surfstyle,对象图形篇 LIVE_TOOLS,Multiple Plots in One Window 通过设置图形在窗口中的位置和大小,可以实现在一个窗口中同时显示多个图形。LOCATION:图形在窗口中的位置,normal坐标DIMENS

9、ION:图形显示的大小,normal坐标 a=findgen(40)a=sin(a/5)/exp(a/50)wave=a#a live_image,wave,REFERENCE_OUT=refout,$LOCATION=0.0,0.5,DIMENSIONS=1.0,0.5 live_contour,wave,WINDOW_IN=refout.win,$LOCATION=0.0,0.0,DIMENSIONS=0.5,0.5 live_surface,wave,WINDOW_IN=refout.win,$LOCATION=0.5,0.0,DIMENSIONS=0.5,0.5,对象图形篇 LIVE_

10、TOOLS,LIVE Annotations LIVE_TEXT,LIVE_RECT,LIVE_LINE 这些工具可以为一个已创建的LIVE在窗口内的任意位置添加标注。并可以在添加以后仍然可以通过鼠标操纵修改。normal坐标。data=alog10(findgen(100)+1)live_plot,data,REFERENCE_OUT=refout live_text,对数曲线,WINDOW_IN=refout.win,$LOCATION=.5,.9,ALIGNMENT=0.5,$FONTNAME=隶书,FONTSIZE=18,COLOR=Blue live_rect,WINDOW_IN=r

11、efout.win,COLOR=Light Green,$LOCATION=.2,.87,DIMENSION=.6,.1 live_line,WINDOW_IN=refout.win,$LOCATION=.2,.05,DIMENSION=.6,0,$/ARROW_START,/ARROW_END,对象图形篇 LIVE_TOOLS,LIVE_DESTROY,/ENVIRONMENT 关闭所有LIVE,释放所有与之相关的内存。LIVE_DESTROY,WINDOW_IN=ref.win,关闭ref.win指定的LIVE或其中的图形元素。灵活使用REFERENCE_OUT和WINDOW_IN,就可以

12、去掉窗口内的指定图形元素。data=alog10(findgen(100)+1)live_plot,data,REFERENCE_OUT=refoutlive_text,对数曲线,LOCATION=.5,.9,ALIGNMENT=0.5,$FONTNAME=隶书,FONTSIZE=18,COLOR=Blue,$WINDOW_IN=refout.winlive_rect,LOCATION=.2,.87,DIMENSION=.6,.1,$COLOR=Light Green,WINDOW_IN=refout.winlive_line,LOCATION=.2,.05,DIMENSION=.6,0,$W

13、INDOW_IN=refout.win,/ARROW_START,/ARROW_END;add a line that will be destroyedlive_line,LOCATION=.5,.5,DIMENSIONS=0.0,.25,$WINDOW_IN=refout.win,REFERENCE_OUT=linerefoutwait,3live_destroy,linerefout.graphic,WINDOW_IN=refout.winwait,3live_destroy,refout.graphicwait,3live_destroy,WINDOW_IN=refout.win,对象

14、图形篇 LIVE_TOOLS,Embedded LIVE Tools 除可以做为独立的例程使用之外,LIVE工具可以嵌入到IDL组件程序中,不仅保持原有的功能,还与IDL的其他组件共同使用,PARENT_BASE LIVE_TOOLS,PARENT_BASE=base_id 在应用程序中使用LIVE,通常为LIVE创建一个BASE将其嵌入。Event Handling 在widget的用户数据里,通常必须保存LIVE的ref,这样在整个程序运行期间就可以根据事件的需求对LIVE进行控制。LIVE_CONTROL 在事件处理程序中,所有需要对LIVE进行控制的请求都通过LIVE_CONTROL实

15、现。其功能类似widget_control。特别注意:任何时刻需要更新LIVE的数据时,只能用一个与初始化该LIVE时的数据变量同名的变量来传递数据。LIVE_INFO 用于获取指定的LIVE的属性,返回一个结构数据。功能类似widget_info。LIVE_DESTROY 当widget结束时,必须将LIVE释放。,对象图形篇 对象图形类(IDLgrYyyy),概述 IDL的对象图形系统是一个内建的对象类库,通过选择适当的内建对象、构造层次结构来创建图形场景。层次结构描述各种图形元素在3D中的层次以及各层之间的关系。IDL的图形对象类命名方式为IDLgrYyyy,其中Yyyy标识类的名称。I

16、DL的图形对象类如下:Container Objects:IDLgrScene,IDLgrView,IDLgrModel IDLgrViewgroup,IDL_Container Graphical Atom Objects:IDLgrPlot,IDLgrPolyline,IDLgrPloygon,IDLgrContour,IDLgrSurface,IDLgrVolume,IDLgrImage,IDLgrAxis,IDLgrText,IDLgrLight Destination Objects:IDLgrWindow,IDLgrPrinter,IDLgrBuffer,IDLgrClipboar

17、d,IDLgrVRML Attrigute:(outside the hierarchy,be used when rendering graphic objects)IDLgrFont,IDLgrPalette,IDLgrSymbol Helper:(outside the hierarchy,alter data in useful ways or provide other services)IDLgrTessalator,Trackball Composite Objects:IDLgrColor,IDLgrLegend,对象图形篇 对象图形类(IDLgrYyyy),The Objec

18、t Graphics Hierarchy,对象图形的层次结构,对象图形篇 对象图形类(IDLgrYyyy),Create Hierarchy 对象图形场景必须以层次结构创建。基本的层次结构创建如下:1.Creation of an IDLgrView object 2.Creation of an IDLgrModel object 3.Creation of a Graphical Atom 4.Add the Model to the View 5.Add Graphical Atom(s)to the Model 6.Creating a Destination Object 7.Dra

19、wing the View to the Destination Object最简单的对象图形例程:oView=obj_new(IDLgrView,VIEWPLANE_RECT=-10,-2,380,4)oModel=obj_new(IDLgrModel)oPlot=obj_new(IDLgrSurface,sin(findgen(360)*!DtoR),THICK=3)oView-Add,oModel oModel-Add,oPlot oWindow=obj_new(IDLgrWindow,TITLE=The Simplest OG Plot)oWindow-Draw,oView,对象图形篇

20、 对象图形类(IDLgrYyyy),将IDLgrView或IDLgrScenen嵌入IDL的Widget程序 在建立了对象图形层次结构之后,可以将它输出到一个合法的目标类对象,比如一个Window。Widget_draw就可以成为一个这样的Window。基本方法 tlb=widget_base()draw=widget_draw(tlb,uname=draw,GRAPHICS_LEVEL=2$,xsize=512,ysize=512,retain=2)widget_control,tlb,/realize widget_control,draw,get_value=oWin oWin-draw

21、,oView注意:GRAPHICS_LEVEL=2和retain=2,对象图形篇 对象图形类(IDLgrYyyy),图形对象操作概述对象创建:任何一个对象必须从一个对象类中创建 oOBJ=Obj_new(IDLgrYyyyy)对象属性:每个对象都有唯一的一组属性描述对象的特点。可以在创建对象时指定,也可以在创建后修改。oOBJ=Obj_new(IDLgrYyyyy,color=255,0,0)对象方法:每个对象都有一组自己的内建方法,用于操纵数据和属性。oObj-GetProperty 获取对象的属性 oObj-SetProperty 设置对象的属性 oObj-add oObj-remove对

22、象注销:对象是驻留内存的,因此当一个图形对象不再使用时,应该注销,从内存中释放。在应用程序的开发中尤其重要。obj_destroy,oOBJ,对象图形篇 对象图形类(IDLgrYyyy),图形坐标 对象图形系统中的图形坐标是通过设置IDLgrView的属性实现的。obj=OBJ_NEW(IDLgrView,UNITS=0|1|2|3,DIMENSIONS=width,height,LOCATION=x,y,VIEWPLANE_RECT=x,y,width,height,ZCLIP=near,far)UNITS:设置坐标系 0:device(default),1:inches,2:centime

23、ters,3:normalVIEWPLANE_RECT和ZCLIP:设置坐标系范围 当使用normal坐标系时:3个坐标轴的默认范围均为-11 应对该view下的grAtom(s)的数据进行坐标变换DIMENSIONS和LOCATION:设置图形的大小和位置,对象图形篇 对象图形类(IDLgrYyyy),图形变换 图形变换指对图形的旋转、平移和缩放。对象图形系统中的图形变换是通过设置IDLgrModel的变换矩阵实现的。IDLgrModel一经创建,便产生一个44的变换矩阵,图形的变换操作是通过重新设置这个矩阵的值实现的。设置方法:1.通过IDLgrModel的rotate、translate

24、和scale方法设置。2.通过IDLgrModel的transform属性设置。恢复初始状态:oModel-reset,对象图形篇 对象图形类(IDLgrYyyy),图形变换旋转:1.oModel-Rotate,x,y,z,Angle 2.oModel-GetProperty,transform=t oModel-SetProperty,transform=t*newT Rx=1.0,0.0,0.0,0.0,$0.0,cosa,-sina,0.0,$0.0,sina,cosa,0.0,$0.0,0.0,0.0,1.0 Ry=cosa,0.0,sina,0.0,$0.0,1.0,0.0,0.0,

25、$-sina,0.0,cosa,0.0,$0.0,0.0,0.0,1.0 Rz=cosa,-sina,0.0,0.0,$sina,cosa,0.0,0.0,$0.0,0.0,1.0,0.0,$0.0,0.0,0.0,1.0,对象图形篇 对象图形类(IDLgrYyyy),图形变换平移:1.oModel-Translate,dx,dy,dz 2.oModel-GetProperty,transform=t oModel-SetProperty,transform=t*newT transT=1.0,0.0,0.0,dx,$0.0,1.0,0.0,dy,$0.0,0.0,1.0,dz,$0.0,0.

26、0,0.0,1.0,对象图形篇 对象图形类(IDLgrYyyy),图形变换比例缩放:1.oModel-Scale,sx,sy,sz 2.oModel-GetProperty,transform=t oModel-SetProperty,transform=t*newT scaleT=sx,0.0,0.0,0.0,$0.0,sy,0.0,0.0,$0.0,0.0,sz,0.0,$0.0,0.0,0.0,1.0,对象图形篇 对象图形类(IDLgrYyyy),grAtom中数据的normal坐标转换 当IDLgrView使用normal坐标时,应该对grAtom(s)中的数据进行坐标转换以适应新的坐

27、标系。oAtom=obj_new(IDLgrYyyy,data)Obji-GetProperty,XRANGE=xr,YRANGE=yr,ZRANGE=zrxc=-xr0/(xr1=xr0),1/(xr1-xr0)yc=-yr0/(yr1=yr0),1/(yr1-yr0)yc=-zr0/(zr1=zr0),1/(zr1-zr0)Obji-SetProperty,XCOORD_CONV=xc,YCOORD_CONV=yc,ZCOORD_CONV=zc 事实上,在grAtom内部的计算方法为:normalized=so+s1*data 上述公式的转换结果为为01,如果IDLgrView中的坐标不是

28、01,则可以根据需要对xc0,yc0,zc0进行计算,可以使图形在适当的位置显示。如:data的值域为01,坐标为-11,则xc0=xc0-0.5即可。,对象图形篇 对象图形类(IDLgrYyyy),Trackball Object 真正的交互式图形显示必须能让用户使用鼠标来操纵图形。obj=OBJ_NEW(TrackBall,Center,Radius,AXIS=0|1|2)其中:center为鼠标作用区域的中心点、radius为鼠标作用区域的半径,均为device坐标。axis标识旋转轴,0,1,2分别对应x,y,z轴,默认2。注意:(1)TrackBall为Helper类,既无父类也无子

29、类。因此,不能加入到任何一种图形对象类,通常只做为widget的用户数据传递。(2)TrackBall的事件一般只通过widget的事件处理程序处理。TrackBall事件处理一般方法:TLB:oTrack=obj_new(Trackball,200,200,200)EH:widget_control,event.top,get_uvalue=pState bHaveXform=(*pState).oTrack-Update(event,TRANSFORM=TrackXform)if(bHaveXform)then begin(*pState).oModel-GetProperty,TRANS

30、FORM=ModelXform(*pState).oModel-SetProperty,TRANSFORM=ModelXform#TrackXform(*pState).oWindow-Draw,(*pState).oView endif,对象图形篇 对象图形类(IDLgrYyyy),Light Object 光源是IDL图形对象grAtom类之一,它可以加入到对象图形的层次结构中,从而可以随对象图形的变换而变换(如:旋转、平移和缩放)。IDL默认为环绕光,这会使3D图形看起来象2D图形一样。通过设置光源对象的属性,可以看到真正的3D图形。obj=OBJ_NEW(IDLgrLight,TYPE

31、=0|1|2|3,LOCATION=x,y,z,COLOR=r,g,b)其中:TYPE为光源类型。0为环绕光,1为点光源,2为平行光,3为聚光灯。LOCATION为光源位置;COLOR为光源颜色。多光源 由于光源可以随对象图形变换,因此为了从各个角度都能清楚地看到图形,就必须设置多个光源。一个IDLgrView里最多可以放置8个光源。让光源停在特定的位置 单独创建一个包含IDLgrLight的IDLgrModel,就可以控制它的动作。,对象图形篇 对象图形类(IDLgrYyyy),Color Palettes Object 颜色的使用总是一件麻烦的事,在对象图形系统中,这个问题得到了较好的解决

32、。在对象图形系统中,无论以何种方式加载颜色表,IDL总是把颜色表的r,g,b值拷贝到目标对象的颜色表中中。因此,索引表方式或真彩表方式的差别只是颜色的检索方式的差别,都是静态颜色模式,不会出现动态颜色模式。创建颜色模板对象的两种方法:(1)obj=OBJ_NEW(IDLgrPalette,aRed,aGreen,aBlue)(2)obj=OBJ_NEW(IDLgrPalette)obj-loadct,33注意:(1)IDLgrPalette不是grAtom类,因此不能加入到IDLgrModel里。它只能用于目标类对象或用于grAtom类的PALETTE属性。(如IDLgrImage)(2)注意

33、目标类对象的color_model。,对象图形篇 对象图形类(IDLgrYyyy),Text and Font Objects 对图形输出而言,文本标注从来都是基本要求之一。IDL提供高质量、可伸缩的文本用于输出。这些标注可以象图形一起加入层次结构,从而可以和其他图形一起重写、旋转、平移等。当然,也可以选择ONGLASS,这样你总可以在屏幕上看见它们。IDLgrText oText=obj_new(IDLgrText,string,FONT=oFont,/ONGLASS$,LOCATION=-1,0,0,COLOR=0,255,0$,ALIGNMENT=0.5,vertical_alignme

34、nt=0.5)缺省设置:左对齐,与x轴平行,写在原点。FONT属性设置字体,但该字体必须是IDLgrFont对象。IDLgrFont oFont=obj_new(IDLgrFont,隶书,SIZE=36)可以使用中文TrueType字体,对象图形篇 对象图形类(IDLgrYyyy),Outputting Objects 对象图形系统同样支持多种目标类输出,包括:printer,图形文件等。1.输出到打印机 打印机是一个目标对象类,输出的一般方法如下:oPrinter=Obj_New(IDLgrPrinter,/LANDSCAPE,PRINT_QUALITY=3)status=dialog_pr

35、intersetup(oPrinter)if status eq 0 then return oPrinter-Draw,oView;suppose we have create a view oPrinter-NewDocument;ouput and finish print job 2.输出到图形文件 抓取当前IDLgrWindow的内容,输出到图形文件;suppose we have create a window oWindowImage=oWindow-Read();Get the data from the image oWindowImage-GetProperty,DATA=

36、img write_jpeg,og_out.jpg,img,TRUE=1,对象图形篇 对象图形类(IDLgrYyyy),Images and Texture Mapping 将一幅地形图(image)覆盖在由高程数据形成的曲面(surface)上,是很有实用价值的。IDLgrSurface和IDLgrPolygon都具有将一幅地形图与高程数据曲面适当地组合的能力。oImage=obj_new(ILDgrImage,data)oSurface=obj_new(IDLgrSurface,data,texture_map=oImage),对象图形篇 创建自己的图形对象类,在IDL引入了面向对象设计思

37、想后,程序员使用IDL创建自己的图形对象类成为可能。创建新的对象类的步骤 1.为类命名 每当创建一个类对象时,IDL总是用对象类的名标识,因此类名必须唯一。2.定义类的属性(data)一个对象的所有必要的信息必须在类的数据部分适当地定义。对象类的数据定义使用IDL的命名结构,结构的名就是类名,并且使用objname_define.pro存储。3.定义类的行为(methods)一个对象类的行为通常称为方法,使用IDL的过程和函数定义。不同点在于命名和数据传递。命名:objname:methodname 数据传递:自动 方法的定义既可以与数据定义使用一个文件;也可以为每一个方法单独使用一个文件,文件命名必须为objname_method.pro实例分析:imageobj_define.pro,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号