爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3829|回复: 5

LegendScheme的bug?

[复制链接]

新浪微博达人勋

发表于 2013-4-24 12:32:13 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 tinysand 于 2013-4-24 12:46 编辑

目的:写了一个函数实现大于或小于某一阈值的等值面的渲染
函数如下。现象:当实现大于某一阈值的渲染时(iValueSymbol==1),没有问题出现。当实现小于某一阈值渲染时(iValueSymbol==-1),语句: aLS.LegendBreaks[cNum - 1].Color = Color.FromArgb(0, Color.Red);没有将透明度设置为0,不起作用。但如果将颜色的透明度变为非零值,如aLS.LegendBreaks[cNum - 1].Color = Color.FromArgb(100, Color.Red);又起作用了。
图中的色标是根据Layer的LegendBreaks.Color画出来的。

透明度100

透明度100

透明度0

透明度0


/// <summary>
        /// 生成并渲染图层
        /// </summary>
        /// <param name="sLayerName">图层名</param>
        /// <param name="fValues">等值线的值</param>
        /// <param name="startColor">开始颜色</param>
        /// <param name="endColor">结束颜色</param>
        /// <param name="iValueSymbol">阈值符号1为小于阈值的不显示,-1为大于阈值 的不显示</param>
        internal void GenRenLayer(string sLayerName, double[] fValues,
            Color startColor, Color endColor, short iValueSymbol)
        {
            //等值线条数
            int cNum = fValues.Count();

            LegendScheme aLS = LegendManage.CreateGraduatedLegendScheme(fValues,
                CreateColors(startColor, endColor, cNum), ShapeTypes.Polygon,
                m_GridData.GetMinValue(), m_GridData.GetMaxValue(), false, -9999);

            if (iValueSymbol == 1)
            {
                //将小于阈值之外的值透明度设置为0
                aLS.LegendBreaks[0].Color = Color.FromArgb(0, Color.Red);
            }
            if (iValueSymbol == -1)
            {
                //将大于阈值之外的值透明度设置为0(下面这一行代码出问题!)
                aLS.LegendBreaks[cNum - 1].Color = Color.FromArgb(0, Color.Red);
            }

            //创建等值线图层
            VectorLayer aLayer = DrawMeteoData.CreateShadedLayer(m_GridData, aLS, sLayerName, "Value");
            aLayer.IsMaskout = true;

            //添加图层
            m_mainMapView.AddLayer(aLayer);
       }


密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2013-4-24 13:43:22 | 显示全部楼层
大于小于某一阈值用设置为缺测值的方法是不是也可以啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-24 19:57:23 | 显示全部楼层
本帖最后由 tinysand 于 2013-4-24 19:59 编辑

吼吼,好思路,应该是可以,回头去试试。(不过要改数据,程序的结构会因此变掉,毕竟不地道)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-24 20:43:25 | 显示全部楼层
还有一种改数据的方法,就是将数据乘以-1,再用上面大于阈值的方法渲染。不过同样不地道
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-24 20:51:26 | 显示全部楼层

没发现程序里有这样的bug。

你可以设置ColorBreak的DrawShape属性为false
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-25 22:08:00 | 显示全部楼层
设置ColorBreak的DrawShape属性为false,可以了,谢谢王老大!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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