2011年12月9日
#
2011年4月,Skyline推出了最新版本的软件(version 6.0),相对于以前版本软件,新版本软件改善和增加了很多新能功能;同时,开放的APIs也进行了很大的调整,变得更加丰富合理、简单易用。那么,新版本开放的APIs相对于早期的APIs都有哪些明显变化和改进呢?
1. TerraExplorer与SGWorld的关系?
在新版本的开发及运行环境中,保持了对以前版本APIs支持的兼容性,通过TerraExplorer接口依然可以调用早期版本的功能APIs;但如果使用新版本的APIs,则需要通过SGWorld接口来实现;不同时期的接口可以混合使用;
2. 从软件UI上的变化对应IMenu到ICommand6的变化?
在以前版本中,用户通过IMenu接口可以实现对TerraExplorer(包括View和Pro版本)软件菜单功能的快速调用,而新版本软件的界面风格上做了很大的改变,如果要实现对菜单功能的快速调用,则需要通过ICommand6接口来实现;
3. 从ILayer5到ILayer6的变化?
ILayer6相对ILayer5改进了很多,首先是调整了图层组织结构,增加了FeatureGroups6、FeatureGroup6、Features6 、Feature6、IFeatureAttributes6、IFeatureAttribute6等对象;其次是增加了实现拓扑查询的ExecuteSpatialQuery方法;另外,ILayer6对象也支持新建、编辑和保存;
4. ClientData属性的变化?
导入Skyline的SHP文件,SHP文件原有的属性信息,在Skyline5版本的时候,是保存在对象的ClientData属性中的;但在Skyline6版本中,那些信息是记录在IFeature6对象的IFeatureAttributes6中的,而没有保存到ClientData属性中;ClientData属性仅用来记录用户需要自定义增加的属性字段及信息;
5. 创建几何对象方法的变化?
利用新版本的APIs创建几何对象,需要先创建IPosition6或者IGeometry来确定对象的几何结构和位置,进而才能创建ITerrainLabel6、ITerrainModel6、ITerrainPolyline6、ITerrainBuilding6等对象;IGeometry可以通过ICreator6的IGeometryCreator来创建;
6. 新增几何对象拓扑关系的判断和计算?
通过ISpatialRelation和ISpatialOperator接口,能够实现几何对象拓扑关系的判断和计算,进而实现相对复杂空间分析计算,如缓冲区分析等;
7. 多边形属性的增加?
多边形IPolygon接口,增加了Area、Centroid、Dimension、Envelope等属性,这样可以更方便实现面积量算、根据对象的外接矩形实现定位等功能;
8. IColor6接口的增加?
通过这个接口,更容易实现几何对象颜色和透明度的定义和设置;
9. 全新的IAnalysis6接口?
在新版本的APIs中,Skyline首次开放了IAnalysis6接口,其中包括实现淹没分析、通视分析、视域分析、剖面分析等功能的方法;
10. 从ITerrainRoute5到IPresentation6的变化?
ITerrainRoute5在新版本中升级成了IPresentation6,增加了很多属性和方法,并直接提供了输出成视频文件的方法,提供了强大的自定义PPT汇报功能;
11. ITimeSpan6和IDateTime6的结合?
利用新增加的IDateTime6和ITimeSpan6接口,可以很好地设置FLY工程中实体对象的可见周期,并能够通过Time Slider进行灵活控制;
12. 对WKT和WKB支持的增加?
用户可以通过Well-known text (WKT)来定义空间投影坐标系和空间几何对象的空间信息;也可以通过Well-known Binary (WKB)来定义空间几何对象的空间信息;
13. IShadow6的增加?
通过IShadow6,可以创建、显示、隐藏和删除三维对象的阴影效果;在展示创建好的对象阴影效果时,需要打开太阳光源和使用Time Slider进行控制;
14. 新APIs更好地支持Javascript开发?
利用新APIs进行Web开发,可以解决以前APIs中一个函数方法多个返回值的问题,这样就可以完全使用Javascript进行Skyline的B/S系统开发;
2011年5月16日
#
6.7 IRender5
主要用来获取当前屏幕信息、鼠标信息和三维场景中的地理坐标信息,以及它们之间的坐标转换等;
|
Quality |
当前3D窗口中渲染的MPT文件的质量; |
|
HudMode |
定义HUD的显示设置(包括导航,指北等等); |
|
GetRenderRect |
返回3D窗口中渲染的区域范围,以像素表示(对应屏幕Left,Top,Width,Height); |
|
ScreenToTerrain |
将屏幕上的像素转换成地形坐标,并返回绝对高程值; |
|
GetMouseInfo |
本方法返回鼠标位置(屏幕坐标); |
|
SetMouseInputMode |
本方法定义鼠标的输入模式,不同的输入模式允许你控制不同的鼠标行为; |
|
SetMouseCursor |
本方法用来定义设置鼠标光标。为了改变光标你必须首先设置光标输入模式为1(MI_COM_CLIENT); |
|
ScreenToWorld |
本方法返回屏幕上所指像素点的地形坐标,如果选择的像素是一个对象的一部分,而不是地形,对象的ObjectID被返回; |
|
WorldToScreen |
本方法返回一个特定地形坐标是否在3D窗口中的一个指示,如果是,给出特定点的屏幕坐标,仅能在IRender4中使用。 |
|
SetHUDLayer |
本方法允许一个HUD层的绘画定制,以流的方式进行保存,将图绘制在3D窗口中; |
|
GetMouseInputMode |
本方法获得鼠标的输入模式(仅在IRender5中使用); |
代码示例:
【C#】
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 ExCodeIRender
{
public partial class Form1 : Form
{
private TerraExplorer TE;
private ITerraExplorer51 TE51;
private IRender5 IRender;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.TE = new TerraExplorerClass();
this.TE51 = (ITerraExplorer51)TE;
IRender = (IRender5)TE;
this.TE.OnFrame += new _ITerraExplorerEvents5_OnFrameEventHandler(TE_OnFrame);
TE51.Load(Application.StartupPath + "\\Default.fly");
}
void TE_OnFrame()
{
object plongFlags, plSX, plSY;
IRender.GetMouseInfo(out plongFlags,out plSX,out plSY);
Double dx, dy, dh;
IRender.ScreenToTerrain(Convert.ToInt32(plSX), Convert.ToInt32(plSY), out dx, out dy, out dh);
string scontent = "当前鼠标点坐标:" + "\r\n$X:" + dx.ToString() + "\r\n$Y:" + dy.ToString() + "\r\n$H:" + dh.ToString();
this.label1.Text = scontent;
}
}
}
【javascript】
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="IRender5.aspx.cs" Inherits="ExCode_IRender5" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Skyline二次开发教程【配套示例】</title>
<script type ="text/javascript">
function Init() {
var TE = _$SGCreateTEObj();
var ITerraExplorer = TE.interface("ITerraExplorer51");
ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");
ITerraExplorer.AttachEvent("OnFrame", OnFrame);
}
function OnFrame()
{
var myparam = new _$SGWorldParam();
GetMouseInfo(myparam);
var myparam2 = new _$SGWorldParam();
GetWorldParam(myparam.x, myparam.y, myparam2);
var scontent = "当前鼠标点坐标:" + "\r\n$X:" + myparam2.x + "\r\n$Y:" + myparam2.y + "\r\n$H:" + myparam2.h;
window.document.getElementById("Title").innerHTML = scontent;
}
//------------------------------------------------------------
// 创建三维对象 赵贺 2009.01.25.
//------------------------------------------------------------
function _$SGCreateTEObj() {
var obj = window.document.getElementById("TE");
if (obj == null) {
obj = document.createElement('object');
document.body.appendChild(obj);
obj.name = "TE";
obj.id = "TE";
obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";
}
return obj;
}
//------------------------------------------------------------
// 定义集合参数 赵贺 2009.01.25.
//------------------------------------------------------------
function _$SGWorldParam() {
this.x = 0;
this.y = 0;
this.h = 0;
this.yaw = 0;
this.pitch = 0;
this.roll = 0;
this.OID = 0;
this.OType = 0;
}
</script>
<script type ="text/vbscript">
'------------------------------------------------------------
' GetMouseInfo 得到鼠标信息 赵贺 2009.02.18.
'------------------------------------------------------------
sub GetMouseInfo(param)
Dim IRender
Set IRender = TE.interface("IRender5")
IRender.GetMouseInfo longFlags,longScreenX,longScreenY
param.x = longScreenX
param.y = longScreenY
param = longFlags
end sub
'------------------------------------------------------------
' IRender 坐标转换 赵贺 2009.01.25.
'------------------------------------------------------------
sub GetWorldParam(x,y,param)
Dim objType, dX, dY, dH, objID
objType = 0
'Dim TE
'Set TE = _$SGCreateTEObj()
Dim IRender
Set IRender = TE.interface("IRender5")
IRender.ScreenToWorld x, y,objType,dX,dH,dY,objID
param.x=dX
param.y=dY
param.h=dH
param.OID=objID
param.OType=objType
param=objID
end sub
</script>
</head>
<body onload = "Init()">
<form id="form1" runat="server">
<div id = "Title"></div>
<div id="Main">
<object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"
width="521" height="521">
</object>
</div>
</form>
</body>
</html>
6.6 IContainer2
主要用来设置TerraExplorer中的泡泡等弹出信息和超链接信息等,提供添加、删除、编辑指定容器及其内容的方法;
|
SetURL |
设置超链接地址; |
|
RemoveURL |
移除URL; |
|
BringToFront |
将设置的URL文件在容器前端显示; |
|
SetMessageBarText |
设置Message Bar Container信息; |
|
HTMLPopup |
显示HTML浮动窗口,可以显示文本或者网页内容; |
代码示例:
【C#】
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 ExCodeIContainer
{
public partial class Form1 : Form
{
private TerraExplorer TE;
private ITerraExplorer51 TE51;
private IContainer2 IContainer;
public Form1()
{
InitializeComponent();
this.TE = new TerraExplorerClass();
this.TE51 = (ITerraExplorer51)TE;
this.IContainer = (IContainer2)TE;
TE51.Load(Application.StartupPath + "\\Default.fly");
}
private void btnStart_Click(object sender, EventArgs e)
{
if (this.btnStart.Text == "打开")
{
IContainer.HTMLPopup(MsgType.TYPE_TEXT, 1, 1, 300, 100, "Skyline", "感谢您对Skyline的支持!", 0, -1);
this.btnStart.Text = "关闭";
}
else
{
IContainer.RemoveURL(5, "Skyline");
this.btnStart.Text = "打开";
}
}
}
}
【javascript】
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="IContainer2.aspx.cs" Inherits="ExCode_IContainer2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Skyline二次开发教程【配套示例】</title>
<script type ="text/javascript">
function Init() {
var TE = _$SGCreateTEObj();
var ITerraExplorer = TE.interface("ITerraExplorer51");
ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");
}
function Test(obj) {
var TE = _$SGCreateTEObj();
var IContainer = TE.interface("IContainer2");
if (obj.value == "打开") {
IContainer.HTMLPopup(0, 1, 1, 300, 100, "Skyline", "感谢您对Skyline的支持!", 0, -1);
obj.value = "关闭";
}
else {
IContainer.RemoveURL(5, "Skyline");
obj.value = "打开";
}
}
//------------------------------------------------------------
// 创建三维对象 赵贺 2009.01.25.
//------------------------------------------------------------
function _$SGCreateTEObj() {
var obj = window.document.getElementById("TE");
if (obj == null) {
obj = document.createElement('object');
document.body.appendChild(obj);
obj.name = "TE";
obj.id = "TE";
obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";
}
return obj;
}
</script>
</head>
<body onload = "Init()">
<form id="form1" runat="server">
<div id = "Title">
<input id="Button1" type="button" value="打开" onclick = "Test(this)" />
</div>
<div id="Main">
<object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"
width="521" height="521">
</object>
</div>
</form>
</body>
</html>
6.5 ITerrain5
主要用来获取三维场景中基础信息,包括MPT的投影信息、坐标信息、地形高度和地表透明度等;
|
MPTName |
返回当前使用的MPT文件名,如果当前未装载MPT文件,则返回“NO_MPT”; |
|
GroupKey |
定义工程的组键值; |
|
SystemKey |
定义工程的坐标系统键值; |
|
DatumKey |
定义工程的数据键值; |
|
UnitKey |
定义测量单位; |
|
EPSG |
定义工程的EPSG代码; |
|
Description |
用户定义描述(TerraExplorer Pro中Project中的Description设置); |
|
Opacity |
地表透明度(0.1-1); |
|
GetGroundHeight |
用此方法获取当前坐标距离地面的距离高度; |
|
GetGroundHeightEx |
用此方法获取当前坐标距离地面的距离高度,同时如果该坐标点上存有对象,可以获得该对象的ObjectID; |
|
GetExtent |
返回当前所使用的地形数据的范围; |
代码示例:
【C#】
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 ExCodeITerrain
{
public partial class Form1 : Form
{
private TerraExplorer TE;
private ITerraExplorer51 TE51;
private ITerrain5 ITerrain;
public Form1()
{
InitializeComponent();
this.TE = new TerraExplorerClass();
this.TE51 = (ITerraExplorer51)TE;
ITerrain = (ITerrain5)TE;
TE51.Load(Application.StartupPath + "\\Default.fly");
}
private void btnStart_Click(object sender, EventArgs e)
{
MessageBox.Show("$MPTName:"+ITerrain.MPTName+"\r\n"+
"$GroupKey:" + ITerrain.GroupKey + "\r\n" +
"$SystemKey:" + ITerrain.SystemKey + "\r\n" +
"$DatumKey:" + ITerrain.DatumKey + "\r\n" +
"$UnitKey:" + ITerrain.UnitKey + "\r\n" +
"$EPSG:" + ITerrain.EPSG.ToString() + "\r\n" +
"$Description:" + ITerrain.Description + "\r\n" +
"$Opacity:"+ITerrain.Opacity.ToString());
}
}
}
【javascript】
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ITerrain5.aspx.cs" Inherits="ExCode_ITerrain5" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Skyline二次开发教程【配套示例】</title>
<script type ="text/javascript">
function Init() {
var TE = _$SGCreateTEObj();
var ITerraExplorer = TE.interface("ITerraExplorer51");
ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");
}
function Test() {
var ITerrain = TE.interface("ITerrain5");
alert("$MPTName:" + ITerrain.MPTName + "\r\n" +
"$GroupKey:" + ITerrain.GroupKey + "\r\n" +
"$SystemKey:" + ITerrain.SystemKey + "\r\n" +
"$DatumKey:" + ITerrain.DatumKey + "\r\n" +
"$UnitKey:" + ITerrain.UnitKey + "\r\n" +
"$EPSG:" + ITerrain.EPSG + "\r\n" +
"$Description:" + ITerrain.Description + "\r\n" +
"$Opacity:" + ITerrain.Opacity);
}
//------------------------------------------------------------
// 创ä建三维对象 赵贺 2009.01.25.
//------------------------------------------------------------
function _$SGCreateTEObj() {
var obj = window.document.getElementById("TE");
if (obj == null) {
obj = document.createElement('object');
document.body.appendChild(obj);
obj.name = "TE";
obj.id = "TE";
obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";
}
return obj;
}
</script>
</head>
<body onload = "Init()">
<form id="form1" runat="server">
<div id = "Title">
<input id="Button1" type="button" value="测试" onclick = "Test()" />
</div>
<div id="Main">
<object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"
width="521" height="521">
</object>
</div>
</form>
</body>
</html>
摘要: 6.4 IInformationTree5主要用来组织管理信息树中的全部对象(包括组和图层等对象),实现对象遍历、矢量数据导入、对象删除等功能;CreateGroup在信息树窗口中创建一个新组;CreateLockedGroup创建一个锁定组。当组被锁定的时候,TerraExplorer View用户不能展开该组;RenameGroup重命名一个组;ExpandGroup展开组或者折叠该组;GetItemName使用ItemID获取该子项的名称,TerraExplorer Viewer支持本方法;DeleteItem删除树中的一个子项;SetParent移动条目到不同的组;GetNextIte
阅读全文
摘要: 6.3 IObjectManager51主要用来实现对象的创建、编辑等操作,结合ITerraExplorerObject5等对象接口,来实现各种类型对象的三维渲染功能;CreatePolyline创建线对象;Create2DPolygon创建多边形对象;CreateRectangle创建矩形对象;CreateRegularPolygon创建正多边形对象;CreateCircle创建圆对象;Create3DPolygon创建三维多边形对象;CreateBuilding创建建筑物对象;CreateBox创建箱子对象;CreatePyramid创建金字塔对象;CreateCylinder创建圆柱体对
阅读全文
6.2 IPlane5
主要用来控制相机(三维场景观察点)的坐标位置、角度、速度等参数;提供实现飞行定位和浏览缩放的操作方法;
|
Speed |
设置飞行速度,可用GetSpeed方法来获取速度; |
|
FieldOfView |
相机视域范围; |
|
FlyTo |
飞行到某一位置; |
|
SetPosition |
设置跳转到视角的位置; |
|
MovePosition |
设置移动到视角的位置; |
|
GetPosition |
获取当前视角的位置; |
|
FlyToObject |
飞行到某一对象; |
|
SetSpeed |
设置相机速度; |
|
GetSpeed |
获取相机的速度; |
|
Zoom |
缩放操作; |
|
GetPositionEx |
获取相机的位置和方向; |
代码示例:
【C#】
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 ExCodeIPlane
{
public partial class Form1 : Form
{
private TerraExplorer TE;
private ITerraExplorer51 TE51;
private IPlane5 IPlane;
public Form1()
{
InitializeComponent();
this.TE = new TerraExplorerClass();
this.IPlane = (IPlane5)TE;
this.TE51 = (ITerraExplorer51)TE;
TE51.Load(Application.StartupPath + "\\Default.fly");
}
private void btnFlyTo_Click(object sender, EventArgs e)
{
new Random().Next(1,36);
Random rd = new Random(DateTime.Now.Millisecond);
IPlane.FlyTo(128 + 2 * rd.Next(0, 10), 36 + 2 * rd.Next(0, 10), 1111111, 1000000, 0, -89, "FlyToLocation");
}
private void btnZoom_Click(object sender, EventArgs e)
{
object dX, dH, dY, dYaw, dPitch, dRoll, dcYaw, dcPitch;
IPlane.GetPosition(out dX, out dY, out dH, out dYaw, out dPitch, out dRoll, out dcYaw, out dcPitch);
if (Convert.ToDouble(dH) > 100000)
{
IPlane.Zoom(Convert.ToDouble(dH) / 100);
}
else
{
IPlane.Zoom(Convert.ToDouble(dH) * 100);
}
}
}
}
【javascript】
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="IPlane5.aspx.cs" Inherits="ExCode_IPlane5" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Skyline二次开发教程【配套示例】</title>
<script type ="text/javascript">
function Init() {
var TE = _$SGCreateTEObj();
var ITerraExplorer = TE.interface("ITerraExplorer51");
ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");
}
//缩放
function ZoomFlyTo() {
var IPlane = TE.interface("IPlane5");
var myparam = new _$SGWorldParam();
GetPosition(myparam);
if (myparam.h > 100000) {
IPlane.Zoom(myparam.h / 100);
}
else {
IPlane.Zoom(myparam.h * 100);
}
}
//定位
function RadomFlyTo() {
var IPlane = TE.interface("IPlane5");
IPlane.FlyTo(128 + 20 * Math.random(), 36 + 20 * Math.random(), 1111111, 1000000, 0, -89, "FlyToLocation");
}
//------------------------------------------------------------
// 创建三维对象 赵贺 2009.01.25.
//------------------------------------------------------------
function _$SGCreateTEObj() {
var obj = window.document.getElementById("TE");
if (obj == null) {
obj = document.createElement('object');
document.body.appendChild(obj);
obj.name = "TE";
obj.id = "TE";
obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";
}
return obj;
}
//------------------------------------------------------------
// 定义集合参数 赵贺 2009.01.25.
//------------------------------------------------------------
function _$SGWorldParam() {
this.x = 0;
this.y = 0;
this.h = 0;
this.yaw = 0;
this.pitch = 0;
this.roll = 0;
this.OID = 0;
this.OType = 0;
}
</script>
<script type ="text/vbscript">
'------------------------------------------------------------
' IPlane GetPosition 赵贺 2009.01.25.
'------------------------------------------------------------
sub GetPosition(param)
Dim dx,dy,dh,dyaw,dpitch,droll,dcyaw,dcpitch
Dim IPlane
Set IPlane = TE.interface("IPlane5")
IPlane.GetPosition dx,dy,dh,dyaw,dpitch,droll,dcyaw,dcpitch
param.x = dx
param.y = dy
param.h = dh
param.yaw = dyaw+dcyaw
param.pitch = dpitch+dcpitch
param.roll = droll
param = dh
end sub
</script>
</head>
<body onload = "Init()">
<form id="form1" runat="server">
<div id = "Title">
<input id="Button1" type="button" value="缩放" onclick = "ZoomFlyTo()" />
<input id="Button2" type="button" value="定位" onclick = "RadomFlyTo()" />
</div>
<div id="Main">
<object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"
width="521" height="521">
</object>
</div>
</form>
</body>
</html>
6.1 ITerraExplorer51
主要用来获取安装在客户端的Skyline软件的版本信息及设置的工程参数等信息;提供实现数据加载、保存和事件接口的初始化等方法;
下面是对ITerraExplorer51的属性和方法的概要说明:
|
Type |
判断客户端使用的是Pro还是Viewer; |
|
FlyName |
返回当前工程中加载的FLY文件名,没有FLY文件则返回NO_FLY ; |
|
DisplayErrorMessages |
设置为false时,COM方法调用期间如果发生错误则不显示错误信息。反之,显示错误信息; |
|
ProjectParam |
FLY工程参数环境设置; |
|
OptionParam |
TerraExplorer参数环境设置; |
|
Load |
加载FLY文件; |
|
SetCPUSavingMode |
设置CPU保存模式; |
|
GetUserUnits |
获取客户端坐标系统的使用单位; |
|
LoadEx |
加载FLY文件,需要输入用户名和密码; |
|
GetTEVersion |
获取支持的软件版本; |
|
Save |
保存当前的工程到FLY文件中; |
|
SaveAs |
保存当前的工程到指定的FLY文件中,不支持TerraExplorer Viewer ; |
|
SetParam |
保留,当前不能使用; |
|
GetParam |
保留,当前不能使用; |
|
AttachEvent |
保留,当前不能使用; |
|
DetachEvent |
保留,当前不能使用; |
代码示例:(操作系统:Windows XP SP3;代码调试环境VS2010,DotNet4.0,IE7,IIS6.0)
【C#】
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 ExCodeProject
{
public partial class Form1 : Form
{
private TerraExplorer TE;
private ITerraExplorer51 TE51;
public Form1()
{
InitializeComponent();
this.TE = new TerraExplorerClass();
this.TE51 = (ITerraExplorer51)TE;
TE51.Load(Application.StartupPath+"\\Default.fly");
}
}
}
【javascript】
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Skyline二次开发教程【配套示例】</title>
<script type ="text/javascript">
function Init() {
var TE = _$SGCreateTEObj();
var ITerraExplorer = TE.interface("ITerraExplorer51");
ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");
}
//------------------------------------------------------------
// 创建三维对象 赵贺 2009.01.25.
//------------------------------------------------------------
function _$SGCreateTEObj() {
var obj = window.document.getElementById("TE");
if (obj == null) {
obj = document.createElement('object');
document.body.appendChild(obj);
obj.name = "TE";
obj.id = "TE";
obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";
}
return obj;
}
</script>
</head>
<body onload = "Init()">
<form id="form1" runat="server">
<div id = "Title"></div>
<div id="Main">
<object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"
width="521" height="521">
</object>
</div>
</form>
</body>
</html>
2011年5月11日
#
我们知道在Skyline的TEP软件中可以添加多种矢量图层,对于常见的SHP文件,我们如何通过接口来开发实现呢?
下面代码是基于C#开发的,供大家参考:
string XMLLayerInfo = "<PlugData><LayerName>" +
// 这里是要加载的shp文件所在的路径
Application.StartupPath + "//shp//DC_FF_Parks.shp" +
"</LayerName><PlugType>shape</PlugType><Annotation>0</Annotation><Feature>1</Feature>" +
"<AttributesToLoad>Name,County</AttributesToLoad>" + //这里是设置要加载的shp文件的属性字段
"<StreamedLayer>1</StreamedLayer></PlugData>";
iLyr = IInfoTree.CreateLayer("point", XMLLayerInfo, 0);
iLyr.Load();
iLyr.DisplayAs(ObjectTypeCode.OT_LABEL);
iLyr.SetFeature();
iLyr.SetValue("Text", PropertyValueType.PROPERTY_CLASSIFICATION, "<Classification FuncType='0'><Class><Value>[NAME]</Value></Class><DefaultValue>0</DefaultValue></Classification>");
//==Appearance
iLyr.SetProperty("Activation Action", 1);
iLyr.SetProperty("Line to Ground", 0);
iLyr.SetProperty("Line Length", 1000);
iLyr.SetProperty("Line Color", 300);
//==Text Options
iLyr.SetProperty("Text Color", 255);
iLyr.SetProperty("Text Size", 12);
iLyr.SetProperty("Font", "宋体");
iLyr.SetProperty("Bold", 1);
iLyr.SetProperty("Underline", 1);
iLyr.SetProperty("Italic", 1);
iLyr.SetProperty("Multiline Justification", 0);
iLyr.SetProperty("Background Color", 100);
iLyr.SetProperty("Background Opacity", 0);
iLyr.SetProperty("Lock Mode", 0);
//==Image Options
iLyr.SetProperty("Image file", "C:\\Program Files\\Skyline\\TerraExplorer Pro\\Tools\\Data-Library\\Icons\\Letters\\Letter-a.gif");
//==Position
iLyr.SetProperty("Altitude Method", 1);
iLyr.SetProperty("Altitude", 1000);
iLyr.SetProperty("Yaw", 10);
iLyr.SetProperty("Pitch", 10);
iLyr.SetProperty("Roll", 10);
string[] myStrings = new string[9];
myStrings[0] = "0,0";
iLyr.SetProperty("Pivot Alignment", myStrings[0]);
//==Geometry
iLyr.SetProperty("Scale", 100);
iLyr.SetProperty("Limit Growth", 1);
iLyr.SetProperty("Min. Viewing Height", 100);
iLyr.SetProperty("Smallest Visible Size", 10);
//==Text&Image Alignment
iLyr.SetProperty("Text Relative to Image", 0);
iLyr.SetProperty("Text Alignment", myStrings[0]);
//==General
iLyr.SetProperty("Show In Basic", 0);
//---------------------------------------------------
ITerraExplorerMessage5 cMessage = null;
string tMessage = "Hello Skyline";
MsgType eMsgType = MsgType.TYPE_TEXT;
cMessage = IObjectManager.CreateMessage(MsgClient.CLIENT_POPUP, tMessage, eMsgType, _HTML_POPUP_FLAGS.HTML_POPUP_ALLOW_RESIZE, "属性信息", -1, 0, 0, 300, 300, 0);
iLyr.SetProperty("Message", cMessage.ID.Substring(cMessage.ID.IndexOf('_') + 1, (cMessage.ID.Length - cMessage.ID.IndexOf('_') - 1)));
//---------------------------------------------------
iLyr.SetProperty("Tool Tip", "公园");
iLyr.SetProperty("Default Viewing Distance", 1000);
说明:上面的代码实现了对点类型的SHP文件的加载和在三维场景中的渲染显示。
2010年6月6日
#
以VS2008开发工具以为:
1、创建Visual C# .NET framework 3.0 Windows Application(WPF) 工程
2、添加 reference 到 .NET 组件 WindowsFormsIntegration
3、添加 reference 到 .NET 组件 System.Windows.Forms
4、添加 reference 到 前面生成的Windows Form DLL
5、WPF提供了一个WindowsFormsHost类( 需要添加using System.Windows.Forms.Integration;)用来做Windows Form的容器,我们要用到的Form控件就必须放进这个容器里。我们可以在InitializeComponent()后添加:
WindowsFormsHost host = new WindowsFormsHost();
AxTerraExplorerX.AxTE3DWindow axTE3DWindow1 = new AxTerraExplorerX.AxTE3DWindow();
host.Child = axTE3DWindow1;
this.TEWindow.Children.Add(host);
以上代码创建一个Windows Form容器,创建Windows Form控件,将控件添加到容器里,再将容器添加到Grid里,这样界面上就可以看到Form控件了,其布局将受到Grid的控制。
附后台完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Forms.Integration; // 在WPF中使用ActiveX控件需要引用的类
using TerraExplorerX; // Skyline提供的类
namespace WPFA_DEMO
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
WindowsFormsHost host = new WindowsFormsHost();
AxTerraExplorerX.AxTE3DWindow axTE3DWindow1 = new AxTerraExplorerX.AxTE3DWindow();
host.Child = axTE3DWindow1;
this.TEWindow.Children.Add(host);
}
private TerraExplorer TE;
private ITerraExplorer51 TE51;
private void LoadFLY()
{
this.TE = new TerraExplorerClass();
this.TE51 = (ITerraExplorer51)TE;
this.TE51.Load(@"C:\izhaohe\skyline.fly");
this.TE.OnLoadFinished += new _ITerraExplorerEvents5_OnLoadFinishedEventHandler(TE_OnLoadFinished);
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
LoadFLY();
}
void TE_OnLoadFinished()
{
//MessageBox.Show("ok");
}
}
}