skyline TerraExplore PRO二次开发笔记

更新时间:2023-05-25 10:26:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

skyline TerraExplore PRO二次开发笔记

skyline TerraExplore PRO二次开发笔记

1. 开发环境(B/S)

本地开发环境(IIS,TEPro, TEDEV,根据项目的要求具体选择服务器端的语言和客户端的脚本语言,如:ASP,,jsp,php ..,使用的开发工具用: Microsoft Visual Studio .NET 2003/5, 客户端脚本语言:javascript/jscript,vbscript,使用的开发的工具:UltraEdit,Editplus等等,根据自己爱好)

网络开发环境:在服务器上进行开发和调试,但在服务器上必须安装internet lic+TerraGate的情况下,才能应用,本机只需安装TE即可;

2. 服务器的配置

服务器端必须要安装TerraGate3.0/3.5,的主要作用是进行mpt的网络发布,在TerraGate 可以设置多个mpt,供fly工程文件调用。(调用文档)

3. 客户端浏览

客户端需要安装TE(TerraExplorer)+ IE60版本即可使用本系统。

4. 二次开发的概述

TerraExplorePro提供了一整套的API,供二次开发使用,它提供了一些访问外部信息的方法,比如:数据库或矢量数据的。所有这些以COM协议为基础的界面都可以通过脚本语言管理,也可通过非脚本语言控制(如:C++或Visual Basic)来开发(c/s)。

TerraExplorePro也可以设置ActiveX控件。它作为ActiveX控件通常被应用在可视化界面的3D窗口、信息树、导航图的操作。

下面主要讨论TerraExplorePRO API的功能:

用户接口API:是对标准TerraExplorer Pro API的扩充。利用其强大功能,开发人员可控制和激活大多数TerraExplorer Pro的工具和函数。如:

1 、控制飞行和视景

2、对象的创建

3、信息树和管理

4、层和对象管理

5、事件处理

6、在网页和windows应用程序中添加ActiveX控件

另外,TerraExplorerPro的API还允许常用的一些操作,比如控制容器中的内容,查询地形高度信息,获取快照,查找对象等更多操作。

5. 开发前的准备

在网页中如何使用Activex控件

skyline TerraExplore PRO二次开发笔记

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>网页标题</title>

</head>

<body> /

<!--定义TerraExplorer的信息窗口对象-->

<object ID="TEInformationWindow" classid="CLSID:3a4f9193-65a8-11d5-85c1-0001023952c1" width="300" height="400"></object>

<!--定义一个TerraExplorer 3D窗口对象-->

<object ID="TE3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1" width=650 height="400"></object>

<!--定义TerraExplorer对象-->

<object ID="TE" CLASSId="CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1">

</object>

</html>

6. 接口的概述

当前的版本号:TerraExplorer Pro version 5.0.0.f47

ITerraExplorer5 (Partial)

IPlane5

ITerrain4

IContainer2

IRender4

ISnapShot2

IStartPosition

_ITerraExplorerEvents5

IInformationTree5 (Partial)

IObjectManager5 (Partial)

ITENavigationMap

_ITENavigationMapEvents

IMenu

skyline TerraExplore PRO二次开发笔记

7. 接口的介绍:

ITerraExplorer5(第21章)

告诉你关于用户接口的细节,例如怎样加载一个工程文件,对加载的工程文件进行加密,设定3d窗口的模式(cpu是否处理),获得用户当前使用的版本的信息,单位的设置,还可以对当前的工程文件进行保存,也可以把服务器上的工程文件保存到本地中。

属性:

Type:获取版本

FlyName:工程的文件名

DisplayErrorMessages:错误的设置模式

布尔型:当设置为false/0时,TerraExplorer错误信息在com方法调用的时候不显示给用户,如果设置为true时,则显示,系统默认设置为true; 错误处理在IErrorInfo接口中,目前没有公开。

方法:

Load([in] BSTR URL):加载工程文件:

可以导入本地的工程文件或mpt文件,也可以导入网络的工程文件或地形文件,地形文件导入的方式:文件名.mpt@ip:端口

SetCPUSavingMode([in bSavingMode]):设置cpu的工作模式

如果设置为1:工作,0不工作

GetUserUnits(

[out] VARIANT* shortAltitude, 海拔

[out] VARIANT* shortAltitudeType, 海拔的类型

[out] VARIANT* shortLatLongType) 经纬度类型

)

GetTEVersion:获得当前TE的版本号;

skyline TerraExplore PRO二次开发笔记

LoadEx:加载加密的工程文件,同步或异步打开(MPT有关系)

[in] BSTR URL,

[in] BSTR User,

[in] BSTR Password,

[in, defaultvalue(0)] long Asynchronous) 1为异步,0 为同步

Save:保存工程文件

SaveAs:另存为工程文件

具体实现如下:

1 定义对象

2 初始化对象

3 加载Activex

4 浏览网页

代码如下:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>网页标题</title>

<style type="text/css">

<!--

td {

font-family: "宋体";

font-size: 12px;

}

skyline TerraExplore PRO二次开发笔记

-->

</style>

</head>

<body onLoad="Init();">

<!--定义TerraExplorer的信息窗口对象-->

<object ID="TEInformationWindow" classid="CLSID:3a4f9193-65a8-11d5-85c1-0001023952c1" width="300" height="400">

</object>

<!--定义一个TerraExplorer 3D窗口对象-->

<object ID="TE3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1" width=650 height="400">

</object>

<!--定义TerraExplorer对象-->

<object ID="TE" CLASSId="CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1">

</object>

</html>

<script language="javascript">

var ITerraExplorer = null;

var IPlane = null;

var IMenu = null;

var IObjectManager = null;

//---------------------------------------------------------------

skyline TerraExplore PRO二次开发笔记

function Init()

{

var temp;

ITerraExplorer = TE.interface("ITerraExplorer5");

ITerraExplorer.load("D:\\Job\\test.fly");

temp = ITerraExplorer.Type;

alert(temp);

}

IPlane5

IPlane5接口是对飞行方式、观看位置进行控制,能操作浏览对象的观察角度,方向、速度、放大,偏航,斜度,旋转 ..,来产生复杂的移动。

属性:

Speed:速度以米/秒为单位,在3dwindow上运行,根据设置的大小决定对象运行的快慢;

FieldOfView:观看3dwindow的区域,在观看的程度上,对于球体,它的角度设置的范围在1-180度中间,1为放到最大程度,180为放到最小程度,对偏航的设置,此值必须设置为5 -90度之间,默认的是53度。

方法:

FlyTo:此方法是飞行的动作,根据得到x坐标,z坐标,,视景的高度设定,设置不同运动方式(偏航(Yaw),斜度(Pitch),运动的方式)的设置,飞到并定位到目的地,还可以对目的地进行距离的设置。

[in] double X,

地形上的x坐标的位置

[in] double Z,

地形上的z坐标的位置

skyline TerraExplore PRO二次开发笔记

[in] double Height,

飞行对象与地形的高度

[in] double Distance,

距离的远进,就像摄像机拉镜头一样。

[in] double Yaw,

偏航的设定,对飞行对象偏航的角度进行控制。

[in] double Pitch,

对斜度进行控制

[in] BSTR Pattern)运动的模式

对飞行动作模式进行控制共有7个参数

1、 FlyToLocation

2、 JumpToLocation

3、 FlyToTerrain

4、 Circle(圆)

5、 Oval(椭圆)

6、 Line(线形)

7、 Arc(圆弧)

代码:

SetPosition

设定当前3dwindow的视角的位置,不同于MovePosition,此方法直接“jump“到某个位置。

用户可以从一个城市直接跳到另一个城市

[in] double X,

X坐标

skyline TerraExplore PRO二次开发笔记

[in] double Y,

Y坐标

[in] double Height,

高度

[in] double Yaw,

偏航

[in] double Pitch,

斜度

[in] double Roll,

滚动

[in] double CameraDeltaYaw,

视角的偏航,与飞行到某个对象的偏航相同

[in] double CameraDeltaPitch,

视角的斜度。。。。。。

[in, defaultvalue(0)] long Flags)

Flag共有13个参数,默认为0,每个参数都对应上面一个参数,使某个参数无效。

MovePosition

与setPosition相同。

GetPosition

这个方法重新得到setPosition的参数,来定义3dwindow的位置和方向

[out] VARIANT* doubleX,

[out] VARIANT* doubleY,

skyline TerraExplore PRO二次开发笔记

[out] VARIANT* doubleHeight,

[out] VARIANT* doubleYaw,

[out] VARIANT* doublePitch,

[out] VARIANT* doubleRoll,

[out] VARIANT* doubleCameraDeltaYaw,

[out] VARIANT* doubleCameraDeltaPitch)

应用:自定义坐标转换 IPlane.GetPosition CurrX, CurrY, CurrH, CurrDirection, CurrPitch , CurrRoll, CurrDeltaYaw, CurrDeltaPitch

FlyToObject

飞到具体的某个地形上的对象

[in] BSTR ObjectID,

Dim ItemID = IInformationTree.FindItem("浏览路径\2006北京国际马拉松赛")

'msgbox ItemI

if ItemID <> 0 then

ObjID = IInformationTree.GetTerraObjectID(ItemID)

IPlane.FlyToObject ObjID, 18

els

alert "Item not found: "&ItemName

End If

[in] ActionCode Code)

动作代码:

o AC_FLYTO = 0 //飞行到对象

o AC_CIRCLEPATTERN = 1 //圆形

o AC_OVALPATTERN = 2//椭圆

o AC_LINEPATTERN = 3 //线形

o AC_ARCPATTERN = 4 //弧形

o AC_FOLLOWBEHIND = 5 //后边

skyline TerraExplore PRO二次开发笔记

o AC_FOLLOWABOVE = 6 //上方

o AC_FOLLOWBELOW = 7下方

o AC_FOLLOWRIGHT = 8 //右边

o AC_FOLLOWLEFT = 9 //左边

o AC_FOLLOWBEHINDANDABOVE = 10 //后上方

o AC_FOLLOWCOCKPIT = 11 //坐在机舱

o AC_JUMP = 14 //跳转

o AC_PLAY = 18 //跳转并播放

SetSpeed

([in] double Speed)

此方法设置视角的速度,以此设置的速度靠近某个对象

GetSpeed

[out, retval] double* Speed)

获得以速度的值

Zoom

此方法执行飞行到某个对象的时候进行放大

[in] double Distance,

在某个距离段执行的操作

GetPositionEx

重新获得setPosition的参数,定义视角的位置和方向,此方法多了一个Flag,可以重新找到海拔高度的方法到地形数据上。用于像地面剖析等。

例子:

IObjectManage5

skyline TerraExplore PRO二次开发笔记

这个对象负责在工程文件里创建对象,它的方法完成不同的对象,所有的对象都继承ITerraExplorerObject5接口,当创建对象后就可已获得这个接口的属性和方法。

CreatePolyline,

在3d窗口中创建线条

[in, defaultvalue(0)] VARIANT SafeArrayVertices,

需要输入得是一个数组序列,两两出现,如:第一个值为x坐标,第二个值为y坐标 . 在这里一般使用鼠标点击画线结合使用(作个案例);

[in, defaultvalue(0x0000ff00)] long LineColor,

定义一个线形得颜色,用10进制得形式表示

[in, defaultvalue(HSC_TERRAIN_RELATIVE)] HeightStyleCode HeightStyle,

设定高度得样式,

有3个选项

每个线的置高点都与地形有关系

[in, defaultvalue(0)] long GroupID,

所划得线条放在那个组里。

[in, defaultvalue("")] BSTR Description,

对所划得线进行相关得描述。

[out, retval] ITerrainPolyline5** pITerrainPolyline5)

返回一个pITerrainPolyline5对象可以调用pITerrainPolyline5里面得对象和方法。

Create2DPolygon,

创建2的多边形,

HRESULT Create2DPolygon (

[in, defaultvalue(0)] VARIANT SafeArrayVertices,

需要输入得是一个数组序列,两两出现,如:第一个值为x坐标,第二个值为y坐标 .

[in, defaultvalue(0x0000ff00)] long LineColor,

线形得颜色,用10进制得形式表示

[in, defaultvalue(FT_NONE)] double FillOpacity,

skyline TerraExplore PRO二次开发笔记

对多边形的填充的颜色透明度的属性值进行控制。

0 - 100%

[in, defaultvalue(0x00646464)] long FillColor,

对多边形的颜色填充。

[in, defaultvalue(HSC_TERRAIN_RELATIVE)] HeightStyleCode

HeightStyle,

在地形上的高度的呈现的形式;

[in, defaultvalue(0)] long GroupID,

所划得多边形放在那个组里。

[in, defaultvalue("")] BSTR Description,

对所划得线进行相关得描述。返回一个字符串

[out, retval] ITerrainPolyline5** pITerrainPolyline5)

返回pITerrainPolyline5对象,可以使用pITerrainPolyline5的所有属性和对象。

CreateRectangle,

在窗口中创建一个矩形;

[in] double X,

地形的X坐标

[in] double Y,

地形的y坐标

[in] double Elevation,

地形的海拔或高度。

[in] double ObjectWidth,

矩形对象的宽度

[in] double ObjectDepth,

矩形对象的深度。

skyline TerraExplore PRO二次开发笔记

[in, defaultvalue(0x0000ff00)] long LineColor,

线形的颜色设置

[in, defaultvalue(FT_NONE)] double FillOpacity,

对象填充颜色的透明度;

[in, defaultvalue(0x00646464)] long FillColor,

对象填充颜色的颜色;

[in, defaultvalue(HSC_TERRAIN_RELATIVE)] HeightStyleCode HeightStyle,

在地形高度的显示的高度样式

[in, defaultvalue(0)] long GroupID,

存入到那个组

[in, defaultvalue("")] BSTR Description,

对当前对象的描述

[out, retval] ITerrainRectangle5** pITerrainRectangle5)

返回ITerrainRectangle5对象,即可使用ITerrainRectangle5的所有对象和属性。

CreateRegularPolygon,

创建正多边形

[in] double X,

当前的地形的x坐标

[in] double Y,

当前的地形的Y坐标

[in] double Elevation,

当前对象在地形中的海拔的属性值

[in] double Radius,

多边形的半径属性值

[in] int NumOfSegments,

设定多边形边数。

[in, defaultvalue(0x0000ff00)] long LineColor,

设定线的颜色

skyline TerraExplore PRO二次开发笔记

[in, defaultvalue(FT_NONE)] double FillOpacity,

设定填充的颜色的透明度

[in, defaultvalue(0x00646464)] long FillColor,

设定填充的颜色

[in, defaultvalue(HSC_TERRAIN_RELATIVE)] HeightStyleCode HeightStyle,

对高度样式的设定

o HSC_TERRAIN_RELATIVE = 0

Each of the polygon’s vertices has the same height above the terrain (determined by the Elevation parameter).

o HSC_PIVOT_RELATIVE = 1

The height of the polygon’s pivot (the center of the regular polygon) is determined by the Elevation parameter. Each of the polygon’s vertices lies on the same plane as the polygon’s pivot.

o HSC_ON_TERRAIN = 2

The polygon’s vertices are placed on the terrain.

o HSC_TERRAIN_ABSOLUTE = 3

[in, defaultvalue(0)] long GroupID,

当前对象的组

[in, defaultvalue("")] BSTR Description,

描述

[out, retval] ITerrainRegularPolygon5** pITerrainRegPolygon2)

返回ITerrainRegularPolygon5对象,可以使用ITerrainRegularPolygon5里的所有对象和属性

CreateCircle,

//创建圆形对象

Create3DPolygon,

skyline TerraExplore PRO二次开发笔记

创建3d多边形

CreateBuilding,

//创建建筑物

CreateBox,

//创建box

CreatePyramid,

//创建椎体(底部有规则)

CreateCylinder,

//创建圆柱

CreateCone,

//创建椎体(底部是圆形)

CreateEllipse,

//创建椭圆

CreateArc,

//创建弧形

CreateArrow,

//创建箭头

Create3DArrow,

//创建3d箭头

CreateSphere,

//创建球体

CreateModel, (用例子说明)

创建模型

CreateLabel,

[in] VARIANT LabelInfo,

[in] double X,

[in] double Y,

skyline TerraExplore PRO二次开发笔记

[in] double Elevation,

[in, defaultvalue(0)] HeightStyleCode HeightStyle,

指的是从地面算的高度,比如一栋楼高30米像海拔高度,从海平面算起的(大地水准面)

[in, defaultvalue(0)] long GroupID,

[in, defaultvalue("")] BSTR Description,

[out, retval] ITerrainLabel5** pITerrainLabel5)

文本标签

CreateLabelEx,

文本标签

CreateLocation,

创建本地区域

CreateTreeHotlink,

//点击出东西

CreateRoute,

//绘制动态路径,可以对他进行播放、录制保存成avi等视频文件的操作(实例讲解)

CreateMessage,

创建对话框与IContainer结合使用

GetObject,

获取该对象

[in] BSTR ObjectID,(对象的ObjectID如何获取),实例讲解

[out, retval] ITerraExplorerObject5** pITerraExplorerObject5)

CreateImageLabel,

//创建图片标签

skyline TerraExplore PRO二次开发笔记

CreateImageLabelEx,

//创建图片标签

CreateDynamicObject (用实例讲解)

//创建动态对象

CreateImageryLayer,

//创建图片层,贴在地形上

CreateElevationLayer,

//创建海拔层,贴在地形上

CreateVideoOnTerrain,

//创建视频到地形上

CreatePointCloudModel,

//创建云点模型

可以导入*.CPT(point Cloud Files)

说明:点云就是是无数个空间点构成的集合;就是它每个点都坐标;

GetInfoTreeItemID,

获取被创建的对象在信息树的ItemID,

IObjectManage5 讲解的实例:

1 创建飞行对象,飞到某个位置时在创建文本对象调用第22章的ITerrainLabel5对象,

2 创建3d模型,

IInformationTree5

此接口主要实现的功能够显示和管理所有对象,可以创建组,修改组,删除组,重命名组,可以实现组的排序,供创件对象使用。 提供的方法有:

CreateGroup,

在信息窗口中创建一个组

skyline TerraExplore PRO二次开发笔记

in] BSTR GroupName,

[in, defaultvalue(0)] long ParentGroupID,

[out, retval] long *pVal)

CreateLockedGroup,

//创建一个锁定的组

[in] BSTR GroupName,

[in, defaultvalue(0)] long ParentGroupID,

[out, retval] long *pVal)

RenameGroup,

对组进行重命名

[in] long GroupID,

[in] BSTR GroupName)

ExpandGroup,

展开一个组

[in] long GroupID,

[in] BOOL bExpand)

GetItemName,

获取列表的名字

[in] long ItemID, //ItemID的infotree. FindItem(“对象”);

[out, retval] BSTR *ItemText) //输出列表文本

DeleteItem,

//删除列表

SetParent,

//移动列表到不同的组,就象数据库关系数据库一样,设置它的关联属性,这里的关联属性就是:ParentGroupID

skyline TerraExplore PRO二次开发笔记

GetNextItem,

这个方法很有用,可以遍历出信息树里的组的 ID 和 组里对象的ItemID,

[in] long ItemID,

[in] ItemCode Code,

o SELECTED – 10

获取当前选中的对象

o CHILD – 11

返回第一个组下对象的ItemID

o NEXT – 13

返回下一个兄弟节点

o ROOT – 18

获得根节点

[out, retval] long *pVal)

FindItem,

查找信息树中的对象

[in] BSTR PathName, //输出对象的ItemID

[out, retval] long *pVal)

GetTerraObjectID,

//获得地形的对象的ID

HRESULT GetTerraObjectID (

[in] long ItemID,

[out, retval] BSTR *pVal)

通过它和ItemID,可以获取对象的ObejctID,可以实现FlyToObject的操作。

SetGroupColor,

in] long GroupID,

skyline TerraExplore PRO二次开发笔记

[in, defaultvalue(0x00ffffff)] long GroupColor)

//设置组的颜色

GetGroupColor,

[in] long GroupID,

[out, retval] long *pVal)

获得组的颜色

EnableRedraw,

IsGroup,

判断是否有没有某个组 ,就象IsEmpty函数样的功能

SetGroupVisibility,

设置组是否显示:组前复选框是否显示,

IsGroup, SetGroupVisibility,可以控制组的一些操作,如:对加载进来的组进行改名,显示和隐藏的操作

SortGroup,

对组进行排序

SetGroupLocation,

[in] long GroupID,

[in] double X,

[in] double Y,

[in] double Height,

[in] double Distance,

[in, defaultvalue(0)] double Yaw,

[in, defaultvalue(-50)] double Pitch,

skyline TerraExplore PRO二次开发笔记

[in, defaultvalue(0)] long Flags)

设置组为Location组,此组是特殊的组,可以定位到地形的某个地方。

GetGroupLocation,

获取Location组的信息,供其他地方地方的调用

CreateLockedGroupEx,

与CreateLockedGroup实现的功能类似,增加了组的索引。

SetActivationCode,

[in] long GroupID,

[in] ActionCode ACode,

[in, defaultvalue(-1)] int ActivationParam); //当前不能使用

设定一个组的运动状态,如, GroupID=“111“的组运动状态为:JumpToLocalion

GetActivationCode,

获取上面的信息

SetClientData,

设置一个对象的属性信息,这个字符串可以是外部的xml格式字符串,

如:<FieldsData>

<Attribute1>Information 1</Attribute1

<Attribute2>Information 2</Attribute2>

<Attribute3>Information 3</Attribute3>

</FieldsData>

GetClientData,

获得一个对象的属性信息,返回一个xml格式文档(DOM)去解析它。

GetObjectX,

获得一个对象,可以得到对象的相关信息:如:ID, ObjectType, ClientData

Set TEObject = IObjectManager.GetObject(ObjectID)

SetParentEx,

//移动列表到不同的组,就象数据库关系数据库一样,设置它的关联属性,这里的关联属性

本文来源:https://www.bwwdw.com/article/4pt4.html

Top