下绘制颜色棒colorbar_第1页
下绘制颜色棒colorbar_第2页
下绘制颜色棒colorbar_第3页
下绘制颜色棒colorbar_第4页
下绘制颜色棒colorbar_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、IDL下绘制颜色棒(colorbar)原文地址:IDL下绘制颜色棒(colorbar)作者:ENVIIDL在IDL绘图过程中,经常使用颜色棒,对iTools和IDL8.0下的快速可视化非常容易,在直接图形法和对象图形法下实现颜色棒的绘制,特别是特殊颜色棒,如两边带箭头标识的。下面colorbar对象类实现绘制颜色棒,调用参考类文件中COLORBAR_EXAMPLE,示例效果见下图。【参考源代码】;+; :Description:;   析构函数;-PRO COLORBAR:CLEANUP  COMPILE_OPT idl2  OBJ_DESTROY, s

2、elf.OFONT  PTR_FREE,self.STEPCOLOR  self->IDLGRMODEL:CLEANUPEND;+;创建功能;-PRO COLORBAR:CreateColorBar  COMPILE_OPT idl2  objPolys = OBJARR(2,self.SCALENUM)  startLoc = self.LOCATION  colors = *(self.STEPCOLOR)  IF self.DIRECTION EQ 1 THEN eachDims = self.DIMENSION

3、/1,self.SCALENUM $  ELSE eachDims = self.DIMENSION/self.SCALENUM,1  IF self.FLOATLEN EQ 0 THEN format='(I0)' ELSE format='(f0.'+STRTRIM(self.FLOATLEN,2)+')'  self.OFONT = OBJ_NEW('IDLgrFont','Times New Roman')  ;带尖的  IF self.AXISSTYLE

4、EQ 1 THEN BEGIN    oTexts = OBJARR(self.SCALENUM-1)    ;水平方向,10个颜色,10个多边形,9个刻度    eachValue = (self.MAXVALUE - self.MINVALUE)/self.SCALENUM    oModel= OBJ_NEW('IDLgrModel')    FOR i=0, self.SCALENUM-1 DO BEGIN &#

5、160;    ;竖直的话      IF self.DIRECTION EQ 1 THEN BEGIN        xLen = eachDims0/2        tmpx = startLoc0,0        tmpy = startLoc1,0+eachDims1*i  &

6、#160;     IF i EQ 0 THEN BEGIN          data = tmpx+xLen/2.,tmpy,tmpx+xLen,tmpy+eachDims1,tmpx,tmpy+eachDims1        ENDIF ELSE IF i EQ self.SCALENUM-1 THEN  BEGIN     &#

7、160;    data =  tmpx+xLen,tmpy,tmpx+xLen/2.,tmpy+eachDims1,tmpx,tmpy          ;绘制刻度          curValue = self.MINVALUE+eachValue*i          oTexts

8、i-1 = OBJ_NEW('IDLgrText',STRING(curValue,format=format),$            location = tmpx,tmpY-1.4,.4*xLen, $            CHAR_DIMENSIONS  =0.5,0.75*xLen, $    &#

9、160;       font = self.OFONT)          self->ADD,oTextsi-1        ENDIF ELSE BEGIN          data = tmpx+xLen,tmpy,tmpx+xLen,tmpy+eachDims1,tmp

10、x,tmpy+eachDims1,tmpx,tmpy          ;绘制刻度          curValue = self.MINVALUE+eachValue*i          oTextsi-1 = OBJ_NEW('IDLgrText',STRING(curValue,format=forma

11、t),$            location = tmpx,tmpY-1.4,.4*xLen, $            CHAR_DIMENSIONS  =0.5,0.75*xLen, $            font = self.OFONT)

12、60;         self->ADD,oTextsi-1        ENDELSE        objPolys0,i = OBJ_NEW('IDLgrPolygon',data,color =colors*,i )        objPolys1,i = OBJ_NEW(

13、'IDLgrPolygon',data,color =0,0,0,style =1,$          thick =2 )      ;水平方向,10个颜色,10个多边形,9个刻度      ENDIF ELSE BEGIN        tmpx = startLoc0,0+eachDims0*i 

14、0;      yLen = eachDims1/2        tmpy = startLoc1,0+yLen        ;最后的1,2表示可用X、Y,则颜色棒大小仅为X,Y/2,剩下为文字        IF i EQ 0 THEN BEGIN       &

15、#160;  data = tmpx,tmpy+yLen/2.,tmpx+eachDims0,tmpy,tmpx+eachDims0,tmpy+yLen        ENDIF ELSE IF i EQ self.SCALENUM-1 THEN  BEGIN          data =  tmpx,tmpy,tmpx+eachDims0,tmpy+yLen/2,tmpx,tmpy+yLen 

16、         ;绘制刻度          curValue = self.MINVALUE+eachValue*i          oTextsi-1 = OBJ_NEW('IDLgrText',STRING(curValue,format=format),$    

17、0;       location = tmpx,0-0.4,0*yLen, $            CHAR_DIMENSIONS  =0.5,0.75*yLen, $            font = self.OFONT)      

18、60;   self->ADD,oTextsi-1        ENDIF ELSE BEGIN          ;绘制刻度          curValue = self.MINVALUE+eachValue*i        

19、0; oTextsi-1 = OBJ_NEW('IDLgrText',STRING(curValue,format=format),$            location = tmpx,0-0.4,0*yLen, $            CHAR_DIMENSIONS  =0.5,0.75*yLen, $   

20、60;        font = self.OFONT)          self->ADD,oTextsi-1          data = tmpx,tmpy,tmpx+eachDims0,tmpy,tmpx+eachDims0,tmpy+yLen,tmpx,tmpy+yLen    

21、0;   ENDELSE        objPolys0,i = OBJ_NEW('IDLgrPolygon',data,color =colors*,i)        objPolys1,i = OBJ_NEW('IDLgrPolygon',data,color =0,0,0,style =1,$        

22、0; thick =2 )      ENDELSE      self->ADD,objPolys0,i,objPolys1,i    ENDFOR  ENDIF ELSE BEGIN    oTexts = OBJARR(self.SCALENUM+1)    ;10个颜色,10个多边形,11个刻度    eachValue = (self.MAXVALUE

23、 - self.MINVALUE)/self.SCALENUM    ;竖直的    IF self.DIRECTION EQ 1 THEN BEGIN      xLen = eachDims0/2      FOR i=0, self.SCALENUM-1 DO BEGIN        tmpx = startLoc0,0   &#

24、160;    tmpy = startLoc1,0+eachDims1*i        data = tmpx,tmpy,tmpx+xLen,tmpy,tmpx+xLen,tmpy+eachDims1,tmpx,tmpy+eachDims1        objPolys0,i = OBJ_NEW('IDLgrPolygon',data,color =colors*,i )   

25、;     objPolys1,i = OBJ_NEW('IDLgrPolygon',data,color =0,0,0,style =1,$          thick =2 )        self->ADD,objPolys0,i,objPolys1,i        ;绘制刻度 

26、60;      curValue = self.MINVALUE+eachValue*i        oTextsi = OBJ_NEW('IDLgrText',STRING(curValue,format=format),$          location = tmpx,tmpY-1.4,.4*xLen, $    

27、60;     CHAR_DIMENSIONS  =0.5,0.75*xLen, $          font = oFont)        self->ADD,oTextsi        IF i EQ self.SCALENUM-1 THEN BEGIN    &

28、#160;     i+          tmpy+=eachDims1          curValue = self.MINVALUE+eachValue*i          oTextsi = OBJ_NEW('IDLgrText',STRING(curValu

29、e,format=format),$            location = tmpx,tmpY-1.4,.4*xLen, $            CHAR_DIMENSIONS  =0.5,0.75*xLen, $            font =

30、oFont)          self->ADD,oTextsi        ENDIF      ENDFOR    ENDIF ELSE BEGIN      yLen = eachDims1/2      ;水平的  

31、60;   FOR i=0, self.SCALENUM-1 DO BEGIN        tmpx = startLoc0,0+eachDims0*i        tmpy = startLoc1,0+yLen        data = tmpx,tmpy,tmpx+eachDims0,tmpy,tmpx+eachDims0,tmpy+yLen,tmpx,tm

32、py+yLen        objPolys0,i = OBJ_NEW('IDLgrPolygon',data,color =colors*,i )        objPolys1,i = OBJ_NEW('IDLgrPolygon',data,color =0,0,0,style =1,$          thick =2 )&

33、#160;       self->ADD,objPolys0,i,objPolys1,i        ;绘制刻度        curValue = self.MINVALUE+eachValue*i        oTextsi = OBJ_NEW('IDLgrText',STRING(curValu

34、e,format=format),$          location = tmpx,0-0.2,0*yLen, $          CHAR_DIMENSIONS  =0.5,0.75*yLen, $          font = oFont)     

35、0;  self->ADD,oTextsi        IF i EQ self.SCALENUM-1 THEN BEGIN          i+          tmpx+=eachDims0          curValue = s

36、elf.MINVALUE+eachValue*i          oTextsi = OBJ_NEW('IDLgrText',STRING(curValue,format=format),$            location = tmpx,0-0.2,0*yLen, $         

37、;   CHAR_DIMENSIONS  =0.5,0.75*yLen, $            font = oFont)          self->ADD,oTextsi        ENDIF      ENDFOR &

38、#160;  ENDELSE  ENDELSEEND;颜色棒类初始化函数FUNCTION COLORBAR:INIT,$    maxValue = maxValue, $         ;刻度最大值    minValue = minValue, $        ;刻度最小值    floatLen = floatLen, $   

39、     ;浮点数小数长度    direction = direction, $    ;方向,默认为水平,1为竖直    scaleNum = scaleNum, $        ;刻度个数,默认是10    stepColor = stepColor, $    ;刻度颜色,为3,num数组    Dimension =

40、 dimension, $    ;颜色表尺度,默认为    location = location  , $    ;颜色表位置,左下角起点坐标    axisstyle    = axisstyle    , $    ;style=0默认普通,style=1带尖的颜色表    extra = extra  IF (self->

41、IDLGRMODEL:INIT(_Extra=extra) NE 1) THEN RETURN, 0  ;如不设置则调用默认参数  IF N_ELEMENTS(maxValue) GT 0 THEN self.MAXVALUE = maxValue ELSE self.MAXVALUE =1  IF N_ELEMENTS(minValue) GT 0 THEN self.MINVALUE = minValue ELSE self.MINVALUE =0  IF N_ELEMENTS(floatLen) GT 0 THEN self.FLOATLEN =

42、floatLen ELSE self.FLOATLEN =2  IF N_ELEMENTS(scaleNum) GT 0 THEN self.SCALENUM = scaleNum ELSE self.SCALENUM = 10  IF N_ELEMENTS(axisstyle) GT 0 THEN self.AXISSTYLE = axisstyle  IF N_ELEMENTS(direction) GT 0 THEN self.DIRECTION = direction  IF N_ELEMENTS(Dimension) GT 0 THEN sel

43、f.DIMENSION = Dimension ELSE BEGIN    IF self.DIRECTION THEN self.DIMENSION = 60,800 ELSE self.DIMENSION = 800,60  ENDELSE  IF N_ELEMENTS(location) GT 0 THEN self.LOCATION = location  ;默认颜色表  IF N_ELEMENTS(stepColor) GT 0 THEN self.STEPCOLOR = PTR_NEW(stepColor,/No

44、_Copy) ELSE BEGIN    LOADCT,3    TVLCT,r,g,b,/get    stepColor = BYTARR(3,self.SCALENUM)    eachStep = FIX(256/self.SCALENUM)    FOR i=0,self.SCALENUM-1 DO BEGIN      stepColor*,i = r255-i*eachStep,g255-i*eachStep,b255-i*eachStep    ENDFOR    self.STEPCOLOR =PTR_NEW(stepCol

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论