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 ...
随机推荐
- 【读书笔记】iOS-微信公众平台开发最佳实践
一,微信是由腾讯公司广州研发中心产品团队开发,该团队经理张小龙被称为“微信之父”,公司总裁马化腾确定该产品名称为“微信”. 二,常见问题及解决方案. 1,请求URL超时. 这种情况一般是由于服务器网速 ...
- Django 拾遗
1.python_2_unicode_compatible装饰器 from django.db import models from django.utils.encoding import pyth ...
- MySQL8的注意点
最近使用MySQL8,发现两个问题,略记如下: 1. 新建用户无法使用JDBC或者Navicat等登陆,报错信息为 认证失败 ,原因为 新版 MySQL 认证插件变化(变为caching_sha2_p ...
- Djanggo ORM操作
Django ORM那些相关操作 一般操作 看专业的官网文档:https://docs.djangoproject.com/en/1.11/ref/models/querysets/,做专业的程序员 ...
- 使用sklearn机器学习库实现线性回归
import numpy as np # 导入科学技术框架import matplotlib.pyplot as plt # 导入画图工具from sklearn.linear_model imp ...
- Asp.net 中ViewState,cookie,session,application,cache的比较
Asp.net 中的状态管理维护包含ViewState,cookie,session,application,cache五种方式,以下是它们的一些比较: 1.存在于客户端还是服务端 客户端: view ...
- Excel的快速录入
数据有效性: 1.选择要限制数据有效性的区域: 2.点开[数据]选项卡选择”数据验证“: 3.[设置]中选择”序列": 4.若手动输入则需要将内容使用英文符号分割开来(比如:A级,B级): ...
- Flask入门和快速上手
目录 Flask入门和快速上手 python三大主流框架对比 Flask安装 依赖 可选依赖 创建flask项目 flask最小应用--hello word 非法导入名称 调试模式 路由 唯一的 UR ...
- 【PAT】B1077 互评成绩计算(20 分)
录入成绩,直接将所有同学给的分数相加,排序,减去最大和最小 省去了遍历一次 注意四舍五入 #include<cstdio> #include<string.h> #includ ...
- php程序开发之实现网页跳转
php程序开发之实现网页跳转的三种方式 2017年04月16日 20:44:14 阅读数:3352 PHP目前是用来开发WEB项目的首选语言.Web项目中,从一个网页跳转到另一个网页是最常用的技术之一 ...