ArcEngine透明Element的实现

简介: 版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/40742589 在ArcGIS的开发中,Element是经常需要用到的对象,有时为了显示的必要性或美观性,我们需要将Element置为半透明。
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/40742589

在ArcGIS的开发中,Element是经常需要用到的对象,有时为了显示的必要性或美观性,我们需要将Element置为半透明。

那么问题就来了,ArcEngine中的IElement接口并没有设置透明度的属性,有同学会想到我们可以设置Element的填充或边线颜色的透明度啊,然后结果并不是我们想象的那样,当将填充颜色设置成完全透明时,Element的确全透了,但当颜色设置成半透时,不透了。。。

下面是一种半透明显示的解决方案,思路是继承Element,然后重写Draw方法。


public class PolygonElement : PolygonElementClass, IElement
    {
        private int _Opacity;

        void IElement.Activate(IDisplay Display)
        {
            base.Activate(Display);
        }

        void IElement.Deactivate()
        {
            base.Deactivate();
        }

        void IElement.Draw(IDisplay Display, ITrackCancel TrackCancel)
        {
            ITransparencyDisplayFilter filter = new TransparencyDisplayFilterClass {
                Transparency = (short) ((this._Opacity * 0xff) / 100)
            };
            IDisplayFilter filter2 = null;
            if (Display.Filter != null)
            {
                filter2 = (Display.Filter as IClone).Clone() as IDisplayFilter;
            }
            Display.Filter = filter;
            base.Draw(Display, TrackCancel);
            Display.Filter = filter2;
        }

        bool IElement.HitTest(double x, double y, double Tolerance)
        {
            return base.HitTest(x, y, Tolerance);
        }

        void IElement.QueryBounds(IDisplay Display, IEnvelope Bounds)
        {
            base.QueryBounds(Display, Bounds);
        }

        void IElement.QueryOutline(IDisplay Display, IPolygon Outline)
        {
            base.QueryOutline(Display, Outline);
        }

        IGeometry IElement.Geometry
        {
            get
            {
                return base.Geometry;
            }
            set
            {
                base.Geometry = value;
            }
        }

        bool IElement.Locked
        {
            get
            {
                return base.Locked;
            }
            set
            {
                base.Locked = value;
            }
        }

        ISelectionTracker IElement.SelectionTracker
        {
            get
            {
                return base.SelectionTracker;
            }
        }

        public int Opacity
        {
            get
            {
                return this._Opacity;
            }
            set
            {
                this._Opacity = value;
            }
        }
    }

类中Opcity是Element的透明度(0~100)。


相关文章
|
API 图形学
Winform控件优化之自定义控件的本质【从圆角控件看自定义的本质,Region区域无法反锯齿的问题】
自定义控件的本质只有两点:重绘控件Region区域(圆角、多边形、图片等),这是整个控件的真实范围;重绘图形,在原有Region范围内,重绘不同的图形(圆角、多边形、图片等)作为背景......
581 0
Winform控件优化之自定义控件的本质【从圆角控件看自定义的本质,Region区域无法反锯齿的问题】
|
5天前
CSS3几何透明层文本悬停变色源码
CSS3几何透明层文本悬停变色源码是一款基于css3 svg制作的背景图片鼠标悬停几何形状透明层变色显示文本内容
9 0
CSS3几何透明层文本悬停变色源码
|
4月前
|
前端开发 JavaScript UED
element-ui 表格数据究竟隐藏着怎样的神秘样式与格式化技巧?快来揭开谜底!
【8月更文挑战第22天】《element-ui 表格数据样式及格式化案例》展示了如何利用 element-ui 的表格组件实现美观且易读的数据展示。通过简单配置,可以自定义表格样式,如边框、背景色等,并通过 formatter 实现数据格式化,例如将成绩保留一位小数。此外,还能依据条件设置行样式,如成绩达优则高亮显示,从而增强用户体验和数据可读性。
66 1
|
5月前
|
容器
Element UI 自定义环形进度条里的内容
Element UI 自定义环形进度条里的内容
198 2
|
7月前
|
JavaScript atlas Kotlin
深度解读dragonBones使用SpriteFrame任意换肤的实现
深度解读dragonBones使用SpriteFrame任意换肤的实现
122 0
|
C# 图形学
Winform控件优化之Paint事件实现圆角组件(提取绘制圆角的扩展方法)
Paint事件方法中实现圆角控件不要通过事件参数`e.ClipRectangle`获取控件区域范围,原因见最后介绍;注意设置控件背景透明(参见[Winform控件优化之背景透明那些事2...
839 0
Winform控件优化之Paint事件实现圆角组件(提取绘制圆角的扩展方法)
对element-ui中的表格出现常见的疑惑以及解决方案
对element-ui中的表格出现常见的疑惑以及解决方案
105 0
Winform控件优化之圆角Panel【绘制时需要注意的几点和扩展】
圆角的实现(原理和绘制方法)之前基本都已经介绍,本篇主要是实现圆角Panel时介绍几点注意点和一些扩展。一是BackColor应始终为Transparent;二是Draw完全显示绘制出的线条...
1629 0
Winform控件优化之圆角Panel【绘制时需要注意的几点和扩展】
|
定位技术
ArcEngine 样式对象StyleGallery的使用详解
        ArcMap里面存在很多预定义的样式对象,比如颜色、图例和各种符号等。用户也可以新建自己的样式对象,来满足实际开发的特殊需要。在进行arcgis engine 二次开发的过程中,用户可直接使用这些样式对象,以丰富制图内容,简化制图过程。
1904 0
|
C#
WPFのInkCanvas作为蒙版透明笔迹不透明
原文:WPFのInkCanvas作为蒙版透明笔迹不透明 本人最近利用inkcavas做一个蒙版的功能,结果发现笔迹稀释了,经过一番查找发现:应该讲inkcavas的背景设置为白色,然后透明,而不是将整个控件透明,具体代码:                                      ...
1008 0