SkylineGlobe 6.5 如何实现简单多边形的动态绘制 C#示例代码
2015-04-14 11:29
936 查看
在Skyline的TEPro软件中,我们可以很容易地绘制出多边形。
那么,在二次开发过程中,该如何绘制一个简单的多边形呢?
通过下面的示例代码,我们可以很容易完成这一项工作。
其中,重点需要了解Geometry对象的定义和使用。
那么,在二次开发过程中,该如何绘制一个简单的多边形呢?
通过下面的示例代码,我们可以很容易完成这一项工作。
其中,重点需要了解Geometry对象的定义和使用。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using TerraExplorerX; namespace HelloSkyline { public partial class CTerrainPolygon: Form { SGWorld65 sgworld = null; String pbhander = ""; ITerrainPolygon65 pITPolygon = null; List<double> ListVerticsArray = new List<double>(); public CTerrainPolygon() { InitializeComponent(); sgworld = new SGWorld65(); sgworld.OnLButtonDown += new _ISGWorld65Events_OnLButtonDownEventHandler(sgworld_OnLButtonDown); sgworld.OnRButtonDown += new _ISGWorld65Events_OnRButtonDownEventHandler(sgworld_OnRButtonDown); } bool sgworld_OnRButtonDown(int Flags, int X, int Y) { sgworld.Window.SetInputMode(MouseInputMode.MI_FREE_FLIGHT); pbhander = ""; pITPolygon = null; return true; } bool sgworld_OnLButtonDown(int Flags, int X, int Y) { IWorldPointInfo65 pIWPInfo = sgworld.Window.PixelToWorld(X, Y, WorldPointType.WPT_TERRAIN); IPosition65 pIPosition = sgworld.Navigate.GetPosition(AltitudeTypeCode.ATC_ON_TERRAIN); if (pbhander == "TerrainPolygon") { if (pITPolygon == null) { ILinearRing cRing = null; double[] cVerticesArray = null; cVerticesArray = new double[] { pIPosition.X, pIPosition.Y, 0, pIWPInfo.Position.X, pIWPInfo.Position.Y, pIWPInfo.Position.Distance, pIWPInfo.Position.X, pIWPInfo.Position.Y, pIWPInfo.Position.Distance, }; cRing = sgworld.Creator.GeometryCreator.CreateLinearRingGeometry(cVerticesArray); uint nLineColor = 0xFF00FF00; uint nFillColor = 0x7FFF0000; AltitudeTypeCode eAltitudeTypeCode = AltitudeTypeCode.ATC_ON_TERRAIN; string gid = CreateGroup("AnalysisTEMP"); pITPolygon = sgworld.Creator.CreatePolygon(cRing, nLineColor, nFillColor, eAltitudeTypeCode, gid, "Polygon"); IPolygon polygonGeometry = pITPolygon.Geometry as IPolygon; polygonGeometry.StartEdit(); foreach (ILinearRing ring in polygonGeometry.Rings) { double dx = pIWPInfo.Position.X; double dy = pIWPInfo.Position.Y; double dh = pIWPInfo.Position.Distance; ring.Points.AddPoint(dx, dy, dh); ring.Points.DeletePoint(0); } IGeometry editedGeometry = polygonGeometry.EndEdit(); pITPolygon.Geometry = editedGeometry; } else { IPolygon polygonGeometry = pITPolygon.Geometry as IPolygon; polygonGeometry.StartEdit(); foreach (ILinearRing ring in polygonGeometry.Rings) { double dx = pIWPInfo.Position.X; double dy = pIWPInfo.Position.Y; double dh = pIWPInfo.Position.Distance; ring.Points.AddPoint(dx, dy, dh); } IGeometry editedGeometry = polygonGeometry.EndEdit(); pITPolygon.Geometry = editedGeometry; } } return false; } private void button1_Click(object sender, EventArgs e) { pbhander = "TerrainPolygon"; sgworld.Window.SetInputMode(MouseInputMode.MI_COM_CLIENT); } private void button2_Click(object sender, EventArgs e) { string gid = sgworld.ProjectTree.FindItem("AnalysisTEMP"); if (gid != null && gid != "") { sgworld.ProjectTree.DeleteItem(gid); } } private String CreateGroup(String GroupName) { string gid = sgworld.ProjectTree.FindItem(GroupName); if (gid != null && gid != "") { return gid; } else { return sgworld.ProjectTree.CreateLockedGroup(GroupName); } } } }
相关文章推荐
- C#实现数据库事务处理的简单示例代码
- C#实现数据库事务处理的简单示例代码
- C#摄像头实现拍照功能的简单代码示例
- C#中如何实现AVI视频的播放并且需要在播放视频的同时在视频上进行一些简单线条的绘制?
- 贴下百度博客自动加好友的简单代码示例!!(c#.net实现)
- C#摄像头实现拍照功能的简单代码示例
- C#摄像头实现拍照功能的简单代码示例
- C#摄像头实现拍照功能的简单代码示例
- C#摄像头实现拍照功能的简单代码示例
- C#动态数据绘图graphic代码简单示例
- C#摄像头实现拍照功能的简单代码示例
- C# 如何实现简单的Socket通信(附示例) 推荐
- C#使用互斥量(Mutex)实现多进程并发操作时多进程间线程同步操作(进程同步)的简单示例代码及使用方法
- jQuery实现的简单动态添加、删除表格功能示例
- Three.js实现绘制字体模型示例代码
- Three.js如何实现雾化效果示例代码
- C#实现的简单整数四则运算计算器功能示例
- C#实现的简单随机数产生器功能示例
- 利用C#实现最基本的小说爬虫示例代码
- Java线程安全的计数器简单实现代码示例