爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4402|回复: 0

[已解决] 转:IDLgrPolyline的LineStyle自定义方法

[复制链接]

新浪微博达人勋

发表于 2011-7-8 11:44:01 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
概述: IDLgrPolyline的用途很广泛(废话),但它的线型只有7种:Solid line (the default) ,Dotted, Dashed, Dash dot, Dash dot dot dot, Long dash, No line drawn. 实际应用种或许不够用.需要自定义线型. 如何自定义线型: IDLgrPolyline的LineStyle使用一个两个元素的数组自定义: LineStyle = [repeat, bitmask].比如,你可以定义LINESTYLE = [2, 'F0F0'X], 这是一个虚线线型. 如何理解Repeat和Bitmask这俩参数的含义?.当然,帮助文档中有大概的介绍.但不完全. 定制线型时,我们将IDL绘制的Polyline看作时一条由0和1组成的数据链.这里边,0代表空白,1代表绘制.比如,一条虚线"- - - -",我们可以看作0,1数据链: 1100110011001100,含义是绘制两个点,空两个点,再绘制两个点....以此类推.形象的说就是一个Bit形式(0/1)的掩膜 ---Bitmask. 先说Bitmask参数,这个参数时决定线型的关键点.具体确定步骤为: 1: 根据你对线型的设计,写出二进制形式的数据链.比如我们设计一个线型为画一个点,空一个点,再画一个点,再空一个点......那么换成0/1掩膜的形式就是:1010101010101010,注意这个设计用的是16个Bit.因为我们在测试过程种,发现一个完整的线型单元是由16个Bit掩膜构成的. 只用8个Bit,或多于16个Bit.都无法完成.或者说,最好严格按照16个Bit来设计你的线型. 2: 然后把这16个Bit组成的二进制数据,换算成10进制,或者16进制.比如 1010101010101010的十进制形式为43690,十六进制形式为aaaa,在Repeat参数为1的情况下,线型LineStyle= [1,43690]或者LineStyle=[1,'aaaa'X] 再看Repeat参数,这个参数直观来讲,其实就是对每个Bit位的重复次数.简单来讲,就是对整个线型单元进行一定倍数的放大.这个参数值域为[1,255]. 比如上面的1010101010101010,Repeat为1的情况下,是画一个点,空一个点,再画一个点,再空一个点......如果Repeat为2,就变成了画两个点,空两个点,再画两个点,再空两个点...... 以此类推,便不难理解Repeat的含义了. 总结: 自定义线型,首先要设计出线型的16位二进制掩膜,然后再将这个二进制数换算成10进制或者16进制,作为Bitmask参数的值.然后根据需要,设定Repeat对线型进行缩放即可. 至于在直接图形法里边如何自定义线型,暂时没有研究...
Pro TestPolylineStyle
winsize = [400, 400]
oWin = Obj_New('IDLgrWindow', dim=winsize)
oView = Obj_New('IDLgrView', viewplane_rect=[0, 0, winsize], dim=winsize)
oModel = Obj_New('IDLgrModel')
oView->Add, oModel
oPolyline = Obj_New('IDLgrPolyline', [[0, 200], [400, 200]], $ linestyle=[1, 'aaaa'X])
oModel->Add, oPolyline
oPolyline = Obj_New('IDLgrPolyline', [[0, 100], [400, 100]], $ linestyle=[2, 'd6b5'X])
oModel->Add, oPolyline
oWin->Draw, oView
End

原网址:http://hi.baidu.com/idl%B3%F5%D1%A7%D5%DF/blog/item/ace6bca9766e8ab9ca130c25.html
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表