IDL语法基础

上传人:小*** 文档编号:242972379 上传时间:2024-09-13 格式:PPT 页数:50 大小:282.50KB
返回 下载 相关 举报
IDL语法基础_第1页
第1页 / 共50页
IDL语法基础_第2页
第2页 / 共50页
IDL语法基础_第3页
第3页 / 共50页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,IDL,语言基础,王志成,zcwang,2006.8.5,IDL,语言的特性,高级图像处理能力,交互式二维和三维图形技术,面向对象的编程方式,OpenGL,图形加速,量化可视化表现,成数学与统计学算法,灵活的数据输入输出方式,跨平台图形用户界面工具包,连接,ODBC,兼容数据库,多种程序连接工具,一、,IDL,基础,1.1,、,IDL,变量,变量定义,变量在使用前,无需说明类型。,变量的命名规则,变量名称必须以字母和下划线开头,可以包括字母、数字、下划线、美元符号,正确:,reade6_$file,only_8_bit,ComputerType,variables,_day_of_year,错误:,name.last,third%file,4th_list,$temp,变量数据类型,Byte,字节型,Int,有符号整数,Uint,无符号整数,Long,有符号长整型,Ulong,无符号长整型,Long64 64,位长整型,Float,浮点型,Double,双精度浮点型,Complex,复数,Dcomplex,双精度复数,String,字符串,0-32767,个字符,Struct,结构,Pointer,指针,Objref,对象的引用,数据类型的转换,数据类型,创建变量例子,数据类型转换函数,Byte,Var,=1B,thisVar,=,Byte(variable,),Int,Var,=1,thisVar,=,Fix(variable,),Long,Var,=1L,thisVar,=,Long(variable,),Long64,Var,=1LL,thisVar,=Long64(variable),Uint,Var,=1U,thisVar,=,Uint(variable,),Float,Var,=1.0,thisVar,=,Float(variable,),Double,Var,=1.0D,thisVar,=,Double(variable,),String,Var,=,thisVar,=,String(variable,),Pointer,Var,=,ptr_new,(),Object,Var,=,obj_new,(),1.2,、,IDL,数组,IDL,数组运算简介,IDL,面向矩阵的特性保证数组运算时不用进行循环。,IDL,中使用数组的两个最大优势体现在:,(1),数组操作比循环操作快得多,(2),数组语法比相对的循环语法更加精练,例子:对数组元素求和,Npts,=1000000L,Data=randomu(-1L,npts),Sum=,total(data,) IDL,数组操作语句,Sum=0.0,For i=0L,(npts-1L) do begin sum=,sum+datai,循环语句,数组的创建,(1),利用,创建。,(2),利用创建函数创建,Byte,bytarr,(),bindgen,(),Int,intarr,(),indgen,(),long,lonarr,(),lindgen,(),ulong,ulonarr,(),ulindgen,(),float,fltarr,(),findgen,(),double,dblarr,(),dindgen,(),string,strarr,(),sindgen,(),make_array,make_array(3,2,/byte),数组的存储格式,IDL,中数组元素的存储是按列进行的。按列存储的方式意味着连续的数组元素也将按顺序被存储,而且数组的第一维(列)变化的最快。,数组的下标,数组的下标可以是标量也可以是矢量。,进行下标操作时,如果下标超过了范围,则该下标被转换为在允许范围内的最小或最大的下标值。,1.3,、表达式和运算法则,表达式的书写规则,表达式结果的类型将由表达式右边变量的类型决定。,运算符,数学:,+-*/mod ,最大,逻辑:,Not,Eq,Ne,Le Lt,Ge,Gt,And Or,Xor,数组,:#,数组乘,(,列乘行,) #,矩阵乘,(,行乘列,),指针,:*,运算符的优先级,(),指针,数组,/ mod+- Not,逻辑,1.4,、数组运算,如果表达式中有一个变量是数组,结果也是数组,如果表达式左边是数组,右边是一个标量,则整个数组将被赋予该标量的值。,A=1,2,3,4 B=3,4,5,6,A+B, A*B,A=10.0 B=10.0,20.0,30.0,40.0,A+B,A*B,取大,(),、取小,(0,a=2,4,6,7 b=4,5,5,6,print, ab,关系运算符,eq,ne,le,lt,ge,gt,返回一个数字结果,其中真值用,1B,表示,假用,0B,表示。,关系运算符也可以作用于数组的自变量,如果两个自变量都是数组,那么关系运算符将依次作用于两个数组中每一对对应的元素。,a=1.0 b=2.0,help,a,gt,b,if (a,lt,b) then,print,True,a=5 b=bindgen(9),print,b,c=b le a,Print,c,a=2,4,6,8 b=3,4,5,6,print,a,gt,b,可以用于屏蔽数组中的某些值。,arr,=indgen(9) mask=,arr,ge,5 result=mask*,arr,1.5,数组操作函数,数组元素的数目,n_elements,函数返回数组中所有元素的数目:,arr,=findgen(32,32),print,n_elements(arr,),数组的大小和类型,size,函数返回一个长整型的矢量结果,包含了输入数组的大小和类型信息。可选关键字,n_dimensions,dimensions,type,tname,n_elements,分别返回维数、每维的大小、类型代码、类型名称和元素个数,arr,=dist(256),help,arr,print,size(arr,/dimension),print,size(arr,/type),print,size(arr,/tname,),print,size(arr,/n_elements,),最大值和最小值,max min,函数,arr,=dist(32),print,min(arr),max(arr,),总和,total,函数返回数组元素的总和,也可以添加可选变量来计算特定维度的元素总和。,total,函数还可以使用可选的关键字,cumulative,来计算累计的和。,arr,=indgen(3,3),print,total(arr,),arr,=indgen(9),print,total(arr,/cumulative),1.6,数组中元素的定位,查找符合条件的值,where,函数返回数组或数组表达式中非零元素的下标,使用,where,函数和逻辑表达式可以查找符合条件的值。,where,函数允许引入一个可选变量,count,来检查是否找到符合条件的值。,使用,where,函数时,数组使用一维下标,arr,=indgen(9)*10,index=,where(arr,gt,35),print,arrindex,1.7,改变数组的维度和大小,改变数组的大小,rebin,(),通过整数因子数组的大小,congrid,(),调整数组到任意大小,Arr,=20,30,40,resizeArr,=rebin(arr,9,/sample),conArr,=congrid(arr,9),conArr,=congrid(arr,10),1.8,结构,结构是由一组类型不同的常量、变量和数组组合而成的组合数据类型。结构中的每一个变量或者数组成为结构的成员。,结构分为匿名结构和署名结构两种,匿名结构是指没有名字的结构。如果在使用过程中,结构成员的个数和类型可能发生变化,一般使用匿名结构;否则使用署名结构。,匿名结构一般用于程序之间值的传递,署名结构主要用在事件结构中,1.8.1,匿名结构,创建:,结构变量,= ,成员,1,:表达式,1,,成员,2,:表达式,2,,,,成员,n,:表达式,n,赋值:,格式:结构变量,.,成员,=,表达式,调用:,结构变量,.,成员,=,表达式,1.8.2,署名结构,创建:,结构变量,=,结构名,成员,1:,表达式,1,,成员,2:,表达式,2, ,成员,n:,表达式,n,1.8.3,结构数组,结构数组可以使用已有的结构变量和函数,REPLICATE,创建,对于署名结构还可以使用结构名创建,其格式为:,格式,1,:结构数组名,= REPLICATE(,结构变量,,D1,,,,,D8 ),1.9,指针,指针的创建,指针变量,= PTR_NEW(,变量,),指针的调用,*指针变量,检测指针的有效性,result=,ptr_valid(ptr,),指针的释放,ptr_free,ptr,指针数组,p_arr,=ptrarr(d1,d2,d3,),二、编写,IDL,程序,2.1,、定义和编译程序,过程,(pro),过程一般将几个相关的操作加到一个程序模块中。,过程以,pro,开头,,end,结束,函数,(function),函数一般将一个操作加载到一个程序模块中,并返回结果,函数以,function,开头,,end,结束,并包括一个,return,语句返回结果,命名和编译源文件,命名一个,IDL,源文件的标志形式是在过程或函数名称后加上扩展名,.pro,过程和函数都可以通过,.compile,命令进行手动编译或是通过,IDL IDE,环境进行编译。,当需要时,过程和函数会在运行时自动编译,如果,IDL,调用的过程或函数之前未被编译过,则,IDL,会搜索路径下所有的文件夹以搜索源文件的名称。,2.2,控制语句,If,语句,if,条件,then,语句,if,条件,then begin,语句,endif,if,条件,then,语句,else,语句,if,条件,then begin,语句,endif,else begin,语句,endelse,Case,语句,case,语句根据一个标量的表达式来选择某个语句或语句块运行。,case,表达式,of,情况,1,:,情况,2,:语句,情况,3,:,begin,语句,end,else:,语句,endcase,当表达式和其中的某个情况匹配,相应的语句被执行,,case,语句结束,如果没有匹配的情况,那么执行,else,下的语句,如果没有,else,语句,将会发生错误,建议在,case,语句中都加上,else,test_case.pro,For,语句,for,语句每次循环执行一个语句或语句块,for i=v1,v2 do,语句,for i=v1,v2, inc do,语句,for i=v1,v2,inc do begin,语句,endfor,默认条件下增量为,1,,也可以设定增量,While,语句,当特定的条件为真,,while,语句执行单个语句或语句块,while,条件,do,语句,while,条件,do begin,语句,endwhile,Test_for.pro,Return,语句,return,语句在当前程序单元中产生一个即时出口,并返回控制。,return,结果,return,Break,语句,break,语句用来中断循环的执行,break,Continue,语句,continue,语句终止本次循环的执行,执行下次循环,continue,2.3,参数和关键字,参数,参数用来将变量和表达式传递到过程或函数中。参数有时也被称为位置参数,因为它们在自变量中的位置决定了它们在调用的过程或函数中如何被使用。参数通常作为输入,/,输出自变量,因为这些自变量在过程或函数中不可缺少。,关键字,关键字为可选自变量或表达式,它可以传递给调用程序,但不是强制性的。输入关键字可以用来指定一个自变量,或者用来设置一个布尔标识。,使用参数和关键字,在传递给过程或函数之前,输入的参数必须先定义。一个合理的过程或函数,都必须先检测其中任何的强制性输入自变量是否已经定义,然后在进行其他操作。,输出位置参数和关键字通常在过程或函数中创建,因此不需要在调用过程或函数时定义。,检测参数和关键字,n_params,(),返回传递的参数数目,n_elements,(),返回一个变量中元素的数目,(,零表示未定义,),size(),返回一个变量的类型和大小信息,keyword_set,用于检测布尔关键字,如果自变量定义则返回为真,2.4,全局变量,只读的系统变量,保存了当前,IDL,时间段的信息。,!,d.name,当前图像设备的名称,!,d.window,当前图形窗口的索引,!,d.table_size,当前颜色表的大小,可写的系统变量,可写的系统变量可以用来调整,IDL,的默认设置。如果用户改变了可写系统变量的值,那么这种改变在所有层次上都是有效的。,!,p.multi,设置多面板成图,!,p.font,为图形中的字符选择默认字体,!order,控制图像显示顺序,图形设备的选择,通过,set_plot,程序可以选择一个图形设备,所有接下去的图形操作都输入到该设备中。,entry_device,=!,d.name,set_plot,PS,plot,indgen(10),device,/,close_file,set_plot,entry_device,1,、直接图形法介绍,直接图形法是将,IDL,将图形或图像直接绘制在用户指定的图形设备上。,直接图形法,速度快,交互差,和图形设备有关,直接图形法对内存有默认的管理方法,占用内存少,用户不必自己释放内存。,IDL,支持的图形设备:,设备名称,描述,设备类型,WIN,Windows,显示器显示,MAC,MAC OS,显示器显示,X,X Window,显示器显示,PS,PostScript,文件,PRINTER,打印机,打印机,2,、显示模式,8,位显示模式,最多支持,256,色,相对应于一个颜色表,所有的,IDL,设备都支持,24,位显示模式,真彩色模式,每个像素的颜色由红、绿、蓝各自的强度混合而成,支持,16777216,色,不需颜色表,3,、图形窗口,当选择的图形设备为,WIN,、,MAC,或,X,时,图形结果将直接输出到计算机显示器的一个窗口中。如果图形窗口不存在,则第一个图形或图形显示命令将自动打开一个新的图形窗口。,与图形窗口操作有关的过程,Window,创建一个新的窗口,Wset,将一个存在的窗口变为当前窗口,Wshow,显示、隐藏存在的窗口,Erase,擦除存在窗口中的内容,Wdelete,删除一个存在的窗口,窗口创建的示例程序,:,BROWNIAN.pro,4,、坐标系统,IDL,提供了三种独立的坐标系统:数据坐标系统、设备坐标系统和正交坐标系统。坐标系统决定着图像如何显示以及显示在窗口的位置。用户可以选用三种坐标系统的一种作为默认坐标系统,也可以在应用系统中同时使用多种坐标系统。,数据坐标系统:是指与通常的数据范围相同的窗口坐标系统。该系统可以有二维的或者三维的,也可以是线型的、对数的、或者半对数的。该坐标系统是系统默认的坐标系统。,设备坐标系统:是选定设备的实际坐标系统。设备坐标是整数,范围从显示窗口的左下角(,0,,,0,),到右上角(,Vx,-1,,,Vy,-1,)。,Vx,和,Vy,是设备,(,例如显示窗口,),的列序号和行序号。注意:对于图像,数据坐标与设备坐标一样。图像的设备坐标与图像内的像素位置直接相关。,归一坐标系统:当前图形窗口或设备的左下角坐标为(,0.0,,,0.0,),右上角的坐标为(,1.0,,,1.0,)。普通坐标非常有用,用户使用普通坐标指定不依赖于当前图形窗口或设备大小和形状的位置。,坐标的转换,使用,convert_coord,可以在数据、普通和设备坐标之间转换。,result=,convert_coord(x,y,/to_coordinate,),5,、颜色表,载入,IDL,内置的颜色表,LOADCT,1,IDL,内置了,41,中颜色表,使用图形界面交互选择颜色表,XLOADCT,交互式修改颜色表,XPALETTE,在程序中修改颜色表,TvLCT,直接图形法例子:,模拟布朗运动,模拟霓虹灯效果,面向对象的程序设计,面向对象的程序设计特点:,封装性,封装意味着类和对象应具有明确的功能,并且提供与其它,类和对象的接口。封装后的类和对象的代码将处于隐藏和,保护状态,从而使得程序更加安全和稳定。,继承性,继承有三个主要优点:一是允许建立类的层状结构(树状,结构);二是派生类可以继承基类的属性、事件和方法;,三是派生类可以建立添加自己的属性、事件和方法。,多态性,多态是创建类时一种极为有效的手段。它可以使用户对具有相同功能,的属性、事件和方法,采用某种标准进行统一命名。,面向对象的程序设计方法:,面象对象程序设计的方法可以分为以下几个步骤:,直接利用,IDL,提供的基类建立相应的对象。,利用基类创建派生类,定义派生类的属性、事件和方法,并建立相应的对象。,创建用户自己的新类,定义新类或者其派生类的属性、事件和方法,并建立相应的对象。,为对象设置各种属性。,为对象选择指定的事件。,为对象选择或者设计相应的方法。,为对象或者其方法添加相应的过程。,利用,GUI,完成各对象之间的相互调用,并实现最终的应用程序。,类的创建,类的定义,类的定义部分主要是创建类中所要使用的数据结构。,格式:,PRO,ClassName_DEFINE,struct,= ,ClassName, data1:value1, ,dataN:valueN,END,注意:类的名称,ClassName,和过程的名称,ClassName_DEFINE,的关系,必须严格按照上述格式。即:过程的名称是由类的名称、两个下划线“,_”,和“,DEFINE”,组合而成。,子类的定义,根据类的继承性,可以使用基本类(即基类)创建子类。创建子类可以使用包含基类和指定结构变量,并且具有如下格式的过程:,格式:,PRO,ClassName_DEFINE,struct,=,ClassName,INHERITS,BaseClass, $,data1:value1,dataN:valueN,END,功能:在基类上,创建一个指定的子类。,说明:,BaseClass,:用于给出基类的名称。子类,ClassName,在拥有基类,BaseClass,的所有成员的基础上,还可以创建自己的成员:,data1,,,,,dataN,。,注意:在基类名称,BaseClass,的前面必须加上继承说明,INHERITS,。,类的方法定义,为了访问类和对象的成员,就需要为该对象设定相应的访问事件,同时在该对象所在的类上创建相应的方法来实现。下面首先给出方法的一般格式。然后用实例说明创建事件和方法的详细过程。,方法的格式为:,PRO,ClassName:MethodName,参数,1, ,参数,n,关键字,1, ,关键字,m,语句序列,END,或者,FUNCTION,ClassName:MethodName,参数,1, ,参数,n,关键字,1, ,关键字,m,语句序列,RETURN,表达式,END,技巧:用户在设计方法的时候,,IDL,为每一个方法提供了一个方便控制对象本身的隐含对象,即:对象,SELF,。,SELF,用在过程或者函数中,,SELF,是指类创建的当前对象自身。,类的初始化方法,为了更好的访问类和对象,需要为该类及其创建对象进行初始化设置,或者进行相应的约束控制等。这时需要创建一个的初始化方法。其格式为:,格式:,PRO,ClassName:Init,参数,1, ,参数,n,关键字,1, ,关键字,m,语句序列,END,功能:用于创建一个初始化方法。,说明:该方法将在每一次使用类创建对象时,被直接执行。,类实现的例子:,进度条类的实现,IDL,对象图形系统,对象图形系统是由窗口对象(,Window,)、场景对象、视图组对象、视图对象、模式对象和基本图元对象组成。它们的层次关系为:场景对象(,Scene,)是由一个或者多个视图组对象(,Viewgroup,)组成;视图组对象(,Viewgroup,)是由一个或者多个视图对象(,View,)组成;视图对象(,View,)是由一个或者多个模式对象(,Models,)组成;模式对象(,Models,)是由一个或者多个基本图元对象组成(,Atomic Graphic Object,);基本图元对象是由,IDLgrAxis,、,IDLgrContour,、,IDLgrImage,、,IDLgrLight,、,IDLgrPlot,、,IDLgrPolygon,、,IDLgrPolyline,、,IDLgrSurface,、,IDLgrText,和,IDLgrVolume,等利用,OBJ_NEW,函数创建;最后把最终的场景再在窗口对象中显示。,对象图形系统中各种对象的创建过程可以描述如下:,(,1,)由窗口类,IDLgrWindow,创建窗口对象。,(,2,)由场景类,IDLgrScene,创建场景对象。,(,3,)由视图组类,IDLgrViewgroup,创建视图组对象。,(,4,)由视图类,IDLgrView,创建视图对象。,(,5,)由模式类,IDLgrModel,创建模式对象。,(,6,)由基本图元类创建基本图元对象。,(,7,)利用模式对象的,ADD,方法,把基本图元对象添加到模式对象中。,(,8,)利用视图对象的,ADD,方法,把模式对象添加到视图对象中。,(,9,)利用视图组对象的,ADD,方法,把视图对象添加到视图组对象中。,(,10,)利用场景对象的,ADD,方法,把视图对象添加到场景对象中。,(,11,)利用窗口对象的,DRAW,方法,在窗口对象中绘制场景对象。,(,11,)显示结束后,删除所有不再使用的对象。,注意:场景对象、视图组对象和视图对象三者可以同时使用,也可以只使用三者之一。,窗口的建立:,窗口的建立需要使用类,IDLgrWindow,和函数,OBJ_NEW,()。,IDLgrWindow,的常用属性与描述如下:,COLOR_MODEL= 0 | 1,:用于设置显示模式。真彩模式(,0,);伪彩模式(,1,),DIMENSIONS=,宽,高,:用于设置窗口大小,LOCATION=,行,列,:用于设置窗口的位置,N_COLORS=,值:在,COLOR_MODEL= 1,时,用于设置可以使用的颜色数,其范围为:,2255,PALETTE=,颜色表对象:用于设置窗口的颜色表,QUALITY=0|1|2,:用于设置窗口的绘制质量。底质量(,0,);中质量(,1,);高质量(,2,),RENDERER=0|1,:用于设置窗口的绘制平台。,OpenGL,(,0,);,IDL6.2,(,1,),RETAIN=0|1|2,:用于设置窗口内容的备份方式。不备份(,0,);,Windows,系统(,1,);,IDL6.2,(,2,),TITLE=,标题变量:用于设置窗口标题栏中的标题,窗口内容的绘制和清除,窗口内容的绘制需要使用,IDLgrWindow,的,Draw,方法。,窗口内容的清除需要使用,IDLgrWindow,的,Erase,方法。,窗口的显示和隐藏,窗口显示和隐藏需要使用,IDLgrWindow,的,Show,方法,窗口的最小化和还原,窗口的最小化和还原需要使用,IDLgrWindow,的,Iconify,方法,窗口的指针设置,窗口指针的设置需要使用,IDLgrWindow,的,SetCurrentCursor,方法,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!