下繪制顏色棒colorbar_第1頁
下繪制顏色棒colorbar_第2頁
下繪制顏色棒colorbar_第3頁
下繪制顏色棒colorbar_第4頁
下繪制顏色棒colorbar_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、IDL下繪制顏色棒(colorbar)原文地址:IDL下繪制顏色棒(colorbar)作者:ENVIIDL在IDL繪圖過程中,經(jīng)常使用顏色棒,對iTools和IDL8.0下的快速可視化非常容易,在直接圖形法和對象圖形法下實現(xiàn)顏色棒的繪制,特別是特殊顏色棒,如兩邊帶箭頭標識的。下面colorbar對象類實現(xiàn)繪制顏色棒,調(diào)用參考類文件中COLORBAR_EXAMPLE,示例效果見下圖?!緟⒖荚创a】;+; :Description:;   析構(gòu)函數(shù);-PRO COLORBAR:CLEANUP  COMPILE_OPT idl2  OBJ_DESTROY, s

2、elf.OFONT  PTR_FREE,self.STEPCOLOR  self->IDLGRMODEL:CLEANUPEND;+;創(chuàng)建功能;-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;顏色棒類初始化函數(shù)FUNCTION COLORBAR:INIT,$    maxValue = maxValue, $         ;刻度最大值    minValue = minValue, $        ;刻度最小值    floatLen = floatLen, $   

39、     ;浮點數(shù)小數(shù)長度    direction = direction, $    ;方向,默認為水平,1為豎直    scaleNum = scaleNum, $        ;刻度個數(shù),默認是10    stepColor = stepColor, $    ;刻度顏色,為3,num數(shù)組    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  ;如不設(shè)置則調(diào)用默認參數(shù)  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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論