在上一篇文章《DeepEarth中的几何图形基础框架模型》中将整个DeepEarth的几何图形基础框架模型进行了介绍,之后还通过了绘制一个三角形的应用示例演示了DeepEarth中的几何图形应用。本篇将续着这篇文章介绍DeepEarth中的几何图形应用,包括基本图形绘制(点、线、多边形)和自定义图层的应用。
一、绘制点图层
首先看看如何使用DeepEarth中的几何图形基础框架所提供的点基类(PointBase)来实现在地图上绘制一个坐标点。其使用非常简单,如下代码块(效果图见本文末尾的截图):
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->//创建几何图层对象
vartransformLayer=newGeometryLayer(map)
{
UpdateMode=GeometryLayer.UpdateModes.TransformUpdate,
ID=Guid.NewGuid().ToString()
};
map.Layers.Add(transformLayer);
//创建点对象
vardot=newPointBase();
dot.X=106.5726;
dot.Y=29.5627;
dot.Width=100;
dot.Opacity=0.88;
transformLayer.Add(dot);
二、绘制线条图层
绘制线条同绘制点一样的简单,如果只是绘制一条普通的线条可直接使用DeepEarth几何图形框架所提供的LineString对象就可以完成线条的绘制,如下示例代码:
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->vartransformLayer=newGeometryLayer(map)
{
UpdateMode=GeometryLayer.UpdateModes.TransformUpdate,
ID=Guid.NewGuid().ToString()
};
map.Layers.Add(transformLayer);
//创建线条对象,并初始其前景颜色为黄色,线条宽度为2像素
varline=newLineString(Colors.Yellow,2);
//设置线条的起始和结束地理坐标
line.Points=newObservableCollection<Point>()
{
newPoint(104.062021177233,30.6666587469201),
newPoint(106.489384971208,29.5076372217973)
};
//处理鼠标事件
line.MouseEnter+=(oo,ee)=>
{
varl=ooasLineString;
l.LineColor=Colors.Green;
};
line.MouseLeave+=(mo,me)=>
{
varl=moasLineString;
l.LineColor=Colors.Yellow;
};
transformLayer.Add(line);
上面的代码非常容易理解,就是通过指定线条的开始和结束的地理坐标点进行线条绘制,并为线条的鼠标事件委托事件处理函数,让鼠标经过线条的时候线条颜色变为绿色(Green),鼠标离开线条则线条的颜色恢复为黄色(Yellow)。
对于如何绘制多边形在《DeepEarth中的几何图形基础框架模型》已经介绍了一个绘制三角形的示例,这里就不在作重复的介绍。下面来看看如何实现自定义图形层并将其他添到到DeepEarth中显示出来。
三、自定义图片图层
要实现自定义图形我们需要在一次的去了解PointBase类,它提供了一个点的几何图形元素基础模型,其主要特性就是可以根据一个地理坐标点进行图形的绘制。于此我们要想实现自定义的的图形绘制和呈现只需要继承于PointBase类,然后重写其呈现模版以实现自定义的图形呈现效果,通过动态的指定不同的图片以达到呈现出不同的效果。以下是自定义图形处理类的完整代码:
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->publicclassImageLayer:PointBase
{
protectedGridRootElement;
publicImageLayer(Pointpoint)
{
base.X=point.X;
base.Y=point.Y;
this.Style=Application.Current.Resources["ImageLayerStyle"]asStyle;
}
publicoverridevoidOnApplyTemplate()
{
base.OnApplyTemplate();
this.ImagePath=newBitmapImage(newUri("Resources/arrow.png",UriKind.Relative))asImageSource;
RootElement=GetTemplateChild("RootElement")asGrid;
}
#region依赖属性
///<summary>
///图标路径
///</summary>
publicImageSourceImagePath
{
get{return(ImageSource)this.GetValue(ImagePathProperty);}
set{this.SetValue(ImagePathProperty,value);}
}
publicstaticreadonlyDependencyPropertyImagePathProperty=DependencyProperty.Register(
"ImagePath",
typeof(ImageSource),
typeof(ImageLayer),
newPropertyMetadata(null,newPropertyChangedCallback(delegate(DependencyObjectsender,DependencyPropertyChangedEventArgse)
{
ImageLayerimageLayer=senderasImageLayer;
(imageLayer.GetTemplateChild("imageName")asImage).Source=e.NewValueasImageSource;
}))
);
#endregion
}
在上面的自定义的PointBase的扩展控件中,使用了名为ImageLayerStyle的样式,通过样式规范了直定义图形的展现方法,以下是ImageLayerStyle样式的代码:
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><Stylex:Name="ImageLayerStyle"TargetType="layer:ImageLayer">
<SetterProperty="Template">
<Setter.Value>
<ControlTemplateTargetType="layer:ImageLayer">
<Canvas>
<Gridx:Name="RootElement"MinWidth="48">
<Grid.RenderTransform>
<ScaleTransformx:Name="_ScaleTransform"ScaleX="1"ScaleY="1"/>
</Grid.RenderTransform>
<Imagex:Name="imageName"Stretch="None"Width="48"Height="48"HorizontalAlignment="Center"></Image>
</Grid>
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
到这里就完成了一个自定义图形控件的开发,通过下面代码块的方式就可以使用该自定义图层了:
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->varimageLayer=newGeometryLayer(map)
{
UpdateMode=GeometryLayer.UpdateModes.TransformUpdate,
ID=Guid.NewGuid().ToString()
};
map.Layers.Add(imageLayer);
//ImageLayer为自定义图层,通过该控件的模板设置所加载的图片
varlayer=newImageLayer(newPoint(106.5834,29.5708));
imageLayer.Add(layer);
通过上述一系列的折腾,成功的将自定义的图层应用到了DeepEarth的图层中并呈现出来,这样仅仅只是呈现出了效果;如果我们想要实现一些用户交互的操作就无能为力了,需要为自定义图层添加事件支持,以相应用户的交互操作。上面自定义的ImageLayer实际上就是一个间接继承于Control的Silverlight扩展控件,也就是说普通的Silverlight的控件所具备的行为特性它也全部拥有,比如MouseLeftButtonDown和MouseLeftButtonUp事件特性;另外还可以为其扩展其他的直定义事件支持以实现特定的需求,关于如果扩展自定义事件支持这里就不做介绍。
分享到:
相关推荐
总结,基于Direct3D绘制点、线条、多边形等基本图形涉及到创建设备和上下文、定义顶点结构、管理顶点和索引缓冲、设置渲染状态以及调用绘制函数等多个步骤。通过熟练掌握这些基础知识,开发者可以构建出丰富多彩的三...
在使用百度地图API进行开发时,自定义地图图层是一项重要的功能,它允许开发者根据自己的需求展示特定的数据或视觉效果。下面将详细讲解如何利用百度地图API实现自定义地图图层,以及如何添加标记、搜索自定义标记...
在计算机图形学中,多边形绘制与平行线填充是两个关键的概念,它们构成了许多现代图形用户界面和3D渲染的基础。OpenGL是一个广泛使用的跨语言、跨平台的编程接口,用于渲染2D、3D图形。它提供了一系列的函数来处理...
2. **图形绘制**:在Android中,我们可以利用`Canvas`对象进行图形绘制。`Canvas`提供了各种绘图方法,如`drawLine()`, `drawRect()`, `drawCircle()`, `drawPath()`等。在这个案例中,`drawPolygon()`方法可以用来...
在C#编程中,动态绘制图片和多边形是一项重要的技能,这主要涉及到Windows Forms或WPF应用程序中的图形处理。本文将深入探讨如何利用C#实现这一目标,以及相关的关键知识点。 首先,从文件名列表中我们可以看到,...
这个压缩包文件"安卓手绘图片处理画板相关-自定义控件实现多边形绘制图形菜单绘制五边形六边形等.rar"显然包含了用于创建一个能够绘制多边形的画板应用的相关代码和资源。下面我们将深入探讨这个主题,了解如何在...
要实现这一功能,关键在于利用AutoCAD ObjectARX提供的接口`worldDraw->subEntityTraits().setLayer()`来指定自定义对象的子实体应绘制在哪一个图层上。当关联的图层属性(如可见性、颜色等)发生变化时,这些实体也...
本话题主要关注如何在百度地图上实现点、线、面的图层展示,特别是多边形的绘制。 首先,我们需要了解百度地图API的基础知识。百度地图API是一个JavaScript接口,它允许开发者在网页中嵌入地图,并通过JavaScript...
1. **绘制多边形**:在C#中,通常使用GDI+(Graphics Device Interface Plus)库来实现图形绘制。首先,你需要创建一个`Graphics`对象,它是所有绘图操作的基础。然后,通过监听鼠标点击事件,获取用户的坐标点,将...
在IT行业中,尤其是在地理信息系统(GIS)开发领域,利用地图API进行交互式地图绘制是常见的需求。本话题聚焦于如何使用百度地图API来绘制多边形几何图形,并将这些图形的坐标保存,以便后续转化为地图上的覆盖物。...
在计算机图形学中,多边形填充是一种基本的图像处理技术,用于将用户定义的多边形区域填充为特定颜色。本实验“图形学多边形填充实验”着重于理解和应用边标志算法来实现这一功能,并结合MFC(Microsoft Foundation ...
本文将深入探讨如何在GMap.NET中自定义Marker以及绘制规则图形,以实现更加个性化和功能丰富的地图应用。 首先,我们来了解GMap.NET中的Marker。Marker是地图上用来表示特定位置的图标,通常用于标记地点、事件或...
在这个特定的主题中,"L EDIT 绘制多边形 绘制文字 C代码" 涉及到使用C语言编写程序来实现图形用户界面(GUI)的基本操作,特别是绘制多边形和文字。C语言虽然不直接支持GUI库,但可以通过调用操作系统提供的API或者...
【标题】"FME 根据多边形范围对图层进行裁剪"涉及的是地理信息系统(GIS)中数据处理的一个重要技术,即利用FME(Feature Manipulation Engine)软件来根据特定的多边形范围对地图图层进行裁剪。FME是一款强大的数据...
在计算机科学领域,尤其是软件开发中,交互式绘制多边形是一种常见的技术,它允许用户在屏幕上实时地创建和编辑几何形状。这个源代码实验,名为"交互式绘制多边形 源代码",是针对计算机图形学的一个实践项目,使用...
通过处理鼠标事件、存储顶点、判断点在多边形内以及使用`QPainter`进行绘制,可以创建出交互式的图形界面,允许用户动态地绘制和填充多边形。在实际应用中,开发者还可以根据需求添加更多的功能,如选择不同颜色、...
在本项目中,我们将深入探讨如何使用蚂蚁金服的开源数据可视化库——antv L7,来实现自定义地图、地图抬高图层、散点轮播显示弹窗以及鼠标悬浮时的弹窗功能。antv L7 是一个基于 WebGL 的地图渲染库,特别适合进行大...
填充矩形 随机画矩形 鼠标绘图 色彩变换矩阵 全局变形图形 漂亮的C#登录窗口(动画效果) 路径 另存为 绘制颜色渐变图形 绘制线条 绘制椭圆 绘制扇形 绘制抛物线 绘制矩形 绘制弧线 绘制多边形和折线 ...
在IT行业中,尤其是在Web开发领域,图形绘制是创建交互式应用程序和可视化数据的关键技术。本资源包"多边形圆形矩形等多种图形绘制"聚焦于使用地图插件、HTML5、CSS3以及Jquery来实现各种几何图形的绘制。下面我们将...
本实验的目的是让学生掌握C++在图形绘制方面的应用,理解图形渲染的基本原理,以及如何通过编程控制图形的颜色、线条样式和宽度。 首先,我们需要引入一个图形库来支持图形的绘制。OpenGL是一个广泛应用的跨平台...