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 ...
随机推荐
- 2018-04-21 搭建Python官方文档翻译环境
参考PEP 545 -- Python Documentation Translations fork的编译脚本: nobodxbodon/docsbuild-scripts, 添加了zh语言标签, ...
- video自动禁止全屏
在微信浏览器.苹果等其他浏览器,里面使用video标签,会自动变成全屏,改成下面就好了,起码可以在video标签之上加入其他元素 webkit-playsinline playsinline x ...
- Android 开发学习笔记
1.Genymotion 解决虚拟镜像下载速度特别慢的问题 http://blog.csdn.net/qing666888/article/details/51622762 2.
- 数据库开源框架GreenDao的使用解析
数据库开源框架GreenDao的使用解析 1,GreenDao概述 1),greenDao是一个当下十分火热的数据库开源框架,或者说是一个帮助Android开发者将数据存到SQLite中的一个开源项目 ...
- mysql的高级特性-存储过程
定义: 存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令. 语法: DELIMITER // 声明语句结束符,用于区分; CEATE PROCED ...
- 盐城 - 开设IT公司的好地方
盐城:位于江苏省北部,这一好像只能算三线的城市,不久前当选为“国家中心城市”.在全国仅有的50城市中名列34.它可成为发展IT产业的好地方. (1)人才济济.从这里走出去的高级人才数不胜数,留在这里的 ...
- 在 Azure Resource Manager 模板中使用托管磁盘
本文介绍使用 Azure Resource Manager 模板预配虚拟机时托管与非托管磁盘之间的差异. 这有助于将现有模板从使用非托管磁盘更新为使用托管磁盘. 我们将使用 101-vm-simple ...
- centos7发行版号对应基于RHEL Source(版本)对照表
基础分布 详情地址:https://wiki.centos.org/Download 存档版本 CentOS Linux 7 发布 基于RHEL Source(版本) 存档的树 7(1804) 7.5 ...
- Paramiko和堡垒机实现
一.Paramiko paramiko模块,基于SSH用于连接远程服务器并执行相关操作. 1.安装:pip install paramiko 2.SSHClient:用于连接远程服务器并执行基本命令 ...
- system函数的应用
system函数的两个简单应用 1.调用cmd命令.例:(打开计算器) #include <stdlib.h> int main() { system("calc"); ...