您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页skyline_API详细使用说明手册

skyline_API详细使用说明手册

来源:爱问旅游网


1 TerraExplorer API 简介

TerraExplorer API 提供了一套强大的接口用来集成 TerraExplorer、 TerraExplorer Pro 和用户自定义应用。它提供了一些访问外部信息扩展的方 法,比如:访问数据库或基础地理空间数据。所有这些以 COM 协议为基础的 API 接口都可以通过脚本语言操作(例如 Javascript),也可以通过非脚本语言来控 制操作(例如:C++、VB、delphi 或者.net)。

TerraExplorer 也提供了一套 ActiveX 控件,可将 3D 窗口、信息树和导航图 以控件对象的方式嵌入到用户自定义的可视化界面中,其中,Runtime 模块使得 用户自定义的应用程序更易分发。

1.1 ITerraExplorer5

描述用户接口的相关细节,例如当前用户使用的软件版本信息、单位参数(长 度单位、速度单位等)、工程文件加载和保存等。

ITerraExplorer 属性: Type, FlyName, DisplayErrorMessages 方法: Load, SetCPUSavingMode, GetUserUnits, GetTEVersion, LoadEx, Save, SaveAs, SetParam, GetParam (1)Load 方法:HRESULT Load([in] BSTR URL) 其中 URL 是 fly 或 mpt 文件的 完整路径。 C# :(第一次举例是完整代码,主要部分为粗体部分,以后的例子只写主要部分,下面接

口例子的其他代码与此例类似,其中加载保存路径读者可以自行设定) using System; using

System.Windows.Forms; using TerraExplorerX; namespace Load_Test {

public partial class Form1 : Form {

private TerraExplorerClass objTerraExplorer;

public Form1() {

InitializeComponent(); }

private void Loadbutton_Click(object sender, EventArgs e) {

objTerraExplorer = new TerraExplorerClass();

objTerraExplorer.Load(@\"E:\\Skyline Pro Interface\\ 数 据 \\ 数 据

\\Default.fly\");

} } }

VBscript:(其中黑体部分是主要部分)

Load

CLASSID=\"CLSID:3a4f9192-65a8-11d5-85c1-c1\" width=800 height=760>

(2)Save 方法 :只能保存 fly 工程,mpt 工程不能保存 C#:

objTerraExplorer = new TerraExplorerClass(); objTerraExplorer.Save();

VBScript :

Sub Save() Set

ITerraExplorer=TE.interface(\"ITerraExplorer5\") ITerraExplorer.Save End Sub

(3)Save As 方法:HRESULT SaveAs([in] BSTR FileName)工程另存为 C#:

objTerraExplorer = new TerraExplorerClass();

objTerraExplorer.SaveAs(@\"E:\\Skyline Pro Interface\\数据\\数据\\Default88.fly \"); VBScript :

Sub SaveAs()

Set ITerraExplorer=TE.interface(\"ITerraExplorer5\")

ITerraExplorer.SaveAs \"E:\\Skyline Pro Interface\\数据\\数据\\Default88.fly\" End Sub 1.2 IPlane5

控制飞机和摄像机的操作,对于对象的飞行方式、观看视角、视野高度进行 控制,可按照需求控制摄像机的方向、倾角产生复杂的运动,例如飞机起飞模拟。 IPlane5 属性: 方法: Speed, FieldOfView

FlyTo, SetPosition, MovePosition, GetPosition, FlyToObject, SetSpeed, GetSpeed, Zoom, GetPositionEx (1)FlyTo 方法:飞行到指定的位置 [in] double X, 水平方向坐标 [in] double Z, 垂直方向坐标 [in] double Height, 高度

[in] double Distance, 飞行到后视点离位置的距离 [in] double Yaw, 方位角

[in] double Pitch, 视角上下倾斜角度

[in] BSTR Pattern 视角飞行到固定位置的模式 C#:

private TerraExplorerClass objTerraExplorer; IPlane5 objIPlane5=objTerraExplorer as IPlane5 ;

objIPlane5.FlyTo(100.71729, 36.,40000, 100, 0, 0, \"FlyToTerrain\"); VBScript : Sub FlyTo()

Set IPlane5=TE.Interface(\"IPlane5\")

IPlane5.FlyTo

108,39,2000,50,0,0,\"FlyToLocation\" End Sub

(2)SetPosition 方法:设置跳转到视角的位置

[in] double X [in] double Y

[in] double Height [in] double Yaw [in] double Pitch [in] double Roll [in] double

CameraDeltaYaw, [in]

double CameraDeltaPitch, [in, defaultvalue(0)] long Flags C#:

IPlane5 objIPlane5 = objTerraExplorer as IPlane5;

objIPlane5.SetPosition(100.71729, 36., 40000,100,0, 0,0,0, 1024); VBScript : Sub SetPosition()

Set IPlane5=TE.interface(\"IPlane5\") IPlane5.SetPosition 108,39,2000,0,0,0,0,0,1 End Sub

(3)GetPosition 方法:

[out] VARIANT* doubleX, 输出视角所在的经度 [out] VARIANT* doubleY, 输出视角所在的经度 [out] VARIANT* doubleHeight, 输出视角所在的高度 [out] VARIANT* doubleYaw, 视角方位角 [out] VARIANT* doublePitch, 视角上下倾斜角度 [out] VARIANT* doubleRoll, 视角左右倾斜角度 [out] VARIANT*

doubleCameraDeltaYaw, [out]

VARIANT* doubleCameraDeltaPitch C#:

object x, y, h, yaw, pitch, roll, cdy, cdp;

IPlane5 objIplane5 = objTerraExporer as IPlane5;

objIplane5.GetPosition(out x,out y,out h, out yaw,out pitch,out roll,out cdy, out cdp); Xtext.Text = x.ToString (); Ytext.Text = y.ToString(); Htext.Text = h.ToString(); Yawtext.Text = yaw.ToString();

Pitchtext.Text = pitch.ToString(); Rolltext.Text =

roll.ToString(); CDYtext.Text = cdy.ToString(); CDPtext.Text = cdp.ToString(); VBScript : Sub GetPosition()

IPlane5.GetPosition x,y,height,yaw ,pitch,roll,camaraPicth,camaraRoll XV.value=x YV.value=y

HV.value=height YAWV.value=yaw PV.value=pitch RV.value=roll

CPV.value=camaraPicth

CRV.value=camaraRoll End Sub

(4)MovePosition 方法:设置移动到视角的位置 [in] double X, 水平方向坐标 [in] double Y, 垂直方向坐标 [in] double Height, 高度

[in] double Yaw, 视角方位角度 [in] double Pitch, 视角上下倾斜角度 [in] double Roll, 左右倾斜角度 [in] double

CameraDeltaYaw, [in]

double CameraDeltaPitch, [in, defaultvalue(0)] long Flags C#:

IPlane5 objIPlane5 = objTerraExplorer as IPlane5; objIPlane5.MovePosition(111,39,4000,0,0,0,0,0,1024); VBScript :

Sub MovePosition()

Set IPlane5=TE.Interface(\"IPlane5\") IPlane5.MovePosition 108,39,2000,0,0,0,0,0,1 End Sub

(5)FlyToObject 方法:飞行到物体 [in] BSTR ObjectID 输入物体 ID [in] ActionCode Code 飞行到模式 C#:

IInformationTree5 objIInformationTree5=objTerraExplorer as IInformationTree5; int ItemID=objIInformationTree5 .FindItem(\"TestGroup\\\\Test Building\"); string objID=objIInformationTree5.GetTerraObjectID (ItemID); IPlane5 objIPlane5 = objTerraExplorer as IPlane5; objIPlane5.FlyToObject(objID,0); VBScript :

Sub FlyToObject()

Set IPlane5=TE.interface(\"IPlane5\")

Set IInformationTree5

=TE.interface(\"IInformationTree5\") ItemID = IInformationTree5.FindItem(\"Test Building\") set Obj =

IInformationTree5.GetObject(ItemID) IPlane5.FlyToObject Obj.ID,0 End Sub

(6)Zoom 方法:对当前进行视野缩放 C#:

IPlane5 objIPlane5 = objTerraExplorer as IPlane5; objIPlane5.Zoom(500,0); VBScript : Sub Zoom()

Set

IPlane=TE.interface(\"IPlane5\") IPlane.Zoom(50) End Sub

1.3 IObjectManager5 接口

管理三维窗口中的所有对象,使用本接口用户可添加、删除、修改三维窗口 中的所有对象,主要管理如下对象:

创建二维对象 –主要处理文本、图片标签和二维几何体,可创建如下对 象:

Text label:文本标签 Image label:图片标签 Polyline:折线 Polygon:面 Rectangle:矩形

Regular Polygon:正多边形 2D Arrow:二维箭头 Circle:圆 Ellipse:椭圆 Arc:圆弧

VideoOnTerrain:在三维地形上创建视频

创建三维对象 – 主要处理 3D 模型和三维几何体,可创建如下对象: 3D Model:添加外部三维模型 Point Cloud Model:添加点云数据

Building:在 pro 中自定义创建建筑物

3D Polygon:三维面

Box:长方体

Cylinder:圆柱体

Sphere:椭球体 Cone:椎体 Pyramid :金字塔

3D Arrow:三维箭头

创建 Messages – 创建对象 Message,并可与相关对象相关联 Raster Layers – 创建栅格层,添加航片、卫片或高程数据 Route – 创建漫游路线,可获取、修改路线点位信息

Location –创建视图,系统可直接获取视图范围,也可自定义范围 3.1 CreatePolyline

语法

ITerrainPolyline5 CreatePolyline(object SafeArrayVertices, int LineColor, HeightStyleCode

HeightStyle, int GroupID, string Description) 参数 类型 描述 SageArrayVertices object 一个数组节点包含三个 double

值, 这三个 double 值由 x 纬度,h 高度, y 经度。 如果这个参数是零,将创 建一个空的对象,用户可以获得对 象添加节点。

LineColor int 线颜色,RGB 值,最小为 255。 HeightStyle HeightStyleCode 一个枚举值,主要决定对象在

地形 上以什么样的方式显示。

GroupID int 放置对象的组编号,如果为 0

表示 对象将在根节点下产生。

Description string 对象在 Information 窗体中显

示的 名称,如 果为空字 符串, TerraExplorer 将自动为其设置一 个唯一的名称。

说明

在三维窗口中创建多义线,返回 ITerrainPolyline5 对象。 例子

C#:

private void CreatePolyline()

{

ITerrainPolyline5 ITerrainPolyline =

IOjbectManager.CreatePolyline(0, 255, HeightStyleCode.HS_ON_TERRAIN, 0, \"创建线\");

ITerrainPolyline.AddVertex(0, 1,0, 0); ITerrainPolyline.AddVertex(40, 1, 40, 0); }

vbScript:

3.2 Create2DPolygon

参数

SageArrayVertices

LineColor FillOpacity FillColor HeightStyle GroupID Description

说明

类型 object

描述

一个数组节点包含三个 double 值, 这三个 double 值由 x 纬度,h 高y 经度。 如果这个参数是零,

将创建一个空的对象,用户可以获 得对 象添加节点。

线颜色,RGB 值,最小为 255。

定义对象的透明度。0 为透明,1 为 不透明。 对象的填充颜色,其值为 RGB 值。

一个枚举值,主要决定对象在地形 上以什么样的方式显 0 放置对象的组编号,如果为表示

对象将在根节点下产生。对象在 Information 窗体中显

示的 名称,如 果为空字 符TerraExplorer 将自动为其设

置一 个唯一的名称。

int

double int

HeightStyleCode int string

例子

C#:

private void btnCreateObject_Click(object sender, EventArgs e)

{

ITerrainPolyline = IOjbectManager.Create2DPolygon(0, 255, 0.4,

65525, HeightStyleCode.HS_ON_TERRAIN, 0, \"创建面\");

ITerrainPolyline.AddVertex(0, 1, 0, 0); ITerrainPolyline.AddVertex(10, 1, 10, 0); ITerrainPolyline.AddVertex(45, 1, 10, 0); } vbScript:

3.3 CreateRectangle

语法

ITerrainRectangle5 CreateRectangle(double X, double Y, double Elevation, double ObjectWidth, double ObjectDepth, int LineColor, double FillOpacity, int FillColor, HeightStyleCode HeightStyle, int GroupID, string Description) 参数 类型 描述 X double X 坐标

Y

Elevation ObjectWidth

LineColor FillOpacity FillColor HeightStyle GroupID Description

Y 坐

标 高程 矩形宽

线颜色,RGB 值,最小为

255。 定义对象的透明度。0 为对象的填充颜色,其值为RGB 透明,1 为 不透明。

HeightStyleCode 值。

一个枚举值,主要决定对象在地形上 以什么样的方式显示。 表放置对象的组编号,如果为 0 int

示对

象将在根节点下产生。对象在 Information 窗体中显示string

的名 称,如果为空字符串,将自动为其设置一个唯一的名称。 double double double int int

说明

在三维窗口中创建矩形。 例子

C#:

vbScript:

3.4 CreateRegularPolygon

语法

ITerrainRegularPolygon5 CreateRegularPolygon(double X, double Y, double Elevation, double Radius, int NumOfSegments, int LineColor, double FillOpacity, int FillColor, HeightStyleCode HeightStyle, int GroupID, string Description)

参数 X Y

Elevation Radius

NumOfSegments LineColor FillOpacity FillColor HeightStyle GroupID Description

类型 double double double double int int double

描述 X 坐标

Y 坐标 高程 半径 边数

线颜色,RGB 值,最小为 255。 定义对象的透明度。0 为透明,1 为 不透明。

对象的填充颜色,其值为 RGB 值。 一个枚举值,主要决定对象在地形 上以什么样的方式显示。 放置对象的组编号,如果为 0 表示 对象将在根节点下产生。

对象在 Information 窗体中显示的

int

HeightStyleCode int string

说明 在三维窗口中创建正多边

形。 例子

C#:

vbScript: 3.5 CreateCircle

说明 该方法能够在三维窗口中创建一个圆。 语法 void

CreateCircle ( [in] double X,

名称,如果为空字符串, TerraExplorer 将自动为其设置一 个唯一的名称。

[in] double Y, [in] double Elevation, [in] double Radius,

[in, defaultvalue(12)] int NumOfSegments, [in, defaultvalue(0x0000ff00)] long

LineColor, [in, defaultvalue(FT_NONE)] double FillOpacity, [in, defaultvalue(0x)] long FillColor,

[in, defaultvalue(HSC_TERRAIN_RELATIVE)] HeightStyleCode HeightStyle, [in, defaultvalue(0)] long GroupID, [in, defaultvalue(\"\")] BSTR Description,

[out, retval] ITerrainRegularPolygon5** pITerrainRegPolygon2)

参数说明 § X – 经度坐标值。 § Y – 纬度坐标值。 § Elevation – 高程值。 § Radius – 对象的半径(单位:米)。 § NumOfSegments – 圆的分段数。 § LineColor – 圆的弧线的颜色 § FillOpacity –圆内的填充色是否透明。 § FillColor – 圆内的填充色。 § HeightStyle – 圆在图上的放置形式。 HeightStyleCode 可以选择下面的值: o HSC_TERRAIN_RELATIVE = 0 圆的每一个端点在地形图上拥有相同的高程值。 o HSC_PIVOT_RELATIVE = 1 高程参 数决 定圆的 中心 点的高 程。 圆的每 个端 点分布 在与 中心点 相同

的平面 上。

o HSC_ON_TERRAIN = 2

圆的端点沿地形分布。

o HSC_TERRAIN_ABSOLUTE = 3

高程参数决定圆的中心点的绝对高程。圆的每个端点分布在与中心点相同的平面上。 § GroupID – 所创建的规则多边形在信息树中所在的组的 ID。如果把它设置为 0,则 图形被创建在根目录下。你可以通过下面几种方式获得 GroupID : o 直接在信息树中创建新组(方法:IInformationTree5::CreateGroup)。 o 如果你知道组的名称,可以在信息树中找到它 (方法:IInformationTree5::FindItem)。 o 通过 GetNextItem 方法,在信息树中检索,直到找到想要的 GroupID。 § Description – 将要出现在信息树窗口中的规则多边形的名称。如果该参数被设置为 一个空的字符串,则 TerraExplorer 给它分配一个默认的名字。 § PITerrainRegularPolygon5 – 一个新建规则多边形的接口指示器。这个参数必须为 空。

返回值 返回值 S_OK E_FAIL TE_E_MPTNOTLOADED 含义 成功 失败 使 用 此 方 法 必 须 先 在 TerraExplorer 加载一个 MPT 文 件 在信息树中输入的组的 ID 值 无效TerraExplorer 不能创建对象。如 果想得到关于这个的更多信息请 使用 IErrorInfo 接口 你没有使用这项功能的许可TE_E_INFOTREE_PARENTNOTGROUP TE_E_INTERNAL TE_E_NOLICENCE 例子 (C#)

using System; using

System.Collections.Generic; using

System.ComponentModel; using System.Data;

using System.Drawing; using System.Text;

using System.Windows.Forms; using TerraExplorerX;

namespace CreateCircle {

public partial class Form1 : Form {

private TerraExplorer CoClassTE; private

ITerraExplorer5 ITerraExplorer; private IObjectManager5 IObjectManager;

private IInformationTree5 IInformationTree; private IRender5 IRender; private IMenu IMenu;

private ITerrainRegularPolygon5 ITeCircle; private bool bIsLine = false; public Form1() {

InitializeComponent(); CoClassTE = new

TerraExplorerClass(); ITerraExplorer = (ITerraExplorer5)CoClassTE; IObjectManager =

(IObjectManager5)CoClassTE; IInformationTree =

(IInformationTree5)CoClassTE; IRender = (IRender5)CoClassTE; IMenu = (IMenu)CoClassTE;

this.CoClassTE.OnLButtonDown+=new

_ITerraExplorerEvents5_OnLButtonDownEventHandler(

OnLButtonDown);

this.CoClassTE.OnRButtonDown+=new

_ITerraExplorerEvents5_OnRButtonDownEventHandler(

OnRButtonDown);

}

private void Form1_Load(object sender, EventArgs e) {

IMenu.Invoke(57601); }

private void btnCreateCircle_Click(object sender, EventArgs e) {

IRender.SetMouseInputMode(MouseInputMode.MI_COM_CLIENT); bIsLine = true; }

private void OnLButtonDown(int Flags, int X, int Y, ref object bHandled) {

if (bIsLine == true) {

object objType = 63, WX, WH, WY, objID;

IRender.ScreenToWorld(X, Y, ref objType, out WX, out WH, out WY, out objID);

if (ITeCircle == null) {

=

IObjectManager.CreateCircle(Convert.ToDouble(WX), Convert.ToDouble(WY), 0,30 , 10, 255, 0, 500,

HeightStyleCode.HSC_TERRAIN_RELATIVE, 0, \"新建的 Circle\");

IInformationTree.EditItem(ITeCircle.InfoTreeItemID); }

ITeCircle

}

} }

private void OnRButtonDown(int Flags, int X, int Y, ref object bHandled) {

IRender.SetMouseInputMode(MouseInputMode.MI_FREE_FLIGHT);

bIsLine = false; }

}

(VBScript)

3.6 Create3DPolygon

说明 该方法能在三维窗口中创建一个三维的多边形。 语法

HRESULT Create3DPolygon ( [in, defaultvalue(0)] VARIANT

SafeArrayVertices, [in, defaultvalue(20)] double ObjectHeight,

[in, defaultvalue(0x0000ff00)] long

LineColor, [in, defaultvalue(FT_NONE)] double FillOpacity, [in, defaultvalue(0x)] long FillColor,

[in, defaultvalue(0)] HeightStyleCode HeightStyle, [in, defaultvalue(0)] long GroupID,

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

[out, retval] ITerrain3DPolygon5** pITerrain3DPolygon5)

参数说明 § SafeArrayVertices – 是由许多个三分组组成的数组,每个三分组由三个双精度数成。 每一个三分组包括一个 X 坐标,一个高程值,一个 Y 坐标。通常这个数组决定三维多边形 底部的基础形状(TerraExplorer 将为每个基础的上面部分复制这个形状)。客户用相同的数组 设置所有的高程值。这在决定地表的三维多边形的高程值方面是很重要的。 COM 接口中表 示高程值的单位是 meters 而 X

坐标和 Y 坐标则用 MPT 单位表示。你可以使用 ITerrain 接 口来获取有关 MPT 单位的信息。如果你使用的是 Lat-Long 格式,Lat-Long 的值是十进制 的 Lat-Long。下面是一个用 VB 脚本写的例子,它返回了三个顶点,每个顶点都被设置成了 相同的高程值。

§ ObjectHeight – 三维多边形的高程值(单位:meters)。 § LineColor – 组成三维多边形的线的颜色。颜色值指定使用 RGB 颜色。指定的颜色 值是十六进制格式的(0x00bbggrr)。最大值是 0xFF。 § FillOpacity – 决定三维多边形是否透明,取值范围是 0 到 1 之间。 § FillColor – 是这个三维多边形在不透明的情况下,其内部填充的颜色。颜色值指定 使用 RGB 颜色。 § HeightStyle – 在地形图上放置三维多边形的方式。

HeightStyleCode 可以使用下面的值: o HSC_TERRAIN_RELATIVE = 0 使用相对高程。

o HSC_TERRAIN_ABSOLUTE = 3

使用绝对高程。 § GroupID – 在信息树中新建多边形所在组的 ID 值。如果设置为 0,则表示将在根目录 下创建新对象。 返回值 返回值 S_OK E_FAIL TE_E_MPTNOTLOADED 含义 成功 失败 使 用 此 方 法 必 须 先 在 TerraExplorer 加载一个 MPT 文 件 在信息树中输入的组的 ID 值 无效TerraExplorer 不能创建对象。如 果想得到关于这个的更多信息请 使用 IErrorInfo 接口 TE_E_INFOTREE_PARENTNOTGROUP TE_E_INTERNAL

TE_E_NOLICENCE 例子 (C#)

using System; using

System.Collections.Generic; using

System.ComponentModel; using System.Data; using System.Drawing; using System.Text;

using System.Windows.Forms; using TerraExplorerX;

你没有使用这项功能的许可

namespace Create3DPolygon {

public partial class Form1 : Form

{

private TerraExplorer CoClassTE;

private ITerraExplorer5 ITerraExplorer; private IObjectManager5 IObjectManager; private IInformationTree5

IInformationTree; private IPlane5 IPlane;

private IRender5 IRender; private IMenu IMenu;

private ITerrain3DPolygon5 ITe3DPoly; private bool bIsLine = false; public Form1() {

InitializeComponent();

CoClassTE = new

TerraExplorerClass(); ITerraExplorer = (ITerraExplorer5)CoClassTE;

IObjectManager =

(IObjectManager5)CoClassTE; IInformationTree =

(IInformationTree5)CoClassTE; IPlane = (IPlane5)CoClassTE; IRender =

(IRender5)CoClassTE; IMenu = (IMenu)CoClassTE; this.CoClassTE.OnLButtonDown+=new

_ITerraExplorerEvents5_OnLButtonDownEventHandler(

OnLButtonDown);

this.CoClassTE.OnRButtonDown+=new

_ITerraExplorerEvents5_OnRButtonDownEventHandler(

OnRButtonDown);

}

private void Form1_Load(object sender,

EventArgs e)

{

IMenu.Invoke(57601); }

private void create3DPolygon_Click(object sender, EventArgs e) {

IRender.SetMouseInputMode(MouseInputMode.MI_COM_CLIENT); bIsLine = true; ITe3DPoly = null; }

private void OnLButtonDown(int Flags, int X, int Y, ref object bHandled) {

if (bIsLine == true) {

object objType = 63, WX, WH, WY, objID;

IRender.ScreenToWorld(X, Y, ref objType, out WX, out WH, out WY, out objID);

if (ITe3DPoly == null) {

ITe3DPoly =

IObjectManager.Create3DPolygon(0, 100, 255, 0.5, 5000, HeightStyleCode.HSC_TERRAIN_ABSOLUTE, 0, \"新建的 3DPolygon\");

}

ITe3DPoly.AddVertex(Convert.ToDouble(WX) ,Convert.ToDouble(WH) ,Convert.ToDouble(WY) ,0);

} }

private void OnRButtonDown(int Flags, int X, int Y, ref object bHandled) {

IRender.SetMouseInputMode(MouseInputMode.MI_FREE_FLIGHT); bIsLine = false;

IInformationTree.EditItem(ITe3DPoly.InfoTreeItemID); }

}

}

(VBScript)

3.7 CreateBuilding

说明 该方法能在三维窗口中创建一个建筑物。 语法 void CreateBuilding (

[in, defaultvalue(0)] VARIANT

SafeArrayVertices, [in, defaultvalue(20)] double RoofHeight,

[in, defaultvalue(BS_STRETCH_TERRAIN)] BuildingStyleCode BuildingStyle, [in, defaultvalue(0)] HeightStyleCode HeightStyle, [in, defaultvalue(0)] long GroupID,

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

[out, retval] ITerrainBuilding5** pITerrainBuilding5)

参数说明 § SafeArrayVertices –是由许多个三分组组成的数组,每个三分组由三个双精度数成。 每一个三分组包括一个 X 坐标,一个高程值,一个 Y 坐标。通常这个数组决定三维多边形 底部的基础形状(TerraExplorer 将为每个基础的上面部分复制这个形状)。客户用相同的数组 设置所有的高程值。这在决定地表的三维多边形的高程值方面是很重要的。 COM 接口中表 示高程值的单位是 meters 而 X 坐标和 Y 坐标则用 MPT 单位表示。你可以使用 ITerrain 接 口来获取有关 MPT 单位的信息。如果你使用的是 Lat-Long 格式,Lat-Long 的值是十进制 的 Lat-Long。下面是一个用 VB 脚本写的例子,它返回了三个顶点,每个顶点都被设置成了 相同的高程值。 § RoofHeight – 建筑物顶部的高程(单位:meters)。 § BuildingStyle – 一个指定建筑物的样式是由地形图伸展还是由多边形组成的枚举值, 可以选择下面的值:

o BS_STRETCH_TERRAIN = 0 建筑物由地形图伸展而来,顶端的纹理和当地地形图纹理相同, TerraExplorer 使用这种方 法提交一个建筑物非常有效。 o BS_POLYGONS = 1

建筑物由多边形组成,而且由使用者定义建筑物的顶端和侧面的纹理特征。 § HeightStyle – 一个决定建筑物在地形图上如何放置的枚举值。 HeightStyleCode 可以使用下面的值: o HSC_TERRAIN_RELATIVE = 0 使用相对高程。 o HSC_TERRAIN_ABSOLUTE = 3 使用绝对高程。 § GroupID –在信息树中新建多边形所在组的 ID 值。如果设置为 0,则表示将在根目录 下创建新对象。 § Description – 将要添加到信息树窗口中的新建的建筑物的名称。如果该字符串为空, TerraExplorer 将指定一个默认名称。 § pITerrainBuilding5 – 一个新建建筑物的接口指示器。这个参数必须为空。 返回值 返回值 S_OK E_FAIL TE_E_MPTNOTLOADED 含义 成功 失败 使 用 此 方 法 必 须 先 在 TerraExplorer 加载一个 MPT 文 件 在信息树中输入的组的 ID 值 无效TerraExplorer 不能创建对象。如 果想得到关于这个的更多信息请 使用 IErrorInfo 接口 你没有使用这项功能的许可TE_E_INFOTREE_PARENTNOTGROUP TE_E_INTERNAL TE_E_NOLICENCE 例子 (C#)

using System; using

System.Collections.Generic; using

System.ComponentModel; using System.Data;

using System.Drawing; using System.Text;

using System.Windows.Forms; using TerraExplorerX;

namespace CreateBuilding {

public partial class Form1 : Form

{

private TerraExplorer CoClassTE; private

ITerraExplorer5 ITerraExplorer; private IObjectManager5 IObjectManager; private IPlane5 IPlane;

private IRender5 IRender; private IMenu IMenu;

private ITerrainBuilding5 ITeBuilding; private bool bIsLine = false;

private IInformationTree5 IInformationTree; public Form1() {

InitializeComponent(); CoClassTE = new

TerraExplorerClass(); ITerraExplorer = (ITerraExplorer5)CoClassTE; IObjectManager =

(IObjectManager5)CoClassTE; IPlane = (IPlane5)CoClassTE; IRender =

(IRender5)CoClassTE; IMenu = (IMenu)CoClassTE; this.CoClassTE.OnLButtonDown+=new

_ITerraExplorerEvents5_OnLButtonDownEventHandler(OnLButtonDown); this.CoClassTE.OnRButtonDown+=new

_ITerraExplorerEvents5_OnRButtonDownEventHandler(

OnRButtonDown); IInformationTree = (IInformationTree5)CoClassTE;

}

private void Form1_Load(object sender, EventArgs e) {

IMenu.Invoke(57601); }

private void OnLButtonDown(int Flags, int X, int Y, ref object bHandled) {

if (bIsLine == true) {

object objType = 63, WX, WH, WY, objID;

IRender.ScreenToWorld(X, Y, ref objType, out WX, out WH, out WY, out objID);

if (ITeBuilding == null) {

ITeBuilding=IObjectManager.CreateBuilding(0,50,

BuildingStyleCode.BS_POLYGONS ,

HeightStyleCode.HSC_TERRAIN_ABSOLUTE, 0, \"新建的 Building\");

}

ITeBuilding.AddVertex(Convert.ToDouble(WX),

WH),

Convert.ToDouble(

Convert.ToDouble(W

Y), 0);

}

}

private void OnRButtonDown(int Flags, int X, int Y, ref object bHandled)

{

IRender.SetMouseInputMode(MouseInputMode.MI_

FREE_FLIGHT); bIsLine = false;

IInformationTree.EditItem(ITeBuilding.InfoTreeItemID);

}

private void btnCreateBuilding_Click(object sender, EventArgs e) {

IRender.SetMouseInputMode(MouseInputMode.MI_COM_CLIENT); bIsLine = true; ITeBuilding = null;

} }

}

(VBScript)

function CB(x,y) if isline=true then

dim outX,outY,outH,ObjectID

IRender.ScreenToWorld x,y,63,outX,outH,outY,ObjectID

set IBuilding = IObjectManager.CreateBuilding(CreateVertArray(), 20,BS_POLYGONS, 0, 0, \"新建的 Building\")

'IBuilding.AddVertex outX,outH,outY,0 end if end function Function

CreateVertArray() Dim vert(9) vert(0) = 120.0099

'First vertex X-

coordinate. vert(1) = 40.0

'First vertex height. vert(2)

= 40.0005

'First vertex Y-'Second vertex X-

'Second vertex height.

'Second vertex Y-

coordinate. vert(3) = 120.0091 coordinate. vert(4) = 260.0 vert(5) = 40.0065

coordinate. vert(6) = 120.0010

'Third vertex X-'Third vertex height.

coordinate. vert(7) = 60.0 vert(8) = 40.006 'Third vertex Y-coordinate. CreateVertArray = vert

End Function 3.8 CreateBox

该方法能在三维窗口中创建一个箱子。 语法 void

CreateBox ( [in] double X, [in] double Y,

[in] double Elevation, [in] double ObjectWidth, [in] double ObjectDepth, [in] double ObjectHeight,

[in, defaultvalue(0)] double Yaw, [in, defaultvalue(0x0000ff00)] long

LineColor, [in, defaultvalue(FT_NONE)] double FillOpacity, [in, defaultvalue(0x)] long FillColor,

[in, defaultvalue(0)] HeightStyleCode HeightStyle, [in, defaultvalue(0)] long GroupID,

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

[out, retval] ITerrain3DRectBase5** pITerrain3DRectBase5)

参数说明 § X – 经度。 § Y – 纬度。 § Elevation – 高程。 § ObjectWidth – 宽度(单位:meters)。 § ObjectDepth – 深度(单位:meters)。 § ObjectHeight – 高度(单位:meters)。 § Yaw – 飞行偏角。 § LineColor – 线的颜色。 § FillOpacity – 透明度。 § FillColor – 填充色。 § HeightStyle –一个决定 Box 在地形图上如何放置的枚举值。HeightStyleCode 可以取 下面的值。 o HSC_TERRAIN_RELATIVE = 0 相对高度。 o HSC_TERRAIN_ABSOLUTE = 3 绝对高度。 § GroupID –将要添加到信息树窗口中的新建的 Box 的名称。如果该字符串为空, TerraExplorer 将指定一个默认名称。 § Description –将要添加到信息树窗口中的新建的 Box 的名称。如果该字符串为空, TerraExplorer 将指定一个默认名称。

§ pITerrain3DRectBase5 –一个新建 Box 的接口指示器。这个参数必须为空。 返回值 返回值 S_OK 含义 成功 E_FAIL TE_E_MPTNOTLOADED TE_E_INFOTREE_PARENTNOTGROUP TE_E_INTERNAL TE_E_NOLICENCE 例子 (C#)

using System; using

System.Collections.Generic; using

System.ComponentModel; using System.Data;

using System.Drawing; using System.Text;

using System.Windows.Forms; using TerraExplorerX;

失败 使 用 此 方 法 必 须 先 在 TerraExplorer 加载一个 MPT 文 件 在信息树中输入的组的 ID 值 无效TerraExplorer 不能创建对象。如 果想得到关于这个的更多信息请 使用 IErrorInfo 接口 你没有使用这项功能的许可

namespace CreateBox

{

public partial class Form1 : Form

{

private TerraExplorer

CoClassTE; private

ITerraExplorer5 ITerraExplorer; private IObjectManager5 IObjectManager; private IPlane5 IPlane;

private IRender5 IRender; private IMenu IMenu;

private ITerrain3DRectBase5 ITeBox; private bool bIsLine = false;

private IInformationTree5 IInformationTree; public Form1()

{

InitializeComponent(); CoClassTE = new

TerraExplorerClass(); ITerraExplorer = (ITerraExplorer5)CoClassTE; IObjectManager =

(IObjectManager5)CoClassTE; IInformationTree =

(IInformationTree5)CoClassTE; IPlane = (IPlane5)CoClassTE;

IRender = (IRender5)CoClassTE;

IMenu = (IMenu)CoClassTE;

this.CoClassTE.OnLButtonDown+=new

_ITerraExplorerEvents5_OnLButtonDownEventHandler(

OnLButtonDown);

this.CoClassTE.OnRButtonDown+=new

_ITerraExplorerEvents5_OnRButtonDownEventHandler(

OnRButtonDown);

}

private void Form1_Load(object sender, EventArgs e) {

IMenu.Invoke(57601); }

private void btnCreateBox_Click(object sender, EventArgs e) {

IRender.SetMouseInputMode(MouseInputMode.MI_COM_CLIENT);

bIsLine = true; ITeBox = null; }

private ITerrain3DRectBase5 CreateBox(double X, double Y) {

return ITeBox = IObjectManager.CreateBox (X, Y, 0, 100, 50, 100, 30, 255, 1, 300, HeightStyleCode.HSC_TERRAIN_ABSOLUTE , 0, \"Box\");

}

private void OnLButtonDown(int Flags, int X, int Y, ref object bHandled) {

if (bIsLine == true) {

object objType = 63, WX, WH, WY, objID;

IRender.ScreenToWorld(X, Y, ref objType, out WX, out WH, out WY, out objID);

if (ITeBox == null) {

ITeBox =

CreateBox(Convert.ToDouble(WX),Convert.ToDouble(WY)); }

} }

private void OnRButtonDown(int Flags, int X, int Y, ref object bHandled) {

}

IRender.SetMouseInputMode(MouseInputMode.MI_FREE_FLIGHT); bIsLine = false;

IInformationTree.EditItem(ITeBox.InfoTreeItemID);

private void btnCreateBuilding_Click(object sender, EventArgs e) {

IRender.SetMouseInputMode(MouseInputMode.MI_COM_CLIENT);

bIsLine = true; ITeBox = null;

} }

}

(VBScript)

3.9 CreatePyramid

说明 该方法在三维窗口中创建一个金字塔。 语法 void

CreatePyramid ( [in] double X, [in] double Y,

[in] double Elevation, [in] double ObjectWidth, [in] double ObjectDepth, [in] double ObjectHeight,

[in, defaultvalue(0)] double Yaw, [in, defaultvalue(0x0000ff00)] long

LineColor, [in, defaultvalue(FT_NONE)] double FillOpacity, [in, defaultvalue(0x)] long FillColor,

[in, defaultvalue(0)] HeightStyleCode

HeightStyle, [in, defaultvalue(0)] long GroupID,

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

[out, retval] ITerrain3DRectBase5** pITerrain3DRectBase5)

参数说明 § X – 经度。 § Y – 纬度。 § Elevation – 高程。 § ObjectWidth – 金字塔的宽度(单位:meters)。

§ ObjectDepth – 金字塔的深度(单位:meters)。 § ObjectHeight – 金字塔的高度(单位:meters)。 § Yaw – 飞行偏角。 § LineColor – 线的颜色。 § FillOpacity – 透明度。 § FillColor – 填充色。 § HeightStyle –一个决定金字塔在地形图上如何放置的枚举值。HeightStyleCode 可以 取下面的值: o HSC_TERRAIN_RELATIVE = 0 相对高度。 o HSC_TERRAIN_ABSOLUTE = 3 绝对高度。 § GroupID –将要添加到信息树窗口中的新建的金字塔的名称。如果该字符串为空, TerraExplorer 将指定一个默认名称。 § Description –将要添加到信息树窗口中的新建的金字塔的名称。如果该字符串为空, TerraExplorer 将指定一个默认名称。 § pITerrain3DRectBase5 –一个新建金字塔的接口指示器。这个参数必须为空。

返回值 返回值 S_OK E_FAIL TE_E_MPTNOTLOADED 含义 成功 失败 使 用 此 方 法 必 须 先 在 TerraExplorer 加载一个 MPT 文 件 在信息树中输入的组的 ID 值 无效TerraExplorer 不能创建对象。如 果想得到关于这个的更多信息请 使用 IErrorInfo 接口 你没有使用这项功能的许可TE_E_INFOTREE_PARENTNOTGROUP TE_E_INTERNAL TE_E_NOLICENCE 例子 (C#)

using System; using

System.Collections.Generic; using

System.ComponentModel; using System.Data;

using System.Drawing; using System.Text;

using System.Windows.Forms;

using TerraExplorerX; namespace CreatePyramid {

public partial class Form1 : Form {

private TerraExplorer CoClassTE; private

ITerraExplorer5 ITerraExplorer; private IObjectManager5 IObjectManager; private IPlane5 IPlane;

private IRender5 IRender; private IMenu IMenu;

private ITerrain3DRectBase5 ITePyramid; private bool bIsLine = false;

private IInformationTree5 IInformationTree; public Form1() {

InitializeComponent(); CoClassTE = new

TerraExplorerClass(); ITerraExplorer = (ITerraExplorer5)CoClassTE; IObjectManager =

(IObjectManager5)CoClassTE; IInformationTree =

(IInformationTree5)CoClassTE; IPlane = (IPlane5)CoClassTE; IRender =

(IRender5)CoClassTE; IMenu = (IMenu)CoClassTE; this.CoClassTE.OnLButtonDown+=new

_ITerraExplorerEvents5_OnLButtonDownEventHandler(

OnLButtonDown);

this.CoClassTE.OnRButtonDown+=new

_ITerraExplorerEvents5_OnRButtonDownEventHandler(

OnRButtonDown);

}

private void Form1_Load(object sender, EventArgs e)

{

IMenu.Invoke(57601); }

private ITerrain3DRectBase5 CreatePyramid(double X, double Y) {

return ITePyramid = IObjectManager.CreatePyramid(X, Y, 0, 100, 50,

100, 30, 255, 1, 300, HeightStyleCode.HSC_TERRAIN_ABSOLUTE, 0, \"Pyramid\");

}

private void OnLButtonDown(int Flags, int X, int Y, ref object bHandled) {

if (bIsLine == true) {

object objType = 63, WX, WH, WY, objID;

}

}

IRender.ScreenToWorld(X, Y, ref objType, out WX, out WH, out WY, out objID);

if (ITePyramid == null) {

ITePyramid = CreatePyramid(Convert.ToDouble(WX), Convert.ToDouble(WY)); }

private void OnRButtonDown(int Flags, int X, int Y, ref object bHandled) {

IRender.SetMouseInputMode(MouseInputMode.MI_FREE_FLIGHT); bIsLine = false;

IInformationTree.EditItem(ITePyramid.InfoTreeItemID); }

private void btnCreateBuilding_Click(object sender, EventArgs e) {

IRender.SetMouseInputMode(MouseInputMode.MI_COM_CLIENT); bIsLine = true; ITePyramid = null; }

private void btnCreatePyramid_Click(object sender, EventArgs e) {

IRender.SetMouseInputMode(MouseInputMode.MI_COM_CLIENT); bIsLine = true; ITePyramid = null; } }

}

(VBScript)

language=\"vbscript\"> function

CreatePyramidVB(x,y)

dim outX,outY,outH,ObjectID

IRender.ScreenToWorld x,y,63,outX,outH,outY,ObjectID

Set IPyramid = IObjectManager.CreatePyramid(outX,outY,0, 100, 50, 100, 30, 255, 1, 300, 0, 0, \"Pyramid\") end function

3.10 CreateCylinder 方法

语法

ITerrain3DRegBase5 CreateCylinder(double X, double Y, double Elevation, double Radius, double ObjectHeight, int NumOfSegments, int LineColor, double FillOpacity, int FillColor, HeightStyleCode HeightStyle, int GroupID, string Description)

参数 X Y,

Elevation Radius ObjectHeight

NumOfSegments LineColor FillColor HeightStyle GroupID Description

说明

类型

描述 X 坐标 double

Y 坐标 doubl

高e

程 doubl

e

doubl高e 度 doubl边

对象的填充颜色,其值为 RGB 数 int

HeightStyleCode 值。

一个枚举值,主要决定对象在地形 上以什么样的方式显示。放置对象的组编号,如果为 0 int

表示

对象将在根节点下产生。对象在 Information 窗体中显string

示的 名称,如果为空字符TerraExplorer 将自动为其设

置一 个唯一的名称。

创建圆柱体对象 例子

C#:

vbScript:

3.11 CreateCone 方法

语法

ITerrain3DRegBase5 CreateCone(double X, double Y, double Elevation, double Radius, double ObjectHeight, int NumOfSegments, int LineColor, double FillOpacity, int FillColor,

参数类型描述

HeightStyleCode HeightStyle, int GroupID, string Description) X 坐标 X double

Y Elevation Radius

ObjectHeight numOfSegments LineColor FillOpacity

double double double double int int double int

HeightStyleCode

Y 坐标 高程 半径 高度 边数

线颜色,RGB 值,最小为 255。 定义对象的透明度。0 为透明,1 为 不透明。

对象的填充颜色,其值为 RGB 值。 一个枚举值,主要决定对象在地形

FillColor HeightStyle

GroupID Description

int string

上以什么样的方式显示。 放置对象的组编号,如果为 0 表示 对象将在根节点下产生。 对象在 Information 窗体中显示的 名称,如 果为空字 符串, TerraExplorer 将自动为其设置一 个唯一的名称。

说明

创建圆锥体对象 例子

C#:

vbScript: 3.12 CreateEllipse

语法

ITerrainEllipse5 CreateEllipse(double X, double Y, double Elevation, double RadiusX, double RadiusY, int NumOfSegments, int LineColor, double FillOpacity, int FillColor, HeightStyleCode HeightStyle, int GroupID, string Description) 参数 类型 描述 X double X 坐标 Y double Y 坐标 Elevation double 高程 RadiusX double X 半轴长 RadiusY double Y 半轴长 NumOfSegments int 边数 LineColor int 线颜色,RGB 值,最小为 255。 FillOpacity double 定义对象的透明度。0 为透明,1

为不透明。

FillColor int 对象的填充颜色,其值为 RGB 值。 HeightStyle HeightStyleCode 一个枚举值,主要决定对象

在地 形上以什么样的方式显示。

GroupID int 放置对象的组编号,如果为

0 表 示对象将在根节点下产生。

Description string 对象在 Information 窗体中

显示 的名称 , 如果为 空 字符串, TerraExplorer 将自动为其设置 一个唯一的名称。

说明

创建 椭圆 对象 例子

C#:

vbScript: 3.13 CreateArc

创建弧对象 说明 例子

C#:

vbScript: 3.14 CreateArrow

创建箭头对象 说明 例子

C#:

vbScript:

3.15 Create3DArrow 创建三维箭头对象

说明 例子

C#:

vbScript: 3.16 CreateSphere

创建球体对象 语法

ITerrainSphere5 CreateSphere(double X, double Y, double Elevation, double Radius, SphereStyle Style, int SegmentDensity, int LineColor, double FillOpacity, int FillColor, HeightStyleCode HeightStyle, int GroupID, string Description)

参数 X

Y Elevation Radius SphereStyle SegmentDensity LineColor FillOpacity

类型 double double double double

SphereStyle int int double

描述 X 坐标

Y 坐标

高程值 半径 枚举值,球体风格定义 边密度值,范围在 1 到 10 之间 线颜色,RGB 值,最小为 255。 定义对象的透明度。0 为透明,1 为 不透明。

对象的填充颜色,其值为 RGB 值。 一个枚举值,主要决定对象在地形 上以什么样的方式显示。

放置对象的组编号,如果为 0 表示 对象将在根节点下产生。

对象在 Information 窗体中显示的

FillColor HeightStyle GroupID Description

int

HeightStyleCode int string

说明 例子

C#:

vbScript: 3.17 CreateModel

名称,如 果为空字 符串, TerraExplorer 将自动为其设置一 个唯一的名称。

创建模型对象 语法

ITerrainModel5 CreateModel(double X, double Y, double Elevation, string FileName, double Yaw, double Pitch, double Roll, double Scale, HeightStyleCode HeightStyle, ModelTypeCode ModelType, int GroupID, string Description) 参数 类型 描述 X double X 坐标 Y double Y 坐标 Elevation double 高程值 FileName string 文件名 Yaw double 偏航角 Pitch double 倾斜角 Roll 旋转角 Scale double 模型比例

HeightStyle HeightStyleCode 一个枚举值,主要决定对象在地

形上 以什么样的方式显示。

ModelType ModelTypeCode 模型类型 GroupID int 放置对象的组编号,如果为 0 表

示对 象将在根节点下产生。

Description string 对象在 Information 窗体中显

示的 名称,如果为空字符串, TerraExplorer 将自动为其设置一 个唯一的名称。

说明 例子

C#:

vbScript: 3.18 CreateLabel

创建标签对象 语法

ITerrainLabel5 CreateLabel(object LabelInfo, double X, double Y, double Elevation, HeightStyleCode HeightStyle, int GroupID, string Description) 参数 类型 描述 LabelInfo object 标签信息

X Y Elevation

HeightStyle GroupID Description 说明 例子

C#:

vbScript: 3.19 CreateLabelEx

创建扩展的标签对象 语法

ITerrainLabel5 CreateLabelEx(LabelStruct LabelInfo, double X, double Y, double Elevation, HeightStyleCode HeightStyle, int GroupID, string Description) 参数 类型 描 述

LabelInfo LabelStruct 标签信息 X double X 坐标 Y double Y 坐标 Elevation double 高程值

HeightStyle HeightStyleCode 一个枚举值,主要决定对象在地

形上 以什么样的方式显示。

GroupID int 放置对象的组编号,如果为 0 表

示对 象将在根节点下产生。

Description string 对象在 Information 窗体中显示

的名 称,如果为空字符串,TerraExplorer 将自动为其设置一个唯一的名称。

说明 例子

C#:

vbScript: 语法:

3.20 CreateLocation

语法

ITerrainLocation5 CreateLocation(double X, double Y, double Elevation, double Yaw, double

doubl

e double doublint string

X 坐标 Y 坐标 高程值

一个枚举值,主要决定对象在地放置对象的组编号,如果为 0 表示对

象将在根节点下产生。对象在 Information 窗体中显示

的名 称,如果为空字符串,将自动为其设置一个唯一的名称。

Pitch, double Distance, HeightStyleCode HeightStyle, int GroupID, string Description) 参数 类型 描述 X double X 坐标

Y

ElevatioYaw Pitch Distance HeightStyle

GroupID Description 说明

创建视图 例子

C#:

vbScript: 说明

3.22 CreateRoute

创建路径对象 语法

ITerrainRoute5 CreateRoute(object SafeArrayWaypointStruct, HeightStyleCode HeightStyle, int

GroupID, string Description) 参数 类型 描述 SafeArrayWaypointStruct double HeightStyle HeightStyleCode 一个枚举值,主要决定对象

在地 形上以什么样的方式显示。

GroupID int 放置对象的组编号,如果为

0 表 示对象将在根节点下产生。

Description string 对象在 Information 窗体中

显示 的名称 , 如果为 空 字符串, TerraExplorer 将自动为其设置 一个唯一的名称。

说明 例子

C#:

vbScript: 3.23 CreateMessage

Y 坐标 doubl

e

偏航角 doubl

倾斜角 e

double

HeightStyleCod一个枚举值,主要决定对象在地

形上 以什么样的方式显示。

放置对象的组编号,如果为 0 表int

示对

象将在根节点下产生。对象在 Information 窗体中显示string

的名 称,如果为空字符串,将自动为其设置一个唯一的名称。

3.21 CreateTreeHotlink

创建消息对象

语法

ITerraExplorerMessage5 CreateMessage(MsgClient Client, string Data, MsgType Type, _HTML_POPUP_FLAGS PopupFlags, string PopupCaption, double PopupTimeout, int

PopupTopLeftX, int PopupTopLeftY, int PopupWidth, int PopupHeight, int BringToFront) 参数 类型 描

述 Client MsgClient

Data string

MsgType MsgType

PopupFlags _HTML_POPUP_FLA

GS PopupCaption string

PopupTimeout double

PopupTopLeftX int

PopupTopLeftY int

PopupWidth int

PopupHeight int

BringToFront int

说明

3.24 GetObject

获得对象

语法

ITerraExplorerObject5 GetObject(string ObjectID) 说明 通过对象编号获取到对象。 例子

C#:

vbScript: 3.25 CreateImageLabel

创建影像标签对象 语法

ITerrainImageLabel5 CreateImageLabel(double X, double Y, double Elevation, string ImageFileName, HeightStyleCode HeightStyle, int GroupID, string Description)

参数 X Y

Elevation

ImageFileName HeightStyle

类型 描述

X 坐标 double

double Y 坐标 double

string

HeightStyleCode 一个枚举值,主要决定对象在地形

上以什么样的方式显示。

int 放置对象的组编号,如果为 0 表示 string

对象将在根节点下产生。

对象在 Information 窗体中显示的 名称, 如 果为空 字 符串,

GroupID Description

说明

3.26 CreateImageLabelEx

TerraExplorer 将自动为其设置一 个唯一的名称。

创建影像标签对象 语法

ITerrainImageLabel5 CreateImageLabelEx(LabelStruct ImageLabelInfo, double X, double Y, double Elevation, HeightStyleCode HeightStyle, int GroupID, string Description) 参数 类型 描述 ImageLabelInfo LabelStruct X double X 坐标 Y double Y 坐标 Elevation double HeightStyle HeightStyleCode 一个枚举值,主要决定对象在地

形上 以什么样的方式显示。

GroupID int 放置对象的组编号,如果为 0 表

示对 象将在根节点下产生。

Description string 对象在 Information 窗体中显

示的 名称, 如 果为空 字 符串, TerraExplorer 将自动为其设置一 个唯一的名称。

说明

3.27 CreateDynamicObject

语法

ITerrainDynamicObject5 CreateDynamicObject(DynamicMotionStyle MotionStyle, DynamicObjectType ObjectType, string FileNameOrText, double ScaleFactor, HeightStyleCode HeightStyle, int GroupID,

描述 动态对象参数 类型

string Description) MotionStyle DynamicMotionStyle 的样式

ObjectType

FileNameOrText

DynamicObjectType string

对象的类型

如果 ObjectType 值被设置为 DYNAMIC_TEXT_LABEL ,此参 数为影像 标签文本 ;如果 ObjectType 值 被 设 置 为 DYNAMIC_3D_MODEL 或 DYNAMIC_IMAGE_LABEL,此参 数为 3D model 文件或 image 文件。 模型比例

一个枚举值,主要决定对象在地形 上以什么样的方式显示。 放置对象的组编号,如果为 0 表示 对象将在根节点下产生。

ScaleFactor HeightStyle GroupID

double

HeightStyleCode int

Description

string

对象在 Information 窗体中显示的 ,如 果为空字 符名称串,

TerraExplorer 将自动为其设置一 个唯一的名称。

说明

创建动态对象 例子

C#:

vbScript: 3.28 CreateImageryLayer

创建影像图层对象 语法

ITerrainRasterLayer5 CreateImageryLayer(string ImageryFileName, double UpperLeftX, double UpperLeftY, double LowerRightX, double LowerRightY, object InitParam, object PlugName, int GroupID, string Description) 参数 类型 描述 ImageryFileName string UpperLeftX double UpperLeftY double LowerRightX double LowerRightY double InitParam object PlugName object GroupID int 放置对象的组编号,如果为 0 表示

对象将在根节点下产生。

Description string 对象在 Information 窗体中

显示 的名称,如果为空字符串, TerraExplorer 将自动为其设置 一个唯一的名称。

说明 例子

C#:

vbScript: 3.29 CreateElevationLayer 语法

ITerrainRasterLayer5 CreateElevationLayer(string ElevationFileName, double UpperLeftX, double UpperLeftY, double LowerRightX, double LowerRightY, object

InitParam, object PlugName, int GroupID, string Description, double HScale, double HOffset) 参数 类型 描述 ElevationFileName string

UpperLeftX double

UpperLeftY LowerRightX

LowerRightY InitParam GroupID Description HScale HOffset 说明

创建高程层 例子

C#:

vbScript: 3.30 CreateVideoOnTerrain 创建视频 语法

double double doublint string

double double

放置对象的组编号,如果为 0 表

示对 象将在根节点下产生。

对象在 Information 窗体中显示

的名称,如果为空字符串,

TerraExplorer将自动为其设置一个唯一的名

称。

ITerrainVideo5 CreateVideoOnTerrain(string VideoFileName, double X, double Y, double Elevation, double Yaw, double Pitch, HeightStyleCode HeightStyle, int GroupID, string Description) 参数 类型 描述 VideoFileName string X double X 坐标 Y double Y 坐标 Elevation double 高程值 Yaw double 偏航角 Pitch double 倾斜角

HeightStyle HeightStyleCode 一个枚举值,主要决定对象在地

形上 以什么样的方式显示。

GroupID int 放置对象的组编号,如果为 0 表

示对 象将在根节点下产生。

Description string 对象在 Information 窗体中显

示的 名称,如 果为空字 符串, TerraExplorer 将自动为其设置一 个唯一的名称。

说明 例子

C#:

vbScript:

3.31 CreatePointCloudModel 语法

ITerrainPointCloudModel5 CreatePointCloudModel(string ModelFileName, double X, double Y, double Elevation, double Yaw, double Pitch, double Roll, HeightStyleCode HeightStyle, int GroupID, string Description) 参数 类型 描述

ModelFileName string 点云模型的全路径名或 URL 地址 X double X 坐标 Y double Y 坐标 Elevation double 高程值 Yaw double 偏航角 Pitch double 倾斜角 Roll double 旋转角

HeightStyle HeightStyleCode 一个枚举值,主要决定对象在地

形上 以什么样的方式显示。

GroupID int 放置对象的组编号,如果为 0 表

示对 象将在根节点下产生。

Description string 对象在 Information 窗体中显示

的名 称,如果为空字符串,TerraExplorer 将自动为其设置一个唯一的名称。

说明

创建点云模型对象 例子

C#:

vbScript: 3.32 CreateFromStream

语法

ITerraExplorerObject5 CreateFromStream(object Stream, int GroupID) 说明

保留,当前不能使用。 3.33 GetFirstObjectPosition

语法

object GetFirstObjectPosition(ObjectTypeCode Filter) 说明

保留,当前不能使用 3.34 GetNextObject

语法

ITerraExplorerObject5 GetNextObject(ref object Pos) 说明

保留,当前不能使用。 3.35 GetInfoTreeItemID

语法

int GetInfoTreeItemID(string ObjectID) 参数 类型 描述 ObjectID string 对象编号 说明

通过对象编号获取到信息树中相应对象的 ItemID 号。 例子

C#:

private void OnLButtonDown(int Flags, int X, int Y, ref object pbHandled)

{

IRender.SetMouseInputMode(MouseInputMode.MI_COM_CLIENT);

object ObjectType=63, WorldX, WorldHeight, WorldY, ObjectID; IRender.ScreenToWorld(X, Y, ref ObjectType, out WorldX, out WorldHeight, out WorldY,

out ObjectID);

int ItemID =

IOjbectManager.GetInfoTreeItemID(ObjectID.ToString()); MessageBox.Show(ItemID.ToString()); }

vbScript:

Sub TE_OnLButtonDown (Flags, X, Y,bHandled) Dim ItemID ObjType = 63 '监视所有对象类型 IRender.SetMouseInputMode 1

IRender.ScreenToWorld X , Y , ObjType , WorldX,WorldHeight,WorldY, ObjectID select case ObjType case \"0\"

MsgBox \"Terrain coordinates: \" + Chr(13)+Chr(10) + cstr(WorldX) + \"/\" + cstr(WorldY) case \"32\"

MsgBox \"You clicked the sky\" case else

ItemID = IObjectManager.GetInfoTreeItemID(ObjectID)

msgbox ItemID end select bHandled = true End Sub

3.36 SetObjectParam

语法

void SetObjectParam(string ObjectID, int Code, object Param)

说明

保留,当前不能使用 3.37 GetObjectParam

语法

object GetObjectParam(string ObjectID, int Code) 说明

保留,当前不能使用

1.4 IInformationTree5

主要对信息树进行管理维护,可以创建组、修改组、删除组、重命名组、组 排序、对象查询等。 IInformationTree5 方法: CreateGroup, CreateLockedGroup,RenameGroup, ExpandGroup, GetItemName, DeleteItem, SetParent, GetNextItem, FindItem, GetTerraObjectID, SetGroupColor, GetGroupColor, EnableRedraw, IsGroup, SetGroupVisibility, SortGroup, SetGroupLocation, GetGroupLocation, CreateLockedGroupEx, SetActivationCode, GetActivationCode, SetClientData, GetClientData, GetObject, SetParentEx, ReloadLayer, EditItem, EditItems, LoadFlyLayer, IsGroupEx, GetGroupVisibility, SaveFlyLayer, CreateLayer, EditItemEx, EndEdit, SetClientDataEx, GetClientDataEx, GetLayer, SetVisibility, GetVisibility, GetObjectEx, LoadLayerEx, LockGroup (1)CreateGroup 方法:在信息树窗口创建一个新组 HRESULT Create Group ([in] BSTR Group Name , [in , default value(0)] long

ParentGroupID,[out, rival] long *pVal)

参数: GroupName – 要创建的组名 ParentGroupID – 在信息树窗口中让用户明确在那一个父节点下,这个 组应当被创建,默认设置为 0。如果不明确,新组将被作为根节点,ParentGroupID 必须是一个有效的分组编号。 pVal – 一旦本方法调用被返回, pVal 包含创建组的 ID 号。 C#

objTerraExplorer = new TerraExplorerClass();

IInformationTree5 objIInformationTree5 = objTerraExplorer IInformationTree5;

objIInformationTree5.CreateGroup(\"New Group\VBScript : Sub

CreateGroup()

Set IInformationTree=TE.interface(\"IInformationTree5\")

as

IInformationTree.CreateGroup \"New Group\" End Sub

(2)CreateLockedGroup 方法:在锁定(或折叠)模式下创建一个组。当被 锁定的时候, TerraExplorer 一般用户不能展开该组。

HRESULT CreateLockedGroup ([in] BSTR GroupName,[in, defaultvalue(0)] long ParentGroupID,[out, retval] long *pVal) 参数:

GroupName – 被创建组的命名标志

ParentGroupID –在信息树窗口中让用户明确在那一个父节点下,这个组 应当被创建,默认设置为 0。如果不明确,新组将被作为根节点,ParentGroupID 必须是一个有效的分组编号。

pVal – 一旦本方法调用被返回,pVal 包含创建的锁定组的 ID 号。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必 须装载到 TerraExplorer 中 TE_E_INFOTREE_PARENTNOTGROUP 输入的 ParentGroupID 并不是一 个有效的分组 Id 号 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版 本,没有使用此接口的许可 备注: 在被锁定的组中,用户不能在 TerraExplorer 中展开节点内容。 C#:

IInformationTree5 objIInformationTree5 = objTerraExplorer as IInformationTree5;

objIInformationTree5.CreateLockedGroup(\"New Locked Group\VBScript : Sub

CreateLockedGroup()

Set

IInformationTree=TE.Interface(\"IInformationTree

5\") IInformationTree.CreateLockedGroup

\"Locked Group\

End Sub

(3)RenameGroup 方法:RenameGroup 重命名一个特定的组。

HRESULT RenameGroup ([in] long GroupID,[in] BSTR GroupName) 参数: GroupID – 引用重命名的组,通过以下的方法获得 GroupID:CreateGroup

方法的调用;如果你知道组名,用 FindItem 方法进行查找;使用信息树的一些 方法(例如:GetNextItem)遍历所有数据,直到找到期望的 GroupID 号。 GroupName – 新组名 返回值: 类型为 HRESULT 类型的成员函数返回值具体如下:

返回值 含义

S_OK E_FAIL TE_E_MPTNOTLOADED TE_E_INFOTREE_ITEMNOTGROUP TE_E_NOLICENSE 操作成功 操作失败 使用此方法进行操作,MPT 文件 必须装载到 TerraExplorer 中 输入的子项并不是一个组,因此 不能重命名 你正使用的是 TerraExplorer 版 本,没有使用此接口的许可 C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int GroupID=objIInformationTree5.FindItem(\"Test Group\"); objIInformationTree5.RenameGroup(GroupID ,\"Your Name\"); VBScript :

Sub RenameGroup()

Set

IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test Group\") IInformationTree.RenameGroup GroupID,\"Your Group name\" End Sub

(4)ExpandGroup 方法:展开特定的组以便显示所有它的子项或者折叠该组。 TerraExplorer Viewer 支持本方法。

HRESULT ExpandGroup ([in] long GroupID,[in] BOOL bExpand) 参数:

GroupID – 引用这个被展开或折叠的组。 通过以下的方法获得 GroupID: CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查找;使用 信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到期望的 GroupID 号。

bExpand – 一个布尔值,决定组是否展开或折叠。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_INFOTREE_ITEMNOTGROUP 输入的子项并不是一个组,因此不能 重命名 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int GroupID=objIInformationTree5.FindItem(\"Test Group\"); objIInformationTree5.ExpandGroup(GroupID, 1);

VBScript :

Sub ExpandGroup()

Set

IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test Group\") IInformationTree.ExpandGroup GroupID,1 End Sub

(5)GetItemName 方法:使用 ItemID 获取某个子项的名称,TerraExplorer Viewer 支持本方法。

HRESULT GetItemName ([in] long ItemID,[out, retval] BSTR *ItemText) 参 数: ItemID – 要查找的子项的 id 号。

ItemText – 一旦本方法调用被返回,ItemText 包含显示在信息窗口中条目的 名称

返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 E_INVALIDARG 一个或多个参数传递到方法中产生问 题,使用 IErrorInfo 接口去提取更多 的错误信息 C#: Object Name

IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int ItemID=objIInformationTree5.FindItem(\"Test Group\\SetParent Test\");

objIInformationTree5.GetItemName(ItemID,out Name) VBScript :

Sub GetNextItem()

Set IInformationTree=TE.interface(\"IInformationTree5\") ItemID=IInformationTree.FindItem(\"Test Group\\SetParent Test\")

objID=IInformationTree.GetNextItem(ItemID,13) ObjName=IInformationTree.GetItemName(ObjID) XX.value=objName End Sub

(6)DeleteItem 方法:删除树中的一个子项。

HRESULT DeleteItem ([in] long ItemID) 参 数: ItemID – 要删除子项的 id 号 返回值: 类型为 HRESULT 类型的成员函数返回值具体如下:

返回值 S_OK E_FAIL TE_E_MPTNOTLOADED 含义 操作成功 操作失败 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 备注: 如果 ItemID 是一个组,其下所有的子项也被删除 C#:

IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int ItemID=objIInformationTree5.FindItem(\"Test Group\\SetParent Test\"); objIInformationTree5.DeleteItem(ItemID) VBScript :

Sub GetNextItem()

Set IInformationTree=TE.interface(\"IInformationTree5\") ItemID=IInformationTree.FindItem(\"Test

Group\\SetParent Test\") IInformationTree. DeleteItem (ItemID) End Sub

(7)SetParent 方法:移动条目到不同的组。

HRESULT SetParent ([in] long ItemID,[in] long ParentGroupID) 参 数:

ItemID – 要移动条目的 ItemID 号。 ParentGroupID – 要移动到父节点的 id 号,ParentGroupID 必须是一个有 效的 id 号。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必 须装载到 TerraExplorer 中 TE_E_INFOTREE_PARENTNOTGROUP 输入的 ParentGroupID 并不是一个 有效的分组 Id 号 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版 本,没有使用此接口的许可 E_INVALIDARG 一个或多个参数传递到方法中产生 问题,使用 IErrorInfo 接口去提取 更多的错误信息 C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as IInformationTree5; int ItemID =

objIInformationTree5.FindItem(\"SetParent Test\"); int

GroupId = objIInformationTree5.FindItem(\"Test Group\"); objIInformationTree5.SetParent(ItemID, GroupId);

VBScript :

Sub Setparent()

Set IInformationTree=TE.interface(\"IInformationTree5\") ItemID=IInformationTree.FindItem(\"Test Group\\SetParent Test\")

GroupID=IInformationTree.FindItem(“New Group”) IInformationTree..SetParent (ItemID,GroupID) End Sub ( 8 ) GetNextItem 方法 : 调用本方法可以获得 ItemID 特定关联的子项, TerraExplorer Viewer 支持本方法。 HRESULT GetNextItem ([in] long ItemID,[in] ItemCode Code,[out, retval] long *pVal) 参数:

ItemID – 参照的子项 ID 号,通过其找到下一个条目。 Code – 指示要被搜索的代码。

SELECTED – 10 下一个选择的条目 CHILD – 11 ItemID 下的第一个节点 FIRSTVISIBLE – 12 信息树中第一个可视节点 NEXT – 13 ItemID 中子项的同级节点 NEXTVISIBLE – 14 ItemID 之后的下一个可视节点 PARENT – 15 ItemID 的父节点 PREVIOUS – 16 ItemID 之前节点下子项的同级节点

PREVIOUSVISIBLE – 17 ItemID 之前的前一个可视节点

ROOT – 18 树的根节点

pVal – 一旦本方法调用被返回, pVal 包含条目的 ID 号。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须 装载到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as IInformationTree5;

int ItemID = objIInformationTree5.FindItem(\"Test Group\\\\SetParent Test\"); int objID=IInformationTree.GetNextItem(ItemID,13) VBScript :

Sub GetNextItem()

Set IInformationTree=TE.interface(\"IInformationTree5\") ItemID=IInformationTree.FindItem(\"Test Group\\SetParent Test\")

objID=IInformationTree.GetNextItem(ItemID,13) ObjName=IInformationTree.GetItemName(ObjID) XX.value=objName

End Sub

(9)FindItem 方法:在指定的路径下查找子项,TerraExplorer Viewer 支持 此方法。

HRESULT FindItem ([in] BSTR PathName,[out, retval] long *pVal) 参 数: PathName – 要搜索的子项的路径名,通过‘\\’进行分割 (例如: “Cities\\Boston”)。 pVal – 一旦本方法调用被返回, 在信息树中,如果找到子项,pVal 包 含子项的 id 号,如果未找到则返回 0 值。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须 装载到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as IInformationTree5;

int ItemID = objIInformationTree5.FindItem(\"Test Group\\\\SetParent Test\"); VBScript :

Sub GetNextItem()

Set IInformationTree=TE.interface(\"IInformationTree5\") ItemID=IInformationTree.FindItem(\"Test Group\\SetParent Test\") XX.value=ItemID End Sub

(10)GetTerraObjectID 方法:GetTerraObjectID 使用 ItemID 去获取真实对 象的与树节点相关联的 id 号,TerraExplorer Viewer 支持本方法。

HRESULT GetTerraObjectID ([in] long ItemID,[out, retval] BSTR *pVal) 参 数: ItemID – 信息树中要查找对象的 id 号。 pVal – 一旦本方法调用被返回,pVal 包含对象的 TerraObjectID 号。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装载 到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本,没 有使用此接口的许可 C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as IInformationTree5; int ItemID = objIInformationTree5.FindItem(\"Test Group\\\\SetParent Test\"); int

ObjectID=objIInformationTree5.GetTerraObjectID(ItemID); VBScript : Sub

GetTerraObjectID()

Set

IInformationTree=TE.interface(\"IInformationTree5\") ItemID=IInformationTree.FindItem(\"Test Building\") TerraObjectID=IInformationTree.GetTerraObjectID(ItemID) XX.value=TerraObjectID End Sub

(11)SetGroupColor 方法:SetGroupColor 方法指定一个颜色到特定的组, 仅当该组被锁的时候,颜色可视。 HRESULT SetGroupColor ([in] long GroupID,[in,defaultvalue(0x00ffffff)] long GroupColor) 参 数: GroupID – 当被锁定的时候引用有特殊颜色的组。通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查 找;使用信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到期 望的 GroupID 号。 GroupColor – 设置组的颜色。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_INFOTREE_ITEMNOTGROUP 输入的子项并不是一个组,因此不能 重命名 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 备注:如果这个组包含一个层(例如:河流),这个方法能被用来设置组的颜色。 C#:

IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int GroupID=objIInformationTree5.FindItem(\"Test Group\"); objIInformationTree5.LockGroup(GroupID,1); objIInformationTree5.SetGroupColor(GroupID, 1);

VBScript :

Sub SetGroupColor()

Set

IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test Group\") IInformationTree.SetGroupColor GroupID,ff0080 End Sub

(12)GetGroupColor 方法:GetGroupColor

GetGroupColor 方法返回特定组的颜色。

HRESULT GetGroupColor ([in] long GroupID,[out, retval] long *pVal) 参 数: GroupID – 你正在搜索的那个组的颜色。 通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查 找;使用信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到期 望的 GroupID 号。 pVal – 一旦本方法调用被返回, pVal 包含特定组的颜色。 返回值: 类型为 HRESULT 类型的成员函数返回值具体如下: 返回值 S_OK E_FAIL TE_E_MPTNOTLOADED TE_E_INFOTREE_ITEMNOTGROUP TE_E_NOLICENSE 含义 操作成功 操作失败 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 输入的子项并不是一个组,因此不能 重命名 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 C#:

IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int ItemID=objIInformationTree5.FindItem(\"Test Group\"); objIInformationTree5.LockGroup(ItemID ,1); GroupColortextBox .Text=

objIInformationTree5.GetGroupColor(ItemID).ToString (); VBScript :

Sub GetGroupColor()

Set

IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test Group\")

GroupColor=IInformationTree.GetGroupColor(GroupID) XX.value=GroupColor End Sub

(12)EnableRedraw 方法:本方法允许在信息树中重画或者防止被重画。 HRESULT EnableRedraw ([in] BOOL bEnable) 参 数: bEnable –指示信息树是否能被重画。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL TE_E_MPTNOTLOADED 操作失败 使用此方法进行操作,MPT 文件必须装 TE_E_NOLICENSE 载到 TerraExplorer 中 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 (13)IsGroup 方法:IsGroup 方法决定信息树条目是否是一个组。TerraExplorer Viewer 支持本方法。

HRESULT IsGroup([in] long ItemID,[out, retval] BOOL *pVal) 参 数: ItemID – 要进行判断的树分支条目的 id 号。 pVal – 一旦本方法调用被返回, pVal 包含指示被给 ItemID 是否是组 的布尔值 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 (14)SetGroupVisibility 方法:SetGroupVisibility 在 Terrain 中,本方法 在一个组中设置所有的对象可视或不可视。TerraExplorer Viewer 支持本方法。 HRESULT SetGroupVisibility ( [in] long GroupID, [in] long bShow) 参 数: GroupID – 引用要设制的可视或不可视的组,通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查 找;使用信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到期 望的 GroupID 号。 bShow –当设置为 TRUE 时,组中所有对象可视(FALSE-不可视)。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_INFOTREE_ITEMNOTGROUP 输入的子项并不是一个组,因此不能 重命名 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int GroupId=objIInformationTree5.FindItem(\"Test Group\"); objIInformationTree5.SetGroupVisibility(GroupId,0); VBScript :

Sub SetGroupVisibility()

Set

IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test

Group\")

IInformationTree.SetGroupVisibility

GroupID,1

End Sub

(15)SortGroup 方法:根据特定的排序类型对组中的子项进行排序。 HRESULT SortGroup( [in] long GroupID, [in, defaultvalue(0)] SortType SType) 参 数: GroupID – 被排序的组的 GroupID。如果它被设置为 0,根节点组被排序。 通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查找;使用信息树的一些方法(例如:GetNextItem)遍历所 有数据,直到找到期望的 GroupID 号。

SType –一个枚举类型,决定组中的排序类型。

SORT_ALPHABETICALLY_AZ = 0 按字母顺序升序排列。

SORT_ALPHABETICALLY_ZA = 1 按字母顺序降序排列。 SORT_BY_TYPE = 2

通过 TerraExplorer 类型进行排序。对象按以下的顺序进行排序 :

Aerial Dynamic Object; Ground Dynamic Object; Route; Location; Text Label;Image Label; Static 3D Model;2D Polygon;Rectangle; 3D Polygon;2D Arrow; 3D Arrow;Arc;Ellipse; Circle; Sphere; Cone; Cylinder;Building; Pyramid; Box; Group。 同一类型的对象按照字母表进行排序 (A>Z)。 SORT_NO_SORT = 3 不使用排序。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_INFOTREE_ITEMNOTGROUP 输入的子项并不是一个组,因此不能 重命名 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int GroupID = objIInformationTree5.FindItem(\"Test Group\");

objIInformationTree5.SortGroup(GroupID ,SortType .SORT_BY_TYPE );

VBScript : Sub SortGroup()

Set

IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test Group\") IInformationTree.SortGroup GroupID,2

End Sub

(16)SetGroupLocation 方法:确定特定组的位置参数。

HRESULT 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,

[in, defaultvalue(0)] long Flags) 参 数: GroupID –引用要设置位置变化的组的 GroupID。 通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查 找;使用信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到期 望的 GroupID 号。 X – 相机位置的东--西坐标以 MPT 单位显示。你能使用 ITerrain 接口去 获得获取关于 MPT 单元的信息。如果你以经纬度方式工作,这个经纬度值以经纬 度方式提供。 Y – 相机位置的北--南坐标以 MPT 单位显示。 你能使用 ITerrain 接口去 获得获取关于 MPT 单元的信息。如果你以经纬度方式工作,这个经纬度值以经纬 度方式提供。 Height – 相机的高度, 用米表示 Distance – 相机到兴趣点的距离。 Yaw – 飞机的偏航角。 Pitch – 飞机的螺旋角。 Flags – 在高度参数中指示海拔高度。本参数可以是以下的任何一个值: HEIGHT_ABSOLUTE = 8192 地面以上的高度。

HEIGHT_AGL = 4096 基于椭球体地形垂直数据即为此高度。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_INFOTREE_ITEMNOTGROUP 输入的子项并不是一个组,因此不能 重命名 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 TE_E_INFOTREE_CANTUSEROOT 本操作不能使用根节点 C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int GroupID=objIInformationTree5.FindItem(\"Test Group\"); objIInformationTree5.SetGroupLocation(GroupID, 101, 39, 4000, 5000, 0, 0, 0); VBScript :

Sub SetGroupLocation()

Set IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test Group\") IInformationTree.SetGroupLocation GroupID ,111,39,20,4000,0,0,0

End Sub

(17)GetGroupLocation 方法:本方法获得以下的参数,它定义了特定组的 的位置参数。

HRESULT GetGroupLocation( [in] long GroupID,

[out] VARIANT* doubleX, [out] VARIANT* doubleY,

[out] VARIANT* doubleHeight, [out] VARIANT* doubleDistance, [out] VARIANT* doubleYaw, [out] VARIANT* doublePitch, [out] VARIANT* longFlags) 参 数:

GroupID – 引用你要获得位置的组的 GroupID。 通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查 找;使用信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到期 望的 GroupID 号。

doubleX –相机位置的东--西坐标以 MPT 单位显示。你能使用 ITerrain 接口去获得获取关于 MPT 单元的信息。如果你以经纬度方式工作,这个经纬度值 以经纬度方式提供。

doubleY – 相机位置的北--南坐标以 MPT 单位显示。你能使用 ITerrain 接口去获得获取关于 MPT 单元的信息。如果你以经纬度方式工作,这个经纬度值 以经纬度方式提供。

doubleHeight – 相机的高度, 地面以上用米表示。 doubleDistance – 相机到兴趣点的距离。 doubleYaw – 飞机的偏航角。 doublePitch – 飞机的螺旋角。

Flags –在高度参数中指示海拔高度。本参数可以是以下的任何一个值: HEIGHT_ABSOLUTE = 8192 地面以上的高度 HEIGHT_AGL = 4096 基于椭球体地形垂直数据即为此高度。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_INFOTREE_ITEMNOTGROUP 输入的一个项目并不是一个组,因此 不能得到定位参数 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 TE_E_INFOTREE_CANTUSEROOT 本操作不能使用根节点 C#: IInformationTree5 objIInformatioinTree5 = objTerraExplorer as IInformationTree5;

int GroupId=objIInformatioinTree5.FindItem(\"Test Group\"); object x, y, h, yaw, distance, pitch,flags;

objIInformatioinTree5.GetGroupLocation(GroupId, out x, out y, out h, out distance, out yaw, out pitch, out flags); XtextBox.Text = x.ToString();

YtextBox.Text = y.ToString(); HtextBox.Text = h.ToString(); DtextBox.Text = distance.ToString(); YawtextBox.Text =

yaw.ToString(); PtextBox.Text = pitch.ToString(); FlagstextBox.Text = flags.ToString(); VBScript :

Sub GetGroupLocation()

Set

IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test Group\") IInformationTree.GetGroupLocation GroupID,x,y,h,d,yaw,p,f XX.value=x YY.value=y HH.value=h DD.value=d YA.value=yaw

PP.value=p FF.value=f End Sub

(18)CreateLockedGroupEx 方法:以一个锁定的(或折叠)模式创建一个组, 并且设置信息树中组的符号。

HRESULT CreateLockedGroupEx( [in] BSTR GroupName, [in, defaultvalue(0)] long ParentGroupID, [in,defaultvalue(0)] GroupIconIndex Index, [out,retval] long* pVal) 参 数: GroupName – 被创建组的命名标志 ParentGroupID – 在信息树中,允许用户明确上一节点下创建的新组。 默认设置为 0, 如果不明确,在树根节点上创建组。 这个 ParentGroupID 必须 是一个有效的组 ID 号。 Index – 确定用来表示组的符号,这个符号可以是下列选项的任何一个:

GROUP_PLAIN = 0

GROUP_SHP = 1

GROUP_SDE = 2 GROUP_DXF = 3 GROUP_ORA = 4 GROUP_ASC = 5 GROUP_BMP = 6

GROUP_BUILDING = 7

GROUP_FLY = 8 GROUP_LINE = 9

GROUP_LINEOFSIGHT = 10 GROUP_OBJ = 11 GROUP_POINT = 12 GROUP_POLYGON = 13

GROUP_TXT = 14

pVal – 一旦本方法调用被返回, pVal 包含被创建组锁定的 ID 号。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_INFOTREE_PARENTNOTGROUP 输入的 ParentGroupID 并不是一个有 效的分组 Id 号 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 (19)SetActivationCode 方法:当点击被锁的组的符号时,确定这个默认的 激活动作执行。

HRESULT SetActivationCode( [in] long GroupID , [in] ActionCode ACode, [in, defaultvalue(-1)] int ActivationParam); 参 数:

GroupID –引用要激活设置的组的 GroupID。 通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查 找;使用信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到期 望的 GroupID 号。

ACode –确定如何飞向组对象的一个枚举,ActionCode 如下:

AC_FLYTO = 0 AC_CIRCLEPATTERN = 1 AC_OVALPATTERN = 2 AC_LINEPATTERN = 3 AC_ARCPATTERN = 4 AC_FOLLOWBEHIND = 5 AC_FOLLOWABOVE = 6 AC_FOLLOWBELOW = 7 AC_FOLLOWRIGHT = 8 AC_FOLLOWLEFT = 9 AC_FOLLOWBEHINDANDABOVE = 10 AC_FOLLOWCOCKPIT = 11 AC_FOLLOWFROMGROUND = 12 AC_JUMP = 14

ActivationParam – 保留,当前不能使用。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED TE_E_INFOTREE_ITEMNOTGROUP TE_E_NOLICENSE TE_E_INFOTREE_CANTUSEROOT C#:

IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int GroupID=objIInformationTree5.FindItem(\"Test Group\");

objIInformationTree5.SetActivationCode(GroupID ,ActionCode.AC_DELETE ,-1); VBScript : Sub

SetActivationCode()

Set

IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test Group\\YOYO\") IInformationTree.LockGroup GroupID,1

IInformationTree.SetActivationCode GroupID,14 End Sub

(19)GetActivationCode 方法:获得特定组的激活行为的的代号。 HRESULT GetActivationCode( [in]long GroupID,[out] VARIANT* actioncodeACode,[out] VARIANT* intActivationParam) 参 数:

GroupID –引用要激活设置的组的 GroupID。 通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查 找;使用信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到期 望的 GroupID 号。

ACode –确定如何飞向组对象的一个枚举,ActionCode 如下:

AC_FLYTO = 0 AC_CIRCLEPATTERN = 1 AC_OVALPATTERN = 2 AC_LINEPATTERN = 3 AC_ARCPATTERN = 4 AC_FOLLOWBEHIND = 5 AC_FOLLOWABOVE = 6 AC_FOLLOWBELOW = 7 AC_FOLLOWRIGHT = 8

使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 输 入 的 条 目 不 是 一 个 组 and therefore cannot set activation code。 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 本操作不能使用根节点 AC_FOLLOWLEFT

AC_FOLLOWBEHINDANDABOVE AC_FOLLOWCOCKPIT AC_FOLLOWFROMGROUND AC_JUMP

ActivationParam – 保留,当前不能使用。 返回值:

= 9 = 10 = 11 = 12 = 14

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文 件 必 须 装 载 到 TerraExplorer 中 TE_E_INFOTREE_ITEMNOTGROUP 输入的条目不是一个组,因此 不能获得激活码。 TE_E_NOLICENSE 你 正 使 用 的 是 TerraExplorer 版本,没有使 用此接口的许可 TE_E_INFOTREE_CANTUSEROOT 本操作不能使用根节点 C#:

object activationCode,activationParam;

IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int GroupID=objIInformationTree5.FindItem(\"Test Group\"); objIInformationTree5.GetActivationCode(GroupID, out activationCode, out activationParam);

CodetextBox.Text =

activationCode.ToString(); ParamtextBox.Text =

activationParam.ToString(); VBScript : Sub

GetActivationCode()

dim activationCode,activationCode1

Set IInformationTree=TE.Interface(\"IInformationTree5\") IInformationTree.GetActivationCode

GroupID,activationCode,activationCode1 XX.value=activationCode End Sub

(20)SetClientData 方法:SetClientData 方法发送一个 XML 字符串来描述组 的属性数据。在应用中这个信息是很有用的。 TerraExplorer 用这个属性去存 储装载有 GIS 图层的组的概要信息。 因此,当设置这个数据时不要重写这些信 息。

HRESULT SetClientData( [in] long GroupID, [in] BSTR ClientData) 参 数:

GroupID – 要设置的客户端的 GroupID 号。 通过以下的方法获得 GroupID: CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行 查找;使用信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到 期望的 GroupID 号。 ClientData – 一个 XML 字符串,参见 SetClientData 方法的描述。 返回值: 类型为 HRESULT 类型的成员函数返回值具体如下: 返回值 含义 S_OK E_FAIL TE_E_MPTNOTLOADED TE_E_INFOTREE_ITEMNOTGROUP TE_E_NOLICENSE TE_E_INFOTREE_CANTUSEROOT 操作成功 操作失败 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 输入的条目不是一个组,因此不能设 置 client data。 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 本操作不能使用根节点 C#:

IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5 int GroupID = objIInformationTree5.FindItem(\"Test Group\"); objIInformationTree5.SetClientData(GroupID, \"The group is very important\"); VBScript :

Sub SetClientData()

Set

IInformationTree=TE.interface(\"IInformationTree5\") GroupID=IInformationTree.FindItem(\"Test Group\") IInformationTree.SetClientDataEx

GroupID,\"mynamespace\world\" End Sub (21)GetClientData 方法:GetClientData 方法获得描述组属性数据的 XML 字 符串。在应用中这个信息是很有用的。 TerraExplorer 用这个属性去存储装载 有 GIS 图层的组的概要信息。

HRESULT GetClientData( [in] long GroupID , [out , retval] BSTR* ClientData) 参 数: GroupID – 要设置组的 GroupID 号。 通过以下的方法获得 GroupID: CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查找;使用 信息树的一些方法(例如:GetNextItem)遍历所有数据,直到找到期望的 GroupID 号。 ClientData –一个 XML 字符串,参见 GetClientData 方法的描述。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_INFOTREE_ITEMNOTGROUP 输 入 的 条 目 不 是 一 个 组 and therefore cannot get client data。 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 TE_E_INFOTREE_CANTUSEROOT C#:

本操作不能使用根节点

object

ClientData;

IInformationTree5 objIInformationTree5 = objTerraExplorer as IInformationTree5;

int GroupID = objIInformationTree5.FindItem(\"Test Group\"); ClientData = objIInformationTree5.GetClientData(GroupID); GetCDatatextBox.Text = ClientData.ToString(); VBScript : Sub

GetClientData()

Set

IInformationTree=TE.Interface(\"IInformationTree5\") IInformationTree.GetClientData GroupID,StrText XX.value=StrText End Sub

(22)GetObject 方法:GetObject 方法获得基于 ItemID 的一个接口对象。保 存需要使用 IInformation 下的 GetNextItem()、FindItem() 以及 IobjectManger 下的 GetObject()方法。

HRESULT GetObject( [in] long ItemID , [out , retval] ITerraExplorerObject2** pITerraExplorerObject2) 参 数: ItemID – 所需条目的 id 号。 pITerraExplorerObject2 – 指向对象的一个接口指针。这个指针一定不 能为空。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必 须装载到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版 本,没有使用此接口的许可 E_INVALIDARG 一个或多个参数传递到方法中产生 问题,使用 IErrorInfo 接口去提取 更多的错误信息 TE_E_INFOTREE_ITEMISGROUP ItemID 是组,因此对象不能被获得 TE_E_OBJMANAGER_OBJNOTFOUND 对象未找到或不存在 (23)SetParentEx 方法:移动子节点到一个不同的组,并且为这个节点返回新

的 ItemID。

HRESULT SetParentEx ([in, out] long ItemID,[in] long ParentGroupID) 参 数: ItemID – 要移动节点的子项编号。 ParentGroupID –要移动到父节点的 id 号,ParentGroupID 必须是一个 有效的 id 号。

返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必 须装载到 TerraExplorer 中 TE_E_INFOTREE_PARENTNOTGROUP 输入的 ParentGroupID 并不是一个 有效的分组 Id 号 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版 本,没有使用此接口的许可 E_INVALIDARG 一个或多个参数传递到方法中产生 问题,使用 IErrorInfo 接口去提取 更多的错误信息 (24)ReloadLayer 方法:对于一个装载 GIS 图层的组,本方法执行了一个重装 载操作。

HRESULT ReloadLayer( [in] long GroupID , [in , defaultvalue(0)] ReloadMethod Method, [in, defaultvalue(0)] double CenterX, [in, defaultvalue(0)] double CenterY,

[in, defaultvalue(0)] double Radius) 参 数: GroupID – 要被装载的组的 GroupID 号,通过以下的方法获得 GroupID: CreateGroup 方法的调用;IInformationTree:FindItem;使用信息树的一些方 法(例如:GetNextItem)遍历所有数据,直到找到期望的 GroupID 号。 Method – 确定要重装载方法的列举情况如下:

RELOAD_REFRESH = 0 装载同原始情况一样的图形区域。 RELOAD_AT_VIEW = 1 在当前的视图位置重新装载图层 RELOAD_ENTIRE = 2 重新装载图层的全部范围。 RELOAD_BY_AREA = 3

CenterX – 被装载层中心点的东-西坐标。仅当本方法参数被设置为 RELOAD_BY_AREA 的时候方可使用。 CenterY –被装载层中心点的南-北坐标。仅当本方法参数被设置为 RELOAD_BY_AREA 的时候方可使用。 Radius – 半径,以米表示。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_INFOTREE_ITEMNOTGROUP 输 入 的 条 目 不 是 一 个 组 and TE_E_NOLICENSE therefore cannot be reloaded。 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 (25)EditItem 方法:打开编辑属性栏去编辑条目。 HRESULT EditItem([in] long ItemID) 参 数: ItemID –要编辑条目的 id 号。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 E_INVALIDARG The ItemID is not a valid InformationTree ID C#: IInformationTree5 objIInformationTree5 = objTerraExplorer as

IInformationTree5; int ItemID= objIInformationTree5.FindItem(\"Test Group\\\\Test Building\"); objIInformationTree5.EditItem(ItemID); VBScript : Sub EditItem()

Set

IInformationTree=TE.interface(\"IInformationTree5\") ItemID=IInformationTree.FindItem(\"Test Building\") IInformationTree.EditItem ItemID End Sub

(26)EditItems 方法:打开编辑属性栏去编辑各子项。 HRESULT EditItems([in] VARIANT SafeArrayItems) 参 数: SafeArrayItems – 包含 ID 的一个数组,数组中的每一个 ID 可被 选择处理多种操作。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 E_INVALIDARG 可能是以下类型的一个: - 不正确的数组元素类型 - Element #X = 0

(27)LoadFlyLayer 方法:装载一个 Fly 文件到当前的项目中,所有来自 Fly 文件的对象包括位置、路线和超链接都被添加进来。

HRESULT LoadFlyLayer( [in] BSTR FlyFile, [in, defaultvalue(0)] long ParentGroupID) 参 数: FlyFile –完整的路径名或者装载 Fly 文件的 URL ParentGroupID –要放置加入的 Fly 文件的组的 ParentGroupID 号。如果 设置为 0,对象在根节点下直接创建。层对象被放置在一个有 Fly 文件名的组中。 通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查找;使用信息树的一些方法(例如:GetNextItem)遍历所 有数据,直到找到期望的 GroupID 号。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 C#: string newlayerURL = \"E:\\\\Skyline Pro Interface\\\\数据\\\\数据\\\\newflylayer.FLY\"; IInformationTree5 objIInformationTree5 = objTerraExplorer as IInformationTree5;

int parentGroupID=objIInformationTree5 .FindItem (\"Test Group\"); objIInformationTree5.LoadFlyLayer(newlayerURL, parentGroupID); VBScript :

Sub LoadFlyLayer()

Set IInformationTree=TE.Interface(\"IInformationTree5\")

IInformationTree.LoadFlyLayer(\"E:\\Skyline Pro Interface\\数据\\数据\\newflylayer.FLY\") End Sub

(28)SaveFlyLayer 方法:保存一个 Fly 文件到当前的项目中,所有来自 Fly 文件的对象包括位置、路线和超链接都被保存起来。

HRESULT SaveFlyLayer( [in] BSTR FlyFile, [in, defaultvalue(0)] long ParentGroupID) 参 数: FlyFile –保存的 fly 文件名称 ParentGroupID –要放置加入的 Fly 文件的组的 ParentGroupID 号。如果 设置为 0,对象在根节点下直接创建。层对象被放置在一个有 Fly 文件名的组中。 通过以下的方法获得 GroupID:CreateGroup 方法的调用;如果你知道组名,用 FindItem 方法进行查找;使用信息树的一些方法(例如:GetNextItem)遍历所 有数据,直到找到期望的 GroupID 号。

返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 TE_E_NOLICENSE 你正使用的是 TerraExplorer 版本, 没有使用此接口的许可 C#: string newlayerURL=\"E:\\\\Skyline Pro Interface\\\\数据\\\\数据\\\\newflylayer.FLY\"; IInformationTree5 objIInformationTree5 = objTerraExplorer as IInformationTree5;

int ParentGroupID=objIInformationTree5.FindItem(\"Test Group\");

objIInformationTree5.LoadFlyLayer(newlayerURL ,ParentGroupID); objIInformationTree5.SaveFlyLayer(\"new\" ,0); VBScript :

Sub SaveFlyLayer()

GroupID=IInformationTree.FindItem(\"Test Group\") IInformationTree.SaveFlyLayer \"new\End Sub

1.5 ITerrain4

描述 MPT 文件的相关信息,如当前正在使用的 mpt 文件名称、当前系统的坐 标系统参数、地形透明度控制、高程信息的获取等。 ITerrain 属性: MPTName, GroupKey, SystemKey, DatumKey, UnitKey, EPSG, Description ITerrain2 方法: GetGroundHeight ITerrain3 方法: GetGroundHeightEx ITerrain4 方法: GetExtent GetGroundHeight 方法:使用被给的精确的水平面,用此方法获取当前坐标距离地面的距

离高度。

HRESULT GetGroundHeight([in] double X,[in] double Y,[in] AccuracyLevel Level,[out,

retval] double* TerrainHeight) 参 数: X –以 MPT 为单位的兴趣点的东-西坐标。 Y –以 MPT 为单位的兴趣点的南-北坐标。 Level – 定义水平面,这个值如下: ACCURACY_BEST_FROM_ MPT = 2 这是最慢的方法,但是它能获取最准确的信息。

ACCURACY_BEST_FROM_ MEMORY = 1

这个标记试图去获得较好的信息(基于在内存中已经存在的信息),它比前一个 快一些,但不能保证获得较准确的数值。

ACCURACY_ NORMAL = 0 使用此标记,客户端获得最好的性能,但是返回的精度比较差。 TerrainHeight – 地形高度。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文 件 必 须 装 载 到 TerraExplorer 中 C#: IPlane5 objIPlane5 = objTerraExplorer as IPlane5; ITerrain3 objITerrain3 = objTerraExplorer as ITerrain3; try

{

double x = System.Convert.ToDouble(XtextBox.Text); double y = System.Convert.ToDouble(YtextBox.Text); GGHtextBox.Text = objITerrain3.GetGroundHeight(x, y,

AccuracyLevel.ACCURACY_BEST_FROM_MEMORY).ToString();

objIPlane5.FlyTo(x, y, 20000, 5000, 0, 0, \"Circle\"); }

catch(Exception ex)

{

MessageBox.Show(ex.Message+\"Please input X/Y\");

}

VBScript

Sub GetGroundHeight()

Set ITerrain=TE.Interface(\"ITerrain4\") GroundHeight=ITerrain.GetGroundHeight (111,39,0)

XX.value=GroundHeight

End Sub

(2)GetGroundHeightEx 方法:获取给定坐标点上的信息(基于水平面),仅能

在 ITerrain3 中使用。

HRESULT GetGroundHeightEx( [in] double X, [in] double Y, [in]

AccuracyLevel Level, [in] bool IncludeGroundObject, [out] VARIANT* bstrObjectID, [out] VARIANT* doubleTerrainHeight) 参 数: X –以 MPT 为单位的兴趣点的东-西坐标。 Y –以 MPT 为单位的兴趣点的南-北坐标。 Level – 定义水平面,这个值如下:

ACCURACY_NORMAL = 0

使用此标记,客户端获得最好的性能,但是返回的精度比较差。

ACCURACY_BEST_FROM_MEMORY = 1

这个标记试图去获得较好的信息(基于在内存中已经存在的信息),它比前一个 快一些,但不能保证获得较准确的数值。

ACCURACY_BEST_FROM_MPT = 2 这是最慢

的方法,但是它能获取最准确的信息。 IncludeGroundObject –一个布尔值,它主要用来确定结果中是否包含地 面对象。 bstrObjectID – 返回指定坐标对应的对象的 id 号。 doubleTerrainHeight – 被给坐标的地形高度。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 (3)GetExtent 方法:返回矩形坐标内地形数据的范围,仅能在 IIerrain4 中 使用。

HRESULT GetExtent([out] VARIANT* doubleLeft,[out] VARIANT* doubleTop, [out] VARIANT* doubleRight, [out] VARIANT* doubleBottom) 参 数: doubleLeft – 地形数据中左上角的东-西坐标。 doubleTop –地形数据中左上角的南-北坐标。 doubleRight –地形数据中右下角的东-西坐标。 doubleBottom –地形数据中右下角的南-北坐标。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 C#:

object left,right,top,buttom;

ITerrain4 objITerrain4 = objTerraExplorer as ITerrain4;

objITerrain4.GetExtent(out left,out top,out right,out buttom);

LefttextBox.Text = left.ToString(); RighttextBox.Text = right.ToString(); ToptextBox.Text = top.ToString(); ButtomtextBox.Text =

buttom.ToString(); VBScript : Sub GetExtent() Set

ITerrain=TE.interface(\"ITerrain4\") ITerrain.GetExtent

left,top,right,bottom Msgbox(left) Msgbox(right) Msgbox(top) Msgbox(bottom) End Sub 1.6 IContainer

可与 TerraExplorer Pro 内置容器进行交互,允许添加、移除和改变容器中 web 页的 URL,并可定义信息的弹出位置。在与外部程序交互中,可通过 HTMLPopup 方法嵌入外部网页。

IContainer

方法: SetURL, RemoveURL, BringToFront, SetMessageBarText, HTMLPopup

(1)SetURL方法:设置联接地址 (

[in] int nContainer [in] BSTR TabName [in] BSTR URL )

参 数

nContainer 设置联接内容的显示窗口 TabName 设置联接的名称 URL 设置联接的内容 (2)RemoveURL 方法:移除联接内容 (

[in] int nContainer, 移除联接所在的窗口 [in] BSTR TabName 移除联接的名称 )

(3)SetMessageBarText 方法:设置 MessageBar 里信息显示

([in] BSTR Message 显示信息的内容)

1.7 IRender5

允许客户端获取当前三维窗口的相关信息,如将特定点的屏幕坐标转成真实 的地理坐标、获取对象的标识码、设置或替换鼠标的指针类型、控制鼠标的输入

模式、获取当前窗口的范围。 IRender5 属性: 方法: Quality, HudMode GetRenderRect, ScreenToTerrain, GetMouseInfo, SetMouseInputMode, SetMouseCursor, ScreenToWorld, WorldToScreen,(1)GetRenderRect 方法:返回 3D 窗口中渲染的区域,以像素表示。 HRESULT GetRenderRect([out] VARIANT* intScreenX , [out] VARIANT* intScreenY,

[out] VARIANT* intWidth,[out] VARIANT* intHeight) 参 数: intScreenX – 屏幕左上角的 X 坐标,用像素表示。 intScreenY –屏幕左上角的 Y 坐标,用像素表示。 intWidth – 3D 窗口的宽度,用像素表示。 intHeight –3D 窗口的高度,用像素表示。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 C#: IRender5 objIrender5 = objTerraExplorer as IRender5; int ScreenX,ScreenY,Width,Height;

objIrender5 .GetRenderRect(out ScreenX ,out ScreenY ,out Width,out Height); ScreenXtextBox.Text = ScreenX.ToString (); ScreenYtextBox.Text = ScreenY.ToString ();

WidthtextBox.Text = Width.ToString(); HeighttextBox.Text = Height.ToString ();

VBScript::

Sub GetRenderRect()

Set IRender=TE.Interface(\"IRender5\") IRender.GetRenderRect

ScreenX,ScreenY,Width,Height ScrX.value=ScreenX

ScrY.value=ScreenY

Wid.value=Width

Hei.value=Height End Sub (2)ScreenToTerrain 方法:将屏幕上的像素与地形坐标上对应的部分进行匹配。 HRESULT ScreenToTerrain([in] int X , [in] int Y , [out] VARIANT* doubleTerrainX , [out] VARIANT* doubleTerrainY , [out] VARIANT* doubleTerrainElevation) 参 数: X – X 坐标,用像素表示。 Y – Y 坐标,用像素表示。 注意: 这个像素点坐标是相对于 3D 窗口的左上角坐标(0,0)而言的。 doubleTerrainX – 地形点上的 x 坐标。 doubleTerrainY –地形点上的 y 坐标。 doubleTerrainElevation – 被给像素点的地形高度。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 C#: IRender5 objIRender5 = objTerraExplorer as IRender5; object TerrainX,TerrainY,TerrainElevation;

objIRender5.ScreenToTerrain(111, 39, out TerrainX, out TerrainY, out TerrainElevation); ScreenXtextBox.Text = TerrainX.ToString (); ScreenYtextBox.Text = TerrainY.ToString (); ScreenZtextBox.Text =

TerrainElevation.ToString (); VBScript::

Sub ScreenToTerrain()

Set

IRender=TE.Interface(\"IRender5\") IRender.ScreenToTerrain 111,39,X,Y,H TX.value=X TY.value=

Y TH.value=

H

End Sub

(3)GetMouseInfo 方法:本方法返回鼠标位置和相关信息。

HRESULT GetMouseInfo([out] VARIANT* longFlags , [out] VARIANT* longScreenX,

[out] VARIANT* longScreenY) 参 数:

longFlags – 指示各种组合键是否被按下,其参数可以是下列值的组合:

MK_ LBUTTON MK_ RBUTTON MK_ SHIFT MK_CONTROL MK_ MBUTTON = 1 = 2 = 4 = 8 =16

longScreenX –鼠标的 鼠标的 x 坐标。坐标以屏幕坐标的方式给出,3D 窗口的左上角是原点。

longScreenY – 鼠标的 y 坐标。坐标以屏幕坐标的方式给出,3D 窗口的 左上角是原点。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 C#: IRender5 objIrender5 = objTerraExplorer as IRender5; object flags,screenX,screenY;

objIrender5.GetMouseInfo(out flags, out screenX, out screenY); FlagstextBox.Text = flags.ToString (); SXtextBox.Text = screenX.ToString (); SYtextBox.Text = screenY.ToString ();

VBScript:

Sub GetMouseInfo()

Set IRender=TE.interface(\"IRender5\") IRender.GetMouseInfo

Flags,ScreenX,ScreenY Fla.value=Flags ScrX.value=ScreenX

ScrY.value=ScreenY End Sub

(4)SetMouseInputMode 方法:本方法定义鼠标的输入模式,不同的输入模式允 许你控制不同的鼠标行为。

HRESULT SetMouseInputMode([in] MouseInputMode InputMode) 参 数: InputMode – 定义鼠标输入模式。有以下几种输入模式:

MI_FREE_FLIGHT = 0 默认的输入模式,通过点击 3D 窗口可移动相机,

提供右击菜单功能。

MI_COM_CLIENT = 1

在这个模式下没有点击或移动的行为,可以使用鼠标事件 ITerraExplorerEvents4 来控制这个行为。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为

返回值 S_OK E_FAIL TE_E_MPTNOTLOADED 含义 操作成功 操作失败 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中

(5)SetMouseCursor 方法:本方法用来定义设置鼠标光标。为了改变光标你必 须首先设置光标输入模式为 1(MI_COM_CLIENT),参见 IRender4 下 的 SetMouseInputMode()方法。

HRESULT SetMouseCursor([in] BSTR CursorFileName) 参 数:

CursorFileName – 光标文件名(含路径)或有 URL 指向,这个文件应该 是一个标准的 windows 光标文件(例如:*.cur, *.ani) 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须 装载到 TerraExplorer 中 TE_E_RENDER_WRONGINPUTMODE 使用本方法鼠标输入模式必须是 MI_COM_CLIENT (6)ScreenToWorld 方法:本方法返回屏幕上所指像素点的地形坐标,如果选 择的像素是一个对象的一部分,而不是地形,对象的 ObjectID 被返回。本方法 可以在多种情况下使用,而不像 IRender4 接口下的 ScreenToTerrain()方法。 HRESULT ScreenToWorld( [in] long ScreenX , [in] long ScreenY, [in, out] VARIANT* longObjectType,

[out] VARIANT* doubleWorldX, [out] VARIANT* doubleWorldHeight, [out] VARIANT* doubleWorldY, [out] VARIANT* bstrObjectID) 参 数: ScreenX – 正在查找的相应地形点的屏幕 X 坐标。坐标以屏幕坐标的方 式给出,3D 窗口的左上角是原点。 ScreenY –正在查找的相应地形点的屏幕 Y 坐标。坐标以屏幕坐标的方式 给出,3D 窗口的左上角是原点。 longObjectType – 对象类型,可使用如下组合:

OBJ_TYPE_TERRAIN = 0 OBJ_TYPE_3DOBJECT = 1 OBJ_TYPE_LABEL = 2 OBJ_TYPE_PRIMITIVE = 4 OBJ_TYPE_ANIM = 8 OBJ_TYPE_BUILDING = 16 OBJ_TYPE_SKY = 32

doubleWorldX –地形点的 X 坐标。 doubleWorldHeight –地形点高程。 doubleWorldY –地形点的 Y 坐标。 bstrObjectID – 返回所选对象的 id 号。 返回值: 类型为 HRESULT 类型的成员函数返回值具体如下:

返回值 S_OK E_FAIL TE_E_MPTNOTLOADED 含义 操作成功 操作失败 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 C#: object worldHeight,worldX,worldY,objectID,objectType; objectType = 63;

IRender5 objIRender5 = objTerraExplorer as IRender5;

objIRender5.ScreenToWorld(108, 39, ref objectType, out worldX, out worldHeight, out worldY, out objectID); TtextBox.Text =

objectType.ToString();

XtextBox.Text = worldX.ToString(); HtextBox.Text =

worldHeight.ToString();

YtextBox.Text = worldY.ToString(); IDtextBox.Text = objectID.ToString(); VBScript:

Sub ScreenToWorld()

Set IRender=TE.Interface(\"IRender4\") IRender.ScreenToWorld

245,250,objType,WorldX,WorldHeight,WorldY,objID WX.value=WorldX WY.value=WorldY WH.value=WorldHeight OD.value=objID OT.value=objType End Sub

(7)WorldToScreen 方法:本方法返回一个特定地形坐标是否在 3D 窗口中的一 个指示,如果是,给出特定点的屏幕坐标,仅能在 IRender4 中使用。

HRESULT WorldToScreen( [in] double WorldX, [in] double WorldHeight, [in] double WorldY, [out] VARIANT* doubleScreenX, [out] VARIANT* doubleScreenY, [in] int Mode, [out] VARIANT* boolInScreen, [out,retval] long* pVal) 参 数: WorldX – 正在搜索的相应屏幕坐标对应的地形点 X 坐标。 WorldHeight –正在搜索的相应屏幕坐标对应的地形高度值。 WorldY –正在搜索的相应屏幕坐标对应的地形点 Y 坐标。 doubleScreenX – 对应于给出的地形点的坐标相映射的屏幕 X 坐标,坐 标以屏幕坐标的方式给出,3D 窗口的左上角是原点。 doubleScreenY –对应于给出的地形点的坐标相映射的屏幕 Y 坐标。坐标

以屏幕坐标的方式给出,3D 窗口的左上角是原点。 Mode 参数如下:

0 – 可视点检验。

1 –可视点检验(考虑其它对象和所有的地形要素)。

boolInScreen – 给出的坐标系如果落在 3D 窗口中,则返回 True。 pVal – 一旦本方法调用被返回,pVAl 包含的布尔值用来说明是否被给 的坐标在 3D 窗口中可视线。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 E_FAIL 操作失败 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 C#: object screenX,screenY,inscreen,pVal;

IRender5 objIrender5 = objTerraExplorer as IRender5;

objIrender5 .WorldToScreen(39,2000,111,out screenX,out screenY ,0,out inscreen ); XtextBox.Text = screenX.ToString(); YtextBox.Text = screenY.ToString(); IStextBox.Text = inscreen.ToString(); VBScript:

Sub WorldToScreen()

Set IRender=TE.Interface(\"IRender4\")

IRender.WorldToScreen 111,20,39,ScreenX,ScreenY,1,BoolinScreen SX.value=ScreenX SY.value=ScreenY BIS.value=BoolinScreen End Sub

(8)SetHUDLayer 方法:本方法允许一个 HUD 层的绘画定制,以流的方式进行 保存,将图绘制在 3D 窗口中。 注意: 为了不断地更新 HUD,在每一个 OnDrawHud 事件中调用本方法。如果 HUD 层永久存在,只需要调用一次。仅能在 IRender5 中使用。 HRESULT SetHUDLayer( [in] IUnknown* pIStream, [in , optional , defaultvalue(0)] long Index , [in , optional , defaultvalue(0)] long MapMode) 参 数: pIStream –以流的方式进行保存。 Index – 保留,当前不能使用。 应设置为 0。 MapMode – 保留,当前不能使用。 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中 (9)GetMouseInputMode 方法:本方法获得鼠标的输入模式(仅在 IRender5

TE_E_MPTNOTLOADED 中使用)

HRESULT GetMouseInputMode([out, retval] MouseInputMode* InputMode) 参 数:

InputMode – 确定新的输入模式。 参数如下: MI_FREE_FLIGHT = 0 在 3D Window 窗口中自由飞行 MI_COM_CLIENT = 1 通过 COM 用户选择定制化的输入模式 MI_CONTROLLED_FLIGHT = 2 相机被操作者控制(例如:Fly to,Circle Pattern)。 MI_EDIT = 3 TerraExplorer 在编辑输入模式 MI_MEASURAMENT = 4 TerraExplorer 在测量距离输入模式下 返回值:

HRESULT 类型的成员函数返回值具体如下: 类型为 返回值 含义 S_OK 操作成功 TE_E_MPTNOTLOADED 使用此方法进行操作,MPT 文件必须装 载到 TerraExplorer 中

1.8 ISnapShot2

可将当前三维窗口以 jpg、bmp 图片方式输出,也可对当前图进行打印。通 过此接口,可以设置图片的宽度,高度,可以对当前图片进行保存,也可以设置 图片的品质。

ISnapShot2 接口可以获得当前 3D 窗口的快照,可保存成 bmp 和 tif 格式的图片。在产生新 快照前,可自定义相关参数。 SnapshotWidth 属性 语法:

int SnapshotWidth { set; get; } 说明:

快照的宽度(注意:宽度值应当在 129 像素和 1599 像素之间,如果超出范围则按照当前渲 染窗口的尺寸) SnapshotHeight 属性 语法:

int SnapshotHeight { set; get; } 说明:

快照的宽度(注意:宽度值应当在 130 像素和 1200 像素之间,如果超出范围则按照当前渲 染窗口的尺寸) Format 属性 语法:

string Format { set; get; } 说明:

定义影像文件的格式和压缩方式,用字符串表示。使用“BMP”表示 windows 位图文件, “JPeg75”表示对影像压缩比为 75%。 RenderQuality 属性 语法:

int RenderQuality { set; get; } 说明: 定义如何获得每一个快照需求的地形数据库的渲染质量,默认值为 0。 SaveRenderToFile 语法

string SaveRenderToFile() 说明 参数: FileName – 保存快照的完整文件名(bmp 格式) SetSnapShotParams 语法

void SetSnapShotParams(int Width, int Height, int ResizeBack) 说明 保留,当前不可使用。 GetImage 语法

object GetImage() 说明 作为 IStream 对象,返回影像。 参数: pImage –指向 IStream 对象的 IUnknown 接口指针

1.9 IStartPosition

IStartPosition 接口主要揭示了 TerraExplorer 的坐标起始位置。StartX 语法

double StartX { get; } [out] double –相机的起始 X 坐标。 StartZ

[out] double –相机的起始 Z 坐标。 C#:

private void btnGetXZCoord_Click(object sender, EventArgs e)

{

TerraExplorer CoTE = new

TerraExplorerClass(); IStartPosition IStartPosition = (IStartPosition)CoTE; MessageBox.Show(\"StartX:\"

+

IStartPosition.StartX.ToString()

\"StartZ:\"

+

+

IStartPosition.StartZ.ToString());

1.10

}

_ITerraExplorerEvents5 事件

本接口定义了操作的各种事件,如鼠标左键、鼠标右键、文件关闭等事件, 可在这些事件中定义相关操作。

ITerraExplorerEvents5 主要功能是为 ITerraExplorer 提供事件信息处理 功 能 . 这 个 开 发 接 口 代 替 了 以 前 的 _ITerraExplorerEvents, _ITerraExplorerEvents2, _ITerraExplorerEvents3,_ITerraExplorerEvents4 接口, 并扩展了通用事件,双击事件及 HUD 事件。

事件函数支持 TerraExplorer Viewer 什么是 HUD?

HUD 是 Head UP Display 的英文缩写,又译成抬头显示器(Head Up Display), 以下简称 HUD,是目前普遍运用在航空器上的飞行辅助仪器。抬头的意思是指飞 行员不需要低头就能够看到他需要的重要资讯。抬头显示器最早出现在军用飞机 上,降低飞行员需要低头查看仪表的频率,避免注意力中断以及丧失对状态的控 制。在 skyline 软件中 HUD 指在应用软件时基于地形视窗监视飞行状态及视角图 形及文字信息辅助工具。 _ITerraExplorerEvents5 方法: OnLoadFinished, OnFileClosing, OnFrame, OnTerraExplorerMessage, OnObjectAction, OnFileSave, OnRenderQualityChanged, OnInputModeChanged, OnLButtonDown, OnLButtonUp, OnMButtonDown, OnMButtonUp, OnRButtonDown, OnRButtonUp, OnMouseWheel, OnInfoTreeAction, OnTerraExplorer, OnDrawHUD, OnLButtonDblClk, OnRButtonDblClk, OnMButtonDblClk OnLoadFinished 事件

语法

void OnLoadFinished() 说明

在 TerraExplorer 在加载完成 Fly 文件时被调用 例子

OnLoadFinished 事件使用 \" CLASSID=\"CLSID:3a4f9191-65a8-11d5-85c1-c1\">

ID=\"TE

OnFileClosing 事件

语法

void OnFileClosing() 说明

在 fly 文件被关闭前触发该事件。 例子

OnLoadFinished 事件使用 \" CLASSID=\"CLSID:3a4f9191-65a8-11d5-85c1-c1\"> OnFrame 事件 语法

ID=\"TE

void OnFrame() 参数 可选 类型 描述

必nGeometryLong 返回添加的空间对象的 ID 号 选 ID 说明执行每帧活动时触发该事件。 备注

建议不要从客户端处理 OnFrame 事件,因为会在 TerraExplorer 中产生大量的执行错误。 例子 (c#)

private void OnFrame()

{

object MouseInfo; object ScreenX, ScreenY; object ObjType, WX, WH, WY, ObjectID; ObjType = 0;

IRender.GetMouseInfo(out MouseInfo,out ScreenX,out ScreenY); IRender.ScreenToWorld(Convert.ToInt32(ScreenX), Convert.ToInt32(ScreenY), ref ObjType, out

WX, out WH, out WY, out ObjectID);

this.toolStripStatusLabel1.Text = \"MouseInfo: X=\" + WX.ToString() + \"; } Y=\" + WY.ToString();

VBScript

OnTerraExplorerMessage

事件

void OnTerraExplorerMessage(string SourceObjectID, ref pbHandled) 点击对象时触发该对象的信息显示事件 HRESULT OnTerraExplorerMessage( [in] BSTR

TEMessageID, [in] BSTR SourceObjectID,

TEMessageID, object string[in, out] VARIANTARG *pbHandled) 参数说明:

TEMessageID——这个值被解释基于 SourceObjectID 下面的返回值。

SourceObjectID——这个值取决于信息的类型和信息的发出者。下面是每种信息可能的返回 值:

(1)ITerraExplorerObject5 类的对象发出的信息:

拥有信息对象的对象的 ID 将被触发。在这种情况下,包含信息对象的的 ID 的

TEMessageID 将被触发。

(2)来自 IContainer2::SetMessageBarText()或是 TerraExplorer 的文本信息: \"MessageBarText\":在这种情况下,TEMessageID 包含信息文本。 (3)被 non-ITerraExplorerObject5 类发出的信息(例如:IContainer2::SetURL()):

\"ContainerMessage\".在这种情况下,TEMessage 包含一个临时信息都象的

ID,而且 只能在事件的范围内被访问。

(4)加载 FLY 文件时发出的信息:

\"LoadFlyContainer\".在这种情况下,TEMessageID 包含一个由允许的数

值组成的字 符串,用来定义 ITerraExplorerMessage5::Client,跟随在冒号后面(“:”), 接着是用于显示的 URL。例如:http://www.skylinesoft.com”, 表示打开下面的链接。 pbHandled——如果把这个值设置为 TRUE 则是在告诉

TerraExplorer:客户端将自己处理这 些信息而不希望 TerraExplorer 去显示这些信息。当客户端设置把这个值设置位 FALSE, TerraExplorer 正常地处理这些信息。

示例程序: C#:

using System; using

System.Collections.Generic; using

System.ComponentModel; using System.Data;

using System.Drawing; using System.Text;

using System.Windows.Forms; using TerraExplorerX; namespace SkysymbolCodeCS {

public partial class Form1 : Form {

//*********定义 te 相关常

用变量 private

TerraExplorer CoClassTE; private ITerraExplorer5 ITerraExplorer;

private IInformationTree5 IInformationTree; private IRender5 IRender; private IMenu IMenu; private IContainer2 IContainer;

private IObjectManager5 IObjectManager;

private ITerraExplorerObject5 TEObject; public Form1() {

InitializeComponent(); CoClassTE = new

TerraExplorerClass(); ITerraExplorer = (ITerraExplorer5)CoClassTE; IInformationTree =

(IInformationTree5)CoClassTE; IRender = (IRender5)CoClassTE; IMenu = (IMenu)CoClassTE; IContainer =

(IContainer2)CoClassTE; IObjectManager =

(IObjectManager5)CoClassTE;

//设定 TE 的事件委托

this.CoClassTE.OnFrame += new

_ITerraExplorerEvents5_OnFrameEventHandler (OnFrame); this.CoClassTE.OnTerraExplorerMessage

+=

new

_ITerraExplorerEvents5_OnTerraExplorerMessageEventHandler(CoClassTE_OnTerraExplorerMessage);

}

void CoClassTE_OnTerraExplorerMessage(string TEMessageID, string SourceObjectID, ref object pbHandled)

{

TEObject = IObjectManager.GetObject(TEMessageID); //MsgType = TEObject.Type if (TEObject.ID != \"0\") {

}

} else { }

MessageBox.true; Show(\"Messa ge Text: \" +

TEObject.ID);

//bHandled = MessageBox.Show(\"你选择的对象的信息为空!\");

private void Form1_Load(object sender, EventArgs e)

{

IMenu.Invoke(57601);

}

private void OnFrame()

{

object MouseInfo;

object ScreenX, ScreenY;

object ObjType, WX, WH, WY, ObjectID;

ObjType = 0;

IRender.GetMouseInfo(out MouseInfo,out ScreenX,out ScreenY); IRender.ScreenToWorld(Convert.ToInt32(ScreenX), Convert.ToInt32(ScreenY), ref ObjType, out

WX, out WH, out WY, out ObjectID);

this.toolStripStatusLabel1.Text = \"MouseInfo: X=\" + WX.ToString() + \"; Y=\" + WY.ToString();

} }

}

VBScript:

OnObjectAction 事件

语法

TerraExplorer.OnObjectAction(String ObjectID, int Action)

参数 ObjectID Action 类型 描述 ID 号,不同于 ItemID String 返回对象的 Int 返回对象的状态。 说明 在三维地图窗口获得对象 ID 和获得运行状态时,可以使用这个事件编写程序。

Action 参数的值列如

下:

o o o o o o o o AC_FLYTO = 0

AC_CIRCLEPATTERN = 1 AC_OVALPATTERN = 2 AC_LINEPATTERN = 3 AC_ARCPATTERN = 4 AC_FOLLOWBEHIND = 5 AC_FOLLOWABOVE = 6 AC_FOLLOWBELOW = 7 o AC_FOLLOWRIGHT o AC_FOLLOWLEFT = 8 = 9

o AC_FOLLOWBEHINDANDABOVE = 10 o AC_FOLLOWCOCKPIT = 11 o AC_FOLLOWFROMGROUND = 12 o AC_JUMP = 14 备注

该对象隶属于 TerraExplorer OnFileSave 事件

语法

TerraExplorer. TE_OnFileSave () 说明

用户在保存 fly 时更新相关信息的数据库可用些事件 备注 该对象隶属于 TerraExplorer OnRenderQualityChanged 事件

语法

TerraExplorer.OnRenderQualityChanged(int Quality)

参数 Quality 类型 int 描述 用户浏览时地形效果质量值. 这个参数是 0 到 100 之间以 10 递增的数据 说明 实时地反馈用户浏览更新时地形效果质量值,一般用于 loading 功能 备注 该对象隶属于 TerraExplorer OnInputModeChanged 事件

语法

TerraExplorer.OnInputModeChanged(TerraExplorerX.MouseInputMode NewModeAs)

参数 NewModeAs 类型 描述 枚举型 鼠标输入模式 说明 当 TerraExplorer 鼠标输入模式被改变时调用这个方法(如由自由飞行方式到测量方式) 鼠标输入模式状态如下: MI_FREE_FLIGHT = 0 在 3D 视窗中自由飞行方式 MI_COM_CLIENT = 1 通过一个 COM 自定义输入方式 MI_CONTROLLED_FLIGHT = 2 通过一种行为控制相机(如 Fly to, Circle Pattern). MI_EDIT = 3 TerraExplorer 正处于编辑输入方式 MI_MEASURAMENT = 4 TerraExplorer 正处于测量输入方式. 备注

该对象隶属于 TerraExplorer

OnLButtonDown 事件

语法

TerraExplorer.OnLButtonDown(int Flags, int X, int Y, ref object pbHandled)

参数 Flags 类型 Int 描述 与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键 MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 ConTrol 键 MK _ MBUTTON =16 滚轮键 鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。 鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 Y 坐标 X Y pbHandled Int Int Objec当设为 TURE TerraExplorer 可实现鼠标事件调 用,如不希望鼠标响应事件可将值t 设为 FALSE 说明 当鼠标左键被按下时调用此事件函数。 备注 该对象隶属于 TerraExplorer 例子

以下代码示 范如何在 OnLButtonDown 事件中, 获得鼠标点 击位置的坐 标值,其 中 中 TE 是 TerraExplorer对象的实例。 (C#)

private void TE_OnLButtonDown(int Flags, int X, int Y, ref object pbHandled)

{

TerraExplorerX.IRender5 objIRender = TE as TerraExplorerX.IRender5; object objType,DX,DY,DH,OID; objType = 63;

objIRender.ScreenToWorld(X, Y, ref objType, out DX, out DH,

out DY, out OID); MessageBox.Show(\"X 坐标值:\" + DX.ToString() + \"\\n\" +

\"Y 坐标值:\" + DY.ToString() + \"\\n\" + \"高度值为:\" + DH.ToString() + \"\\n\");

} (VBScript) Language=\"VBSCRIPT\"> Dim IRender4

sub Init()

Set IRender4 = TE.interface(\"IRender4\")

end sub

Sub TE_OnLButtonDown (Flags, X, Y,bHandled) ObjType = 63 '获得所有对象类型

IRender4.ScreenToWorld X , Y , ObjType , WorldX,WorldHeight,WorldY, ObjectID select case ObjType case \"0\"

MsgBox \"场景坐标: \" + Chr(13)+Chr(10) + cstr(WorldX) + \"/\" + cstr(WorldY) case \"32\"

MsgBox \"你点击了天空\" case else

MsgBox \"对象 ID: \" + ObjectID end select bHandled = true

end sub

OnLButtonUp 事件

语法

TerraExplorer.OnLButtonUp(int Flags, int X, int Y, ref object pbHandled)

参数 Flags

类型 Int

描述

与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键 MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 ConTrol 键 MK _ MBUTTON =16 滚轮键

鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。

X

Int

Y

pbHandled

Int

鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 Y 坐标

object 当设为 TURE TerraExplorer 可实现鼠标事件调 用,如不希望鼠标响应事件可将值设为 FALSE

说明

当鼠标左键被抬起时调用此事件函数。 备注 该对象隶属于 TerraExplorer

参考

TerraExplorer.OnLButtonDown事件 OnMButtonDown 事件

语法

TerraExplorer.OnMButtonDown(int Flags, int X, int Y, ref object pbHandled)

参数 Flags 类型 Int 描述 与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键 MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 Control 键 MK _ 鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。 鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 Y 坐标 X Y pbHandled Int Int 说明 当鼠标中键按下时调用此事件函数。 备注 该对象隶属于 TerraExplorer 参考

调用参考 TerraExplorer.OnLButtonDown事件 OnMButtonUp 事件 语法

TerraExplorer.OnMButtonUp(int Flags, int X, int Y, ref object pbHandled)

参数 Flags 类型 Int 描述 与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键 MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 Control 键 MK _ 鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。 鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 object 当设为 TURE TerraExplorer 可实现鼠标事件调 用,如不希望鼠标响应事件可将值设为 FALSE X Y Int Int

pbHandled 坐标的 Y 坐标 object 当设为 TURE TerraExplorer 可实现鼠标事件调 用,如不希望鼠标响应事件可将值设为 FALSE 说明 当鼠标中键抬起时调用此事件函数。 备注 该对象隶属于 TerraExplorer 参考

调用参考 TerraExplorer.OnLButtonDown事件 OnRButtonDown 事件 语法

TerraExplorer. OnRButtonDown(int Flags, int X, int Y, ref object pbHandled)

参数 Flags 类型 Int 描述 与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键 MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 Control 键 MK _ 鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。 鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 Y 坐标 X Y Int Int

pbHandled Objec当设为 TURE TerraExplorer 可实现鼠标事件调 用,如不希望鼠标响应事件可将值t 设为 FALSE 说明 当鼠标右键按下时触发此事件函数。 备注 该对象隶属于 TerraExplorer 参考

调用参考 TerraExplorer.OnLButtonDown事件

OnRButtonUp 事件 语法

TerraExplorer.OnRButtonUp (int Flags, int X, int Y, ref object pbHandled)

参数 Flags 类型 Int 描述 与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键

X Y pbHandled Int Int MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 Control 键 MK _ 鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。 鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 Y 坐标

说明 当鼠标右键抬起时调用此事件函数。 备注 该对象隶属于 TerraExplorer 参考

调用参考 TerraExplorer.OnLButtonDown事件

object 当设为 TURE TerraExplorer 可实现鼠标事件调 用,如不希望鼠标响应事件可将值设为 FALSE OnMouseWheel 事

件 语法

TerraExplorer.OnMouseWheel(int Flags, int X, int Y, ref object pbHandled)

参数 Flags 类型 Int 描述 与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键 MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 Control 键 MK _ 取得滚动的距离值.这个值是以正负为表达的各 120.当值小于零时,需要向后滚(此时离用户近) 当大于零时,需要前滚(此时离用鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。 鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 Y 坐标 zDelta short X Y pbHandled 说明 Int Int object 当设为 TURE TerraExplorer 可实现鼠标事件调 用,如不希望鼠标响应事件可将值设为 FALSE

当鼠标滚轮滚动时调用此事件函数。 备注 该对象隶属于 TerraExplorer

OnInfoTreeAction 事件 语法

TerraExplorer.OnInfoTreeAction(long ItemID, int Action, long ActionParam)

参数 ItemID Action 类型 描述 ID Long 执行对象在信息树上的 Int 当前对该对象的操作 AC_SHOW = 19 AC_SELCHANGED = 21 ActionParam Long 当 Action 返回的是 AC_SHOW 时,这个值才会 用到, 0 – 该对象被设置成隐藏 1 – 该对象被设置成显示 说明 当用户操作信息树时触发这个事件。通过这个事件可得到信息树上相关对象显示及隐藏的状 态 (如显示和隐藏时) 备注

该对象隶属于 TerraExplorer 例子

以下代码示 范如何在 OnLButtonDown 事件中, 获得鼠标点 击位置的坐 标值,其 中 中 TE 是 TerraExplorer对象的实例。 (C#)

private void TE_OnInfoTreeAction(int ItemID, int Action, int ActionParam) {

TerraExplorerX.IInformationTree5 objIInfo = TE as

TerraExplorerX.IInformationTree5;

string strobjname = \"\";

strobjname = objIInfo.GetItemName(ItemID); string strAction = \"\"; if (Action == 19) {//控制是否显示

if (ActionParam == 0) {//不显示

MessageBox.Show(\"对象\" + strobjname + \"隐藏\"); }

else {//显示

MessageBox.Show(\"对象\" + strobjname + \"显示\");

}

}

else if (Action == 21) {//选中对象

MessageBox.Show(\"对象\" + strobjname + \"选中\"); }

}

OnTerraExplorer 事件 保留接口. 没有使用 OnDrawHUD 事件 语法

TerraExplorer. OnDrawHUD() 说明

这个事件通过使用 IRender5::SetHUDLayer()这个方法更新HUD layer时触发。 备注

HUD 是 Head UP Display 的英文缩写,又译成抬头显示器(Head Up Display),以下简称

HUD,是目前普遍运用在航空器上的飞行辅助仪器。抬头的意思是指飞行员不需要低头就能够 看到他需要的重要资讯。抬头显示器最早出现在军用飞机上,降低飞行员需要低头查看仪表的频 率,避免注意力中断以及丧失对状态的控制。在 skyline 软件中 HUD 指在应用软件时基于地形 视窗监视飞行状态及视角图形及文字信息辅助工具。

OnLButtonDblClk 事件 语法

TerraExplorer.OnLButtonDblClk(int Flags, int X, int Y, ref object pbHandled)

参数 Flags 类型 Int 描述 与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键 MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 ConTrol 键 MK _ MBUTTON =16 滚轮键 鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。 鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 Y 坐标 X Y pbHandled Int Int object 当设为 TURE TerraExplorer 可实现鼠标事件调 用,如不希望鼠标响应事件可将值设为 FALSE 说明 当鼠标左键被双击时调用此事件函数。 备注

该对象隶属于 TerraExplorer 例子

以下代码示 范如何在 OnLButtonDown 事件中, 获得鼠标点 击位置的坐 标值,其 中 中 TE 是 TerraExplorer对象的实例。 (C#)

private void TE_OnLButtonDblClk(int Flags, int X, int Y, ref object pbHandled)

{

TerraExplorerX.IRender5 objIRender = TE as TerraExplorerX.IRender5; object objType,DX,DY,DH,OID; objType = 63;

objIRender.ScreenToWorld(X, Y, ref objType, out DX, out DH,

out DY, out OID); MessageBox.Show(\"你执行了双击操作,X 坐标值:\" + DX.ToString() + \"\\n\" + \"Y 坐标值:\" + DY.ToString() + \"\\n\" + \"高度值为:\" + DH.ToString() + \"\\n\");

} (VBScript) Language=\"VBSCRIPT\"> Dim IRender4

sub Init()

Set IRender4 = TE.interface(\"IRender4\") end sub

Sub TE_OnLButtonDblClk (Flags, X, Y,bHandled) ObjType = 63 '获得所有对象类型

IRender4.ScreenToWorld X , Y , ObjType , WorldX,WorldHeight,WorldY, ObjectID select case ObjType case \"0\"

MsgBox \"场景坐标: \" + Chr(13)+Chr(10) + cstr(WorldX) + \"/\" + cstr(WorldY) case \"32\"

MsgBox \"你点击了天空\" case else

MsgBox \"对象 ID: \" + ObjectID end select bHandled = true

end sub

OnRButtonDblClk 事件

语法

TerraExplorer. OnRButtonDblClk(int Flags, int X, int Y, ref object pbHandled)

参数 Flags 类型 Int 描述 与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键 MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 Control 键 MK _ MBUTTON =16 滚轮键 鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。 鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 Y 坐标 当设为 TURE TerraExplorer 可实现鼠标事件调 用,如不希望鼠标响应事件可将值设为 FALSE X Y Int Int pbHandled Object

说明 当鼠标右键双击时触发此事件函数。 备注 该对象隶属于 TerraExplorer 参考

调用参考 TerraExplorer.OnLButtonDblClk事件

OnMButtonDblClk 事件 语法

TerraExplorer. OnMButtonDblClk(int Flags, int X, int Y, ref object pbHandled)

参数 Flags 类型 Int 描述 与其它键相配合的标识 MK_ LBUTTON = 1 鼠标左键 MK_ RBUTTON = 2 鼠标右键 MK_ SHIFT = 4 SHIFT 键 MK_CONTROL = 8 Control 键 MK _ MBUTTON =16 滚轮键 鼠标 X 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 X 坐标。 鼠标 Y 坐标. 这个坐标是屏幕坐标,指的是左上方 坐标的 Y 坐标 X Y Int Int pbHandled Objec当设为 TURE TerraExplorer 可实现鼠标事件调 t

用,如不希望鼠标响应事件可将值设为 FALSE

说明

当鼠标中键双击时触发此事件函数。 备注

该对象隶属于 TerraExplorer 参考

调用参考 TerraExplorer.OnLButtonDblClk事件

1.11 ICoordSys3

提供了当前坐标系统的相关特征,允许用户自定义的坐标系统,然后 TerrainExplorer 会将此自定义的坐标系统转换到当前的三维场景中。此外,也 可重投影当前场景、获取任意两点间的距离等。 1.12

IMenu 接口

本接口提供了标准 TerraExplorer 菜单命令的调用,通过使用 3Dwindow 和 信息树控件可以自己设计 GUI 图形用户界面,可以让你用户搭建一个基础的三维 平台,可以很大程度上节省时间。只需实例化此接口后传入对应功能的整型参数, 就可以调用系统已封装好的功能。

说明

该接口提供接近标准 TerraExplorer 的菜单命令。你可以通过使用三维窗口控件和信息树来 重新设计自己的用户界面。例如,你可以允许使用者,通过直接调用 TerraExplorer 的菜单 命令来打开一个 FLY 文件(文件->打开)。从而节省创建一个标准的“浏览 FLY 文件”窗口 的时间。 Invoke 方法 说明

该方法可以激活 TerraExplorer 的菜单命令。 备注

下面的清单列出了所有的菜单命令。在 TerraExplorer 可以使用的菜单功能都能方便地使用, 但这要受到产品级别和许可的限制(如:TerraExplorer Viewer, TerraExplorer Pro)。 语法

void Invoke( [in] long CommandID) CommandID:决定将被调用的菜单命令。下面是菜单命令对应的 CommandID 值。 o 文件菜单:

§ 新建…

§ 打开… 关闭… § 保存… § 另存为… § 打包… § 打印… § o 编辑菜单: § 选择物体 § 选择区域 § 复制 § 剪切 § 粘贴 § 属性…

o 视图菜单: §工具箱 § 飞行面板 § 左上窗口 § 左下窗口 § 隐藏场景 § 全屏显示

o 导航菜单: § 旋转模式 § 滑动模式 § 转动倾斜模§ 式 缩放菜单 :

· 房屋 · 街道 · 城市 · 国家 · 全球 § 运行 § 暂停 § 停止 § 路径开始 § 路径结束 § 指北 § 环绕飞行 § 浏览物体模

· 环绕模式式菜单: · 椭圆模式 · 直线模式 · 弧线模式 ·

后视物体

= 34401

= 57601

= 57602

= 57603

= 57604

= 32790 = 34400

= 33432 = 33433 = 32817 = 32818 = 32819 = 34005

= 32789 = 1020 = 1013 = 1014 = 34416 = 32820

= 1022 = 1021 = 1023

= 32771

= 32772 = 32773 = 32774 = 32775

= 34002 = 1010 = 34013 = 34012 = 7008 = 34026

= 34208 = 34209 = 34210 = 34211 = 34200

= 1011

· · · · · · · o § § § § §§ § § § § o § · · · · · · · · · · · § · · · · · · · · · · ·

俯视物体 仰视物体 右视物体 左视物体 后视俯视物体 驾驶员

=

34201 = 34202 = 34203 =

34204

座舱浏览

图层菜单 :

导入特征图层… = 导入影像图层… 45200 = 导入高程图层… 33361 = 导入 Kml/Kmz 图 33362 =

层… 数据库图层… = 45200

45200上传新特征图层到 Oracle 数据库…

= 34501 金字塔重采样… = 特征表… 34500 = 刷新图层 45138 = 图层另存为… 45132 = 创建菜单: 45300 二维物体菜单: 文本标签 图像标签 线 多边形 矩形

规则多边形 箭头 圆 椭圆 弧线 地形视频

三维对象菜单: 导入三维模型 点云模型

导入线型点云模型 建筑物 多边形 箱子 圆柱体 球体 圆锥体 金字塔 箭头

= 33318 = 33319 = 33300 = 33301 = 33302 = 33303 = 33304 = 33305 = 33306 = 33307 = 33309 = 33321 = 33360 = 34417 = 33317 = 33316 = 33310 = 33312 = 33313 = 33314 = 33311 = 33315

§ 动态对象

· 菜单: 地面

·

交通工具 空中交通工具

· 导入动态对象路线

§ 位置 § 路线 § 树信息

§ 新建信息树组 o 测量菜单: § 信息查询

§ 测量水平距离 § 测量空间距离 § 测量垂直距离 § 测量面积

§ 自动生成等高线 § 生成剖面 § 最优路径 § 视线分析 § 视域分析

§ 圆顶辐射分析

o 工具菜单:

§ 协作环境

§ 地形抽取菜单: · 抽取 MPT · 抽取 VRML § GPS 跟踪 § 物体查询 § 复制物体 § 自由绘图 § 创建电力线 § 鹰眼接口

§ 蓝色势力跟踪 § 救援导航 § 多重坐标系 § Mil-Std-2525b § 制作点云模型… § 地图信息外接服务 § 数据库菜单: · 三维模型 · 图标

· 建筑物纹理 · 文本框架集 ·

GIS 图层

= 33322 = 33437

= 33438

= 45121 = 45120 = 45122 = 45000

= 33325 = 33326 = 33327 = 33330 = 33350 = 33331 = 33329 = 33333 = 33328 = 33334 = 33332 = 34419 = 34420 = 34436

= 34422 = 34411 = 34412 = 34413

= 34414 = 34423

= 34432

= 34438 = 34437 = 34431 = 34435

= 34415 = 34425 = 34426 = 34427 = 34428 = 34429

§

快照…

= 32783

§ § § §

保存照片…

相片尺寸… 工程参数设置… 选项…

= 32781 = 32785 = 34405 = 32787

返回值 返回值: S_OK E_FAIL 例子 (C#)

using System; using

System.Collections.Generic; using

System.ComponentModel; using System.Data;

using System.Drawing; using System.Text;

using System.Windows.Forms; using TerraExplorerX;

含义: 成功 失败 namespace 菜单接口 {

public partial class Form1 : Form

{

private ITerraExplorerObject5 ITerraExplorerObject;

private TE3DWindow TE;

private TerraExplorer

CoClassTE; private ITerraExplorer5 ITerraExplorer; private IMenu IMenu;

public Form1() {

InitializeComponent(); CoClassTE = new TerraExplorerClass();

ITerraExplorer =

(ITerraExplorer5)CoClassTE; IMenu = (IMenu)CoClassTE;

}

private void 新建 ToolStripMenuItem_Click(object sender, EventArgs e) {

IMenu.Invoke(34401); }

private void 打开 ToolStripMenuItem_Click(object sender, EventArgs e) {

IMenu.Invoke(57601); }

private void 关闭 ToolStripMenuItem_Click(object sender, EventArgs e) {

IMenu.Invoke(57602); }

private void 保存 ToolStripMenuItem_Click(object sender, EventArgs e) {

IMenu.Invoke(57603); }

private void 另存为 ToolStripMenuItem_Click(object sender, EventArgs e) {

IMenu.Invoke(57604); }

private void 打包 ToolStripMenuItem_Click(object sender, EventArgs e) {

IMenu.Invoke(32790); }

private void 打印 ToolStripMenuItem_Click(object sender, EventArgs e) {

IMenu.Invoke(34400); }

private void 退出 ToolStripMenuItem_Click(object sender, EventArgs e) {

this.Close();

}

(vbscript)

事件部分: OnFrame 事件

语法

void OnFrame() 说明

执行每帧 活 动时将触 发 该事件, 建 议不要从 客 户端处理 OnFrame 事 件,因为 会在

TerraExplorer 中产生大量的执行错误。 例子 (C#)

using System; using

System.Collections.Generic; using

System.ComponentModel; using System.Data; using System.Drawing; using System.Text;

using System.Windows.Forms; using TerraExplorerX;

namespace SkysymbolCodeCS {

public partial class Form1 : Form

{

//*********定义 te 相关常

用变量 private

TerraExplorer CoClassTE; private ITerraExplorer5 ITerraExplorer;

private IInformationTree5 IInformationTree; private IRender5 IRender; private IMenu IMenu; public Form1() {

InitializeComponent(); CoClassTE = new

TerraExplorerClass(); ITerraExplorer = (ITerraExplorer5)CoClassTE; IInformationTree =

(IInformationTree5)CoClassTE; IRender = (IRender5)CoClassTE; IMenu = (IMenu)CoClassTE; //设定 TE 的事件委托

this.CoClassTE.OnFrame += new

_ITerraExplorerEvents5_OnFrameEventHandler (OnFrame); }

private void Form1_Load(object sender, EventArgs e) {

IMenu.Invoke(57601); }

private void OnFrame() {

object MouseInfo; object ScreenX, ScreenY; object ObjType, WX, WH, WY, ObjectID; ObjType = 0;

IRender.GetMouseInfo(out MouseInfo,out ScreenX,out ScreenY); IRender.ScreenToWorld(Convert.ToInt32(ScreenX), Convert.ToInt32(ScreenY), ref ObjType, out

WX, out WH, out WY, out ObjectID);

this.toolStripStatusLabel1.Text = \"MouseInfo: X=\" + WX.ToString() + \"; Y=\" + WY.ToString(); }

} }

(VBScript)

OnTerraExplorerMessage 事件

语法

void OnTerraExplorerMessage([in] BSTR TEMessageID,[in] BSTR SourceObjectID,[in, out] VARIANTARG *pbHandled) 说明

当一个信息对象将被触发的时候,TerraExplorer 能够将这个事件通知给客户,然后使用者可 以自己处理这个信息或者让 TerraExplorer 处理它。 SourceObjectID 的返回值将决定如何解译 TEMessageID 的值。 参数说明

TEMessageID——根据下面 SourceObjectID 的返回值来解译这个值。 SourceObjectID——这个值取决于信息的类型和信息的发出者。下面是每种信息可能的返回

值:

(1)ITerraExplorerObject5 类的对象发出的信息:

拥有信息对象的对象的 ID 将被触发。在这种情况下,包含信息对象的的 ID 的

TEMessageID 将被触发。

(2)来自 IContainer2::SetMessageBarText()或是 TerraExplorer 的文本信息: \"MessageBarText\":在这种情况下,TEMessageID 包含信息文本。

(3)non-ITerraExplorerObject5 类发出的信息(例如:IContainer2::SetURL()): \"ContainerMessage\".在这种情况下,TEMessage 包含一个临时信息都象的

ID,而且 只能在事件的范围内访问。

(4)加载 FLY 文件时发出的信息:

\"LoadFlyContainer\".在这种情况下,TEMessageID 包含一个由允许的数

值组成的字 符串,用来定义 ITerraExplorerMessage5::Client,跟随在冒号后面(“:”), 接着是用于显示的 URL。例如:http://www.skylinesoft.com”, 表示打开下面的链接。 pbHandled——如果把这个值设置为 TRUE 则是在告诉 TerraExplorer:客户端将自己处理这 些信息而不希望 TerraExplorer 去显示这些信息。当客户端设置把这个值设置位 FALSE, TerraExplorer 正常地处理这些信息。 例子 (C#)

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text;

using System.Windows.Forms; using TerraExplorerX; namespace SkysymbolCodeCS {

public partial class Form1 : Form {

//*********定义 te 相关常用变量 private

TerraExplorer CoClassTE; private ITerraExplorer5 ITerraExplorer;

private IInformationTree5 IInformationTree; private IRender5 IRender;

private IMenu IMenu; private IContainer2 IContainer;

private IObjectManager5 IObjectManager; private ITerraExplorerObject5 TEObject; public Form1() {

InitializeComponent(); CoClassTE = new

TerraExplorerClass(); ITerraExplorer = (ITerraExplorer5)CoClassTE; IInformationTree =

(IInformationTree5)CoClassTE; IRender = (IRender5)CoClassTE; IMenu = (IMenu)CoClassTE; IContainer =

(IContainer2)CoClassTE; IObjectManager =

(IObjectManager5)CoClassTE; //设定 TE 的事件委托

this.CoClassTE.OnFrame += new

_ITerraExplorerEvents5_OnFrameEventHandler (OnFrame); this.CoClassTE.OnTerraExplorerMessage

+=

new

_ITerraExplorerEvents5_OnTerraExplorerMessageEventHandler(CoClassTE_OnTerraExplorerMessage);

}

void CoClassTE_OnTerraExplorerMessage(string TEMessageID, string SourceObjectID, ref object pbHandled)

{

TEObject = IObjectManager.GetObject(TEMessageID); //MsgType = TEObject.Type if (TEObject.ID != \"0\")

{

MessageBox.Show(\"Message Text: \" + TEObject.ID);

//bHandled = true; }

else

{

MessageBox.Show(\"你选择的对象的信息为空!\"); } }

private void Form1_Load(object sender, EventArgs e) {

IMenu.Invoke(57601); }

private void OnFrame() {

object MouseInfo; object ScreenX, ScreenY; object ObjType, WX, WH, WY, ObjectID; ObjType = 0;

IRender.GetMouseInfo(out MouseInfo,out ScreenX,out ScreenY); IRender.ScreenToWorld(Convert.ToInt32(ScreenX), Convert.ToInt32(ScreenY), ref ObjType, out

WX, out WH, out WY, out ObjectID);

}

this.toolStripStatusLabel1.Text = \"MouseInfo: X=\" + WX.ToString() + \"; Y=\" + WY.ToString(); }

}

(VBScript)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务