文档库 最新最全的文档下载
当前位置:文档库 › ArcEngine透明Element的实现

ArcEngine透明Element的实现

ArcEngine透明Element的实现
分类: c# ArcGIS 2014-11-03 16:37 231人阅读 评论(0) 收藏 举报
ArcEngineElement
在ArcGIS的开发中,Element是经常需要用到的对象,有时为了显示的必要性或美观性,我们需要将Element置为半透明。

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

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


[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
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)

相关文档