




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高级会计资格考试2024年试题及答案的宝贵经验
- 即时配送行业2025年配送路径优化与物流行业物流教育发展报告
- 气管镜术后护理
- 中级经济师考试全面分析试题及答案
- 未来工程经济发展战略探索试题及答案
- 水利水电工程设计原理试题及答案汇编
- 2025年环境影响评价公众参与中的利益相关者利益协调研究
- 儿科护理不良事件管理
- 2025年美妆个性化定制服务市场细分领域竞争格局分析报告
- 行政管理经济法概论试题及答案考情分析
- 泌尿系结石的护理课件
- T∕ZZB 2733-2022 贯流式蒸汽发生器
- 飞行区培训题库
- 项目部周例会制度
- 战略管理教学ppt课件(完整版)
- 云南锂电池项目可行性研究报告
- 体育科研方法试卷试题答案
- 《国家电网公司十八项电网反事故措施(试行)》实施细则
- 中国民主同盟入盟申请表(样表)
- 国家标准色卡电子版(WORD版图片)
- 《呼吸机的使用管理》PPT课件.ppt
评论
0/150
提交评论