-
1
T
erraExplorer
API
简介
TerraExplorer API
提
供
了
一
套
强
大
的
接
口用
来
集
成
TerraExplorer
、
TerraExplorer Pro
和用户自定义应用。它提供了一些访问外部信息扩展的方
法,比如:访问数据库或基础地理空间数据。所有这些以
COM
协议为基础的
API
接口都可以通过脚本语言操作(例如
Javascript<
/p>
)
,也可以通过非脚本语言来控
制操作(例如:
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#
< br>:
(第一次举例是完整代码,主要部分为粗体部分,以后的例子只写主要部
分,下面接
口例子的其他代码与此例类似<
/p>
,
其中加载保存路径读者可以自行设定)
using System;
using
;
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();
(@
数
据
数
据
}
}
}
VB
script:
(其中黑体部分是主要部分)
ID=
CLASSID=
c1
>
(
2
)
Save
方法
:只能保存
fly
工程
,mpt
工程不能保存
C#
:
objTerraExplorer = new
TerraExplorerClass();
();
VBScript
:
Sub Save()
Set
IT
erraExplorer=ace(
5
End Sub
p>
(
3
)
Save
As
方法:
HRESULT
SaveAs([in] BSTR
FileName)
工程另存为
C#
:
objTerraExplorer = new
TerraExplorerClass();
(@
数据
p>
数据
VBScript
:
Sub SaveAs()
Set
ITerraExplorer=ace(
数据
数据
1.2
IPlane5
< br>控制飞机和摄像机的操作,
对于对象的飞行方式、
观看视
角、
视野高度进行
控制,
可按照需求控制摄像机的方向
、
倾角产生复杂的运动,
例如飞机起飞模拟。
< br>
IPlane5
属性:
方法:
Speed, FieldOfView
FlyTo,
SetPosition,
MovePosition,
GetPosition,
FlyToObject,
SetSpeed, GetSpeed, Zoom,
GetPositionEx
(
1<
/p>
)
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
;
(100.71729, 36.761361,40000, 100, 0,
0,
VBScript
:
Sub FlyTo()
Set IPlane5=ace(
108,39,2000,50,0,0,
Sub
(
2
)
SetPosit
ion
方法:设置跳转到视角的位置
[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;
ition(100.71729, 36.761361,
40000,100,0, 0,0,0, 1024);
VBScript
:
Sub
SetPosition()
Set
IPlane5=ace(
ition
108,39,2000,0,0,0,0,0,1
End
Sub
(
3
)
GetPosition
方法:
[out] VARIANT* doubleX,
输出视角所在的经
度
[out] VARIANT* doubleY,
输
出
视
角
所
在
的
经度
[out] VARIANT* doubleHeight,
输
出
p>
视
角
所
在
的
高
度
[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;
ition(out
x,out y,out h, out yaw,out pitch,out roll,out cdy,
out cdp);
= ng ();
= ng();
= ng();
=
ng();
=
ng();
=
ng();
= ng();
=
ng();
VBScript
:
Sub GetPosition()
ition
x,y,height,yaw ,pitch,roll,camaraPicth,camaraRoll
=x
=y
=height
=yaw
=pitch
=roll
=camaraPi
cth
=camaraR
oll End Sub
< br>(
4
)
MovePositio
n
方法:设置移动到视角的位置
[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;
sition(111,39,4000,0,0,0,0,0,1024);
VBScript
:
Sub MovePosition()
Set
IPlane5=ace(
sition
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(
string objID=raObjectID
(ItemID); IPlane5 objIPlane5 =
objTerraExplorer as
IPlane5;
bject(objID,0);
VBScript
:
Sub
FlyToObject()
Set
IPlane5=ace(
Set IInformationTree5
=ace(
em(
set Obj =
ect(ItemID)
bject ,0
End Sub
(
6
)
Zoom
方法:对当前进行视野缩放
C#
:
IPlane5 objIPlane5 = objTerraExplorer
as IPlane5;
(500,0);
VBScript
:
Sub Zoom()
Set
IPlane=ace(
(50)
End Sub
1.3
IObjectManager5
接口
管理三维窗口中的所有对象,<
/p>
使用本接口用户可添加、
删除、
修改三维
窗口
中的所有对象,主要管理如下对象:
创建二维对象
–
主要处理文本、图片标签和二维几何体,可创建如下对
象:
Text
label
:文本标签
Image
label
:图片标签
Polyline
:折线
Polygon
:面
Rectangle
:矩形
Regular
Polygon
:正多边形
2D
Arrow
:二维箭头
Circle
:圆
Ellipse
:椭圆
Arc
:圆弧
VideoOnTerrain<
/p>
:在三维地形上创建视频
创建三维对象
–
主要处理
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
窗体中显
示的
名
称
,
如
果
为
空
字
p>
符
串
,
TerraExplorer
将自
动为其设置一
个唯一的名称。
说明
在三维窗口中创建多义线,返回
ITerrainPolyline5
对象。
例子
C#:
private void
CreatePolyline()
{
ITerrainPolyline5 ITerrainPolyline =
Polyline(0, 255, _ON_TERRAIN, 0,
创建线
tex(0, 1,0,
0); tex(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
窗体中显
示的
名
称
,
如
果
为
空
字
p>
符
TerraExplorer
将自动为其设
置一
个唯一的名称。
int
doubl
e
int
HeightStyleCode
int
string
例子
C#:
private void
btnCreateObject_Click(object sender, EventArgs
e)
{
ITerrainPolyline
=
2DPolygon(0,
255,
0.4,
65525,
_ON_TERRAIN, 0,
创建面
tex(0, 1, 0,
0);
tex(10, 1, 10,
0);
tex(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
ObjectWidt
h
LineColor
FillOpacity
FillColor
HeightStyle
GroupID
Description
Y
坐
标
高
程
矩
形宽
线颜色,
RGB
值,最小为
255
。
定义对象的透明度。
0
为
对象的填充颜色,其值为
RGB
透明,
1
为
不透明。
HeightStyleCode
值。
一个枚举值,
主要决定对象在地
形上
以什么样的方式显示。
表
放置对象的组编号,
如果为
0
int
示对
象将在根节点下产生。
对象在
Information
窗体中显示
string
的名
称,
如
果为空字符串,
将自动为其设置一个唯一的名
称。
doubl
e
doubl
e
doubl
e 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,
名
称
,
如
果
为
空
字<
/p>
符
串
,
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(0x00646464)] long
FillColor,
[in,
defaultvalue(HSC_TERRAIN_RELATIVE)]
HeightStyleCode
HeightStyle, [in,
defaultvalue(0)] long GroupID,
[in,
defaultvalue(
[out, retval]
ITerrainRegularPolygon5** pITerrainRegPolygon2)
参数说明
§
X
–
经度坐标值。
§
Y
–
纬度坐标值。
§
Elevation
–
高程值。
§
Radius
–
对象的半径
(
单位:米
)
p>
。
§
NumOfSegments
–
圆的分段数。
§
LineColor
–
圆的弧线的颜色
§
FillOpacity
–
圆内的填充色是否透明。
§
FillColor
–
圆内的填充色。
§
HeightStyle
–
圆在图上的放置形式。
HeightStyleCode
可以选择下面的值:
o
HSC_TERRAIN_RELATIVE = 0
圆的<
/p>
每一个端点在地形图上拥有相同的高程
值。
o
HSC_PIVOT_RELATIVE = 1
高程参
数决
定圆
的
中
心
点
的
高
程。
圆的
每
个端
点分布
在
与
中心
点
相同
的平面
上。
o
HSC_ON_TERRAIN = 2
圆的端点沿地形分布。
o
HSC_TERRAIN_ABSOLUTE = 3
高程参
数决定圆的中心点的绝对高程。圆的每个端点分布在与中心点相同的平面
上。
§
GroupID
–
所创建的规则多边形在信息树中所在的组的
< br>ID
。如果把它设
置为
0
,则
图形被创建在根目录下。你可以通过下面几种方式获得
GroupID
:
o
直接在信息树中创建新组(方法:
IInformationTree5::CreateGroup
)
< br>。
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<
/p>
TE_E_INTERNAL
TE_E_NOLICENCE
例子
(C#)
using
System;
using
ic;
using
entModel;
using
using g;
using
using
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;
tonDown+=new
_ITerraExplorer
Events5_OnLButtonDownEventHandler(
OnLBu
ttonDown);
tonDown+=new
_ITe
rraExplorerEvents5_OnRButtonDownEventHandler(
OnRButtonDown);
}
private void Form1_Load(object sender,
EventArgs e)
{
(57601);
}
private void
btnCreateCircle_Click(object sender, EventArgs e)
{
seInputMode(_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;
ToWorld(X, Y, ref objType,
out WX, out WH, out WY,
out objID);
if (ITeCircle == null)
{
=
Circle(le(W
X), le(WY), 0,30
, 10, 255, 0, 500,
_TERRAIN_RELATIVE, 0,
新建的
ITeCircle
Circle
em(eeItemID);
}
}
}
}
private void
OnRButtonDown(int Flags, int X, int Y, ref object
bHandled)
{
seInputMode(_FREE_FLIGHT);
bIsLine = false;
}
}
(VBScript)
3.6
Create3DPolygon
说明
该方法能在三维窗口中创建一个三维
的多边形。
语法
HRESULT
Create3DPolygon (
[in, defaultvalue(0)]
V
ARIANT
SafeArrayVertices,
[in, defaultvalue(20)]
double
ObjectHeight,
[in,
defaultvalue(0x0000ff00)] long
LineColor, [in, defaultvalue(FT_NONE)]
double FillOpacity, [in,
defaultvalue(0x00646464)] long
FillColor,
[in, defaultvalue(0)]
HeightStyleCode
HeightStyle, [in,
defaultvalue(0)] long
GroupID,
[in, defaultvalue(
[out,
retval] ITerrain3DPolygon5** pITerrain3DPolygon5)
参数说明
§
SafeArrayVertices
–
是由许多个三分组组成的数组,
每个三分组由三个双
精度数成。
每一个三分组包括一个
X
坐标,一个高程值,一个
Y
坐标。通常这
个数组决定三维多边形
底部的基础形状
(TerraExplorer
将为每个基础的上面部分
复制这个形状
)
。客户用相同的数组
设置所有的高程值。
这在决定地表的三维多
边形的高程值方面是很重要的。
COM
接口中表
示高程值的单位是
meters
而
X
坐标和
Y
坐标则用
MPT
单位表示。你可以使用
ITerrain
接
口来获取有关
MPT
单位的信息。如果你使用的是
Lat-Long
格式,
Lat-
Long
的值是十进制
的
Lat-
Long
。下面是一个用
VB
p>
脚本写的例子,它返回了三个顶点,每个顶点都被设置
成了
相同的高程值。
3.7
CreateBuilding
说明
该方法能在三维窗口中创建一
个建筑物。
语法
void
CreateBuilding (
[in, defaultvalue(0)]
V
ARIANT
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(
[out,
retval] ITerrainBuilding5** pITerrainBuilding5)
参数说明
§
SafeArrayVertices
–
是由许多个三分组组成的数组,每个三分组由三个双
精度数成。
每一个三分组包括一个
X
坐标,一个高程值,一个
Y
坐标。通常
这个数组决定三维多边形
底部的基础形状
(TerraExplorer
将为每个基础的上面部
分复制这个形状
)
。客户用相同的数组
设置所有的高程值。
这在决定地表的三维
多边形的高程值方面是很重要的。
COM
接口中表
示高程值的单位是
meters
而
X
坐标和
Y
坐标则用
MPT
单位表示。你可以使用
ITerrain
接
口来获取有关
MPT
单位的信息。如果你使用的是
Lat-Long
格式,
Lat-
Long
的值是十进制
的
Lat-
Long
。下面是一个用
VB
p>
脚本写的例子,它返回了三个顶点,每个顶点都被
设置成了
相同的高程值。
§
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<
/p>
TE_E_INTERNAL
TE_E_NOLICENCE
例子
(C#)
using
System;
using
ic;
using
entModel;
using
using g;
using
using
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;
tonDo
wn+=new
_ITe
rraExplorerEvents5_OnLButtonDownEventHandler(OnLBu
ttonDown);
tonDown+=new
_ITe
rraExplorerEvents5_OnRButtonDownEventHandler(
OnRButtonDown); IInformationTree =
(IInformationTree5)CoClassTE;
}
private void
Form1_Load(object sender, EventArgs e)
{
(57601);
}
private void OnLButtonDown(int Flags,
int X, int Y, ref object bHandled)
{
if (bIsLine ==
true)
{
object
objType = 63, WX, WH, WY, objID;
ToWorld(X, Y, ref objType, out WX, out
WH, out WY,
out objID);
if
(ITeBuilding == null)
{
ITeBuilding=Building(0,50,
_POLYGONS ,
_TERRAIN_ABSOLUTE, 0,
新建的
Building
}
tex(le(WX),
WH),
le(
le(W
Y), 0);
}
}
private void
OnRButtonDown(int Flags, int X, int Y, ref object
bHandled)
{
seInputMode(_
FREE_FLIGHT);
bIsLine = false;
em(eeItem
ID);
}
private void
btnCreateBuilding_Click(object sender, EventArgs
e)
{
seInputMode(_COM_CLIENT);
bIsLine = true;
ITeBuilding
=
null;
}
}
}
(VBScript)
function CB(x,y)
if
isline=true then
dim
outX,outY,outH,ObjectID
ToWorld
x,y,63,outX,outH,outY,ObjectID
set
IBuilding = Building(CreateVertArray(),
20,BS_POLYGONS, 0, 0,
新建的
Building
'tex
outX,outH,outY,0
end if
end function
Function
CreateVertArray()
Dim
vert(9)
vert(0) = 120.0099
= 40.0005
'First
vertex X-
coordinate. vert(1) = 40.0
'First vertex height.
vert(2)
'First vertex
Y-
coordinate. vert(3) = 120.0091
'Second vertex
X-
'Second
vertex height.
'Second vertex
Y-
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(0x00646464)] long
FillColor,
[in, defaultvalue(0)]
HeightStyleCode
HeightStyle, [in,
defaultvalue(0)] long
GroupID,
[in, defaultvalue(
[out,
retval] ITerrain3DRectBase5**
pITerrain3DRectBase5)
参数说明
§
X
–
经度。
§
Y
–
纬度。
§
Elevation
–
高程。
§
ObjectWidth
–
p>
宽度
(
单位:
me
ters)
。
§
ObjectDepth
–
深度
(
单位:
meters)
。
§
ObjectHeight
–
<
/p>
高度
(
单位:
m
eters)
。
§
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
ic;
using
entModel;
using
using g;
using
using
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;
tonDown+=new
_ITerraExplorer
Events5_OnLButtonDownEventHandler(
OnLBu
ttonDown);
tonDown+=new
_ITe
rraExplorerEvents5_OnRButtonDownEventHandler(
OnRButtonDown);
}
private void Form1_Load(object sender,
EventArgs e)
{
(57601);
}
private void btnCreateBox_Click(object
sender, EventArgs e)
{
seInputMode(_COM_CLIENT);
bIsLine =
true;
ITeBox =
null;
}
private
ITerrain3DRectBase5 CreateBox(double X, double Y)
{
return ITeBox
= Box (X, Y, 0, 100, 50,
100, 30, 255, 1, 300,
_TERRAIN_ABSOLUTE , 0,
}
private void OnLButtonDown(int Flags,
int X, int Y, ref object bHandled)
{
if (bIsLine ==
true)
{
object
objType = 63, WX, WH, WY, objID;
ToWorld(X, Y, ref objType, out WX, out
WH, out WY,
out objID);
if
(ITeBox == null)
{
ITeBox =
CreateBox(le(WX),le(WY));
}
}
}
private void
OnRButtonDown(int Flags, int X, int Y, ref object
bHandled)
{
seInputMode(_FREE_FLIGHT);
bIsLine = false;
em(
TreeItemID);
}
private void
btnCreateBuilding_Click(object sender, EventArgs
e)
{
seInputMode(_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(0x00646464)] long
FillColor,
[in, defaultvalue(0)]
HeightStyleCode
HeightStyle, [in,
defaultvalue(0)] long
GroupID,
[in,
defaultvalue(
[out, retval]
ITerrain3DRectBase5** pITerrain3DRectBase5)
参数说明
§
X
–
经度。
§
Y
–
纬度。
§
Elevation
–
高程。
§
ObjectWidth
–
金字塔的宽度
< br>(
单位:
meters)
。
p>
§
ObjectDepth
–
p>
金字塔的深度
(
单位:
meters)
。
§
ObjectHeight
–
金字塔的高度
< br>(
单位:
meters)
。
p>
§
Yaw
–
飞行偏角。
§
LineColor
–
线的颜色。
§
FillOpacity
–
透明度。
§
FillColor
–
填充色。
§
HeightStyle
–
一个决
定金字塔在地形图上如何放置的枚举值。
HeightStyleCode
可以
取下面的值:
o
HSC_TERRAIN_RELATIVE = 0
相对高度。
o
HSC_TERRAIN_ABSOLUTE = 3
绝对高度。
§
GroupID
–
将要添加到信息树窗口中的新建的金字塔的名称。如果该字
符串为空
, TerraExplorer
将指定一个默认名称。
§
Description
p>
–
将要添加到信息树窗口中的新建的金字塔的名称。如果该字
符串为空
, TerraExplorer
将指定一个默认名称。
§
pITerrain3DRectBase5
–
一个新建金字塔的接口指示器。这个参数必须为
空。
返回值
返回值
S_OK
E_FAIL
TE_E_MPTNOTLOADED
含义
成功
失败
使
用
此
方
法
必
须
先
在
TerraExplorer
加载一个
MPT
文
件
在信息树中输入的组的
ID
值
无效
TerraExplorer
不
能创建对
象。
如
果想得到关于这个的更多信
息请
使用
IErrorInfo
接口
你没
有使用这项功能的许可
TE_E_INFOTREE_PARENTNOTGROUP<
/p>
TE_E_INTERNAL
TE_E_NOLICENCE
例子
(C#)
using
System;
using
ic;
using
entModel;
using
using g;
using
using
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;
tonDo
wn+=new
_ITe
rraExplorerEvents5_OnLButtonDownEventHandler(
OnLButtonDown);
tonDown+=new
_ITerraExplorerEvents5_OnRButtonDownEventHa
ndler(
OnRButtonDown);
}
private void Form1_Load(object sender,
EventArgs e)
{
(57601);
}
private ITerrain3DRectBase5
CreatePyramid(double X, double Y)
{
return
ITePyramid = Pyramid(X, Y, 0, 100, 50,
100, 30, 255, 1, 300,
_TERRAIN_ABSOLUTE, 0,
}
private void OnLButtonDown(int Flags,
int X, int Y, ref object bHandled)
{
if (bIsLine ==
true)
{
object
objType = 63, WX, WH, WY, objID;
}
}
ToWorld(X, Y, ref objType, out WX, out
WH, out WY,
out objID);
if
(ITePyramid == null)
{
ITePyramid = CreatePyramid(le(WX),
le(WY));
}
private void OnRButtonDown(int Flags,
int X, int Y, ref object bHandled)
{
seInputMode(_
FREE_FLIGHT);
bIsLine = false;
em(eeItem
ID);
}
private void
btnCreateBuilding_Click(object sender, EventArgs
e)
{
seInputMode(_COM_CLIENT);
bIsLine = true;
ITePyramid =
null;
}
private void
btnCreatePyramid_Click(object sender, EventArgs e)
{
seInputMode(_COM_CLIENT);
bIsLine = true;
ITePyramid =
null;
}
}
}
(VBScrip
t)