三维开发学习(二)(skyline TerraExplore PRO二次开发)

时间:2024-02-23 16:44:02

具体实现如下:

1 定义对象

2 初始化对象

3 加载Activex

4 浏览网页

代码如下:

html>

<head>

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

<title>网页标题</title>

<style type="text/css">

<!--

td {

      font-family: "宋体";

      font-size: 12px;

}

-->

</style>

</head>

<body onLoad="Init();">

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

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

</object>

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

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

</object>

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

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

</object>

</html>

<script language="javascript">

    

      var ITerraExplorer = null;

      var IPlane = null;

      var IMenu = null;

      var IObjectManager = null;

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

      function Init()

      {

           var temp;

           ITerraExplorer = TE.interface("ITerraExplorer5");

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

           temp = ITerraExplorer.Type;

           alert(temp);

      }

IPlane5

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

属性:

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

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

方法:

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

[in] double X,

地形上的x坐标的位置

[in] double Z,

地形上的z坐标的位置

[in] double Height,

飞行对象与地形的高度

[in] double Distance,

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

[in] double Yaw,

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

[in] double Pitch,

对斜度进行控制

[in] BSTR Pattern)运动的模式

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

1、 FlyToLocation

2、 JumpToLocation

3、 FlyToTerrain

4、 Circle(圆)

5、 Oval(椭圆)

6、 Line(线形)

7、 Arc(圆弧)

代码:

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

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

[in] double X,

X坐标

[in] double Y,

Y坐标

[in] double Height,

高度

[in] double Yaw,

偏航

[in] double Pitch,

斜度

[in] double Roll,

滚动

[in] double CameraDeltaYaw,

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

[in] double CameraDeltaPitch,

视角的斜度。。。。。。

[in, defaultvalue(0)] long Flags)
Flag共有13个参数,默认为0,每个参数都对应上面一个参数,使某个参数无效。

MovePosition

与setPosition相同。

GetPosition

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

[out] VARIANT* doubleX,

[out] VARIANT* doubleY,

[out] VARIANT* doubleHeight,

[out] VARIANT* doubleYaw,

[out] VARIANT* doublePitch,

[out] VARIANT* doubleRoll,

[out] VARIANT* doubleCameraDeltaYaw,

[out] VARIANT* doubleCameraDeltaPitch)

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

FlyToObject

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

[in] BSTR ObjectID,

   Dim ItemID = IInformationTree.FindItem("浏览路径\2006北京国际马拉松赛")
   \'msgbox ItemI
   if ItemID <> 0 then
      ObjID = IInformationTree.GetTerraObjectID(ItemID)
      IPlane.FlyToObject ObjID, 18
   els
      alert "Item not found: "&ItemName
   End If

[in] ActionCode Code)

动作代码:

o        AC_FLYTO                   = 0    //飞行到对象

o        AC_CIRCLEPATTERN                           = 1 //圆形

o        AC_OVALPATTERN                             = 2//椭圆

o        AC_LINEPATTERN                                = 3 //线形

o        AC_ARCPATTERN                                = 4 //弧形

o        AC_FOLLOWBEHIND                           = 5 //后边

o        AC_FOLLOWABOVE                            = 6 //上方

o        AC_FOLLOWBELOW                               = 7下方

o        AC_FOLLOWRIGHT                              = 8   //右边

o        AC_FOLLOWLEFT                                 = 9 //左边

o        AC_FOLLOWBEHINDANDABOVE    = 10               //后上方   

o        AC_FOLLOWCOCKPIT                            = 11 //坐在机舱

o        AC_JUMP                                     = 14 //跳转

o        AC_PLAY                                    = 18 //跳转并播放

SetSpeed

([in] double Speed)

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

GetSpeed

[out, retval] double* Speed)

获得以速度的值

Zoom

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

[in] double Distance,

在某个距离段执行的操作

GetPositionEx

重新获得setPosition的参数,定义视角的位置和方向,此方法多了一个

Flag,可以重新找到海拔高度的方法到地形数据上。
用于像地面剖析等。