SkylineGlobe 6.5 如何实现简单多边形的动态绘制 C#示例代码
在Skyline的TEPro软件中,我们可以很容易地绘制出多边形。
那么,在二次开发过程中,该如何绘制一个简单的多边形呢?
通过下面的示例代码,我们可以很容易完成这一项工作。
其中,重点需要了解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, ,
- 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();
- }
- 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);
- }
- }
- }
- }
SkylineGlobe 6.5 如何实现简单多边形的动态绘制 C#示例代码的更多相关文章
- SkylineGlobe 6.6 三维地图上实现自定义右键菜单示例代码
1.OnRButtonDown.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
- iOS可视化动态绘制连通图
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- 【译】用Fragment创建动态的界面布局(附Android示例代码)
原文链接:Building a Dynamic UI with Fragments 为了在Android上创建一个动态和多视图的用户界面,你需要封装UI控件和模块化Activity的行为,以便于你能够 ...
- C# 动态绘制任务栏图标的实现
通常我们在做一个应用时会遇到这样的需求:将收到的消息条数显示到任务栏,比如如下的效果 怎么实现呢? 答案是采用WindowsAPICodePack实现,具体参见:Windows 7 任务栏开发 之 覆 ...
- Linux下c函数dlopen实现加载动态库so文件代码举例
dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了. ...
- 教你怎么用Mono Cecil - 动态注入 (注意代码的注释)
原文 教你怎么用Mono Cecil - 动态注入 (注意代码的注释) 使用 Mono Cecil 进行反编译:using Mono.Cecil; using Mono.Cecil.Cil; //.. ...
- golang动态加载原生代码思路
golang动态加载原生代码思路(非plugin,非so文件.使用mmap形式运行机器码,可释放) 1.用go tool objdump,可以看到任意函数的机器码.汇编指令.偏移.(go源码下面有一个 ...
- iOS可视化动态绘制连通图(Swift版)
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- SkylineGlobe TerraExplorer Pro 7.0 Web 控件版 第一行示例代码
SkylineGlobe TerraExplorer Pro 7.0 是原生的64位应用程序,在Web端用插件方式开发的第一行示例代码如下: 常规代码,需要IE64位: <!DOCTYPE ht ...
随机推荐
- phothoshop 快捷键
界面构成: 1 菜单栏 2 工具箱 3 工具属性栏 4 悬浮面板(辅助作用) CTRL + N 新建对话框(对画布进行设置) 回车确定 CTRL + O (字母) 打开对话框(选择图片) 画布的三种显 ...
- 【读书笔记】iOS-PhoneGap
以前,用PhoneGap平台创建的应用在提交到AppStore中的时候可能会遇到一些问题,不过PhoneGap 0.8.0版本已经很好地解决了这个问题,而且苹果公司也允许将通过PhoneGap构建的应 ...
- (网页)textarea去掉回车换行
转自CSDN: 1,把textarea内输入的内容中有回车换行的转成<br />传给后台, var content = $("#text").val().replace ...
- weblogic系列漏洞整理 -- 4. weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271、CVE-2017-3506)
目录 四. weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271) 0. 漏洞分析 1. 利用过程 2. 修复建议 一.weblogic安装 http://www.cnb ...
- mongodb 配置文件
本文档是在mongodb为3.4下编写的,仅作为参考,详细内容请参考:https://docs.mongodb.com/manual/reference/configuration-options/# ...
- BootStrap DateTimePicker的使用
使用方法 1. 添加资源 2. 编写代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Conte ...
- SQL Server 临时表和表变量系列之选择篇
原文地址:https://yq.aliyun.com/articles/69187 摘要: # 摘要 通过前面的三篇系列文章,我们对临时表和表变量的概念.对比和认知误区已经有了非常全面的认识.其实,我 ...
- oracle启动的三个阶段
startup nomount 时,数据库状态为 started; alter database mount 时, 状态为 mounted; alter database open 时,状态为 ope ...
- windows 2003 IIS 设置 FTP被动模式
IIS FTP 将21端口更改为xx123端口: 更改数据端口: cd c:/Inetpub/AdminScripts cscript.exe adsutil.vbs set /MSFTPSVC/Pa ...
- Linux 小知识翻译 - 「Linux的吉祥物企鹅叫什么名字?」
这次说说Linux的吉祥物 *企鹅* 都知道Linux的吉祥物是企鹅,但是这个企鹅叫什么名字呢? 它的名字就是「Tux」,注意可不是「Tax」(税收). 具体参考 wiki:中文解释 英文的解释更为 ...