喜欢NDGIS

时间如水,岁月如梭。一晃工作这么多年了。

2011年12月9日 #

Skyline TEPro6.0版本在二次开发方面的改进总结

20114月,Skyline推出了最新版本的软件(version 6.0),相对于以前版本软件,新版本软件改善和增加了很多新能功能;同时,开放的APIs也进行了很大的调整,变得更加丰富合理、简单易用。那么,新版本开放的APIs相对于早期的APIs都有哪些明显变化和改进呢?

1.       TerraExplorerSGWorld的关系?

在新版本的开发及运行环境中,保持了对以前版本APIs支持的兼容性,通过TerraExplorer接口依然可以调用早期版本的功能APIs;但如果使用新版本的APIs,则需要通过SGWorld接口来实现;不同时期的接口可以混合使用;

2.       从软件UI上的变化对应IMenuICommand6的变化?

在以前版本中,用户通过IMenu接口可以实现对TerraExplorer(包括ViewPro版本)软件菜单功能的快速调用,而新版本软件的界面风格上做了很大的改变,如果要实现对菜单功能的快速调用,则需要通过ICommand6接口来实现;

3.       ILayer5ILayer6的变化?

ILayer6相对ILayer5改进了很多,首先是调整了图层组织结构,增加了FeatureGroups6FeatureGroup6Features6 Feature6IFeatureAttributes6IFeatureAttribute6等对象;其次是增加了实现拓扑查询的ExecuteSpatialQuery方法;另外,ILayer6对象也支持新建、编辑和保存;

4.       ClientData属性的变化?

导入SkylineSHP文件,SHP文件原有的属性信息,在Skyline5版本的时候,是保存在对象的ClientData属性中的;但在Skyline6版本中,那些信息是记录在IFeature6对象的IFeatureAttributes6中的,而没有保存到ClientData属性中;ClientData属性仅用来记录用户需要自定义增加的属性字段及信息;

5.       创建几何对象方法的变化?

利用新版本的APIs创建几何对象,需要先创建IPosition6或者IGeometry来确定对象的几何结构和位置,进而才能创建ITerrainLabel6ITerrainModel6ITerrainPolyline6ITerrainBuilding6等对象;IGeometry可以通过ICreator6IGeometryCreator来创建;

6.       新增几何对象拓扑关系的判断和计算?

通过ISpatialRelationISpatialOperator接口,能够实现几何对象拓扑关系的判断和计算,进而实现相对复杂空间分析计算,如缓冲区分析等;

7.       多边形属性的增加?

多边形IPolygon接口,增加了AreaCentroidDimensionEnvelope等属性,这样可以更方便实现面积量算、根据对象的外接矩形实现定位等功能;

8.       IColor6接口的增加?

通过这个接口,更容易实现几何对象颜色和透明度的定义和设置;

9.       全新的IAnalysis6接口?

在新版本的APIs中,Skyline首次开放了IAnalysis6接口,其中包括实现淹没分析、通视分析、视域分析、剖面分析等功能的方法;

10.   ITerrainRoute5IPresentation6的变化?

ITerrainRoute5在新版本中升级成了IPresentation6,增加了很多属性和方法,并直接提供了输出成视频文件的方法,提供了强大的自定义PPT汇报功能;

11.   ITimeSpan6IDateTime6的结合?

利用新增加的IDateTime6ITimeSpan6接口,可以很好地设置FLY工程中实体对象的可见周期,并能够通过Time Slider进行灵活控制;

12.   WKTWKB支持的增加?

用户可以通过Well-known text (WKT)来定义空间投影坐标系和空间几何对象的空间信息;也可以通过Well-known Binary (WKB)来定义空间几何对象的空间信息;

13.   IShadow6的增加?

通过IShadow6,可以创建、显示、隐藏和删除三维对象的阴影效果;在展示创建好的对象阴影效果时,需要打开太阳光源和使用Time Slider进行控制;

14.   APIs更好地支持Javascript开发?

利用新APIs进行Web开发,可以解决以前APIs中一个函数方法多个返回值的问题,这样就可以完全使用Javascript进行SkylineB/S系统开发;

 

 

posted @ 2011-12-09 13:50 Itan 阅读(58) 评论(0) 编辑

2011年5月16日 #

Skyline TEP5.1.3二次开发入门——初级(七)

6.7  IRender5

主要用来获取当前屏幕信息、鼠标信息和三维场景中的地理坐标信息,以及它们之间的坐标转换等;

 

Quality

当前3D窗口中渲染的MPT文件的质量;

HudMode

定义HUD的显示设置(包括导航,指北等等);

GetRenderRect

返回3D窗口中渲染的区域范围,以像素表示(对应屏幕Left,Top,Width,Height);

ScreenToTerrain

将屏幕上的像素转换成地形坐标,并返回绝对高程值;

GetMouseInfo

本方法返回鼠标位置(屏幕坐标);

SetMouseInputMode

本方法定义鼠标的输入模式,不同的输入模式允许你控制不同的鼠标行为;

SetMouseCursor

本方法用来定义设置鼠标光标。为了改变光标你必须首先设置光标输入模式为1(MI_COM_CLIENT);

ScreenToWorld

本方法返回屏幕上所指像素点的地形坐标,如果选择的像素是一个对象的一部分,而不是地形,对象的ObjectID被返回;

WorldToScreen

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

SetHUDLayer

本方法允许一个HUD层的绘画定制,以流的方式进行保存,将图绘制在3D窗口中;

GetMouseInputMode

本方法获得鼠标的输入模式(仅在IRender5中使用);

 

 

代码示例:

【C#】

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using TerraExplorerX;

 

namespace ExCodeIRender

{

    public partial class Form1 : Form

    {

        private TerraExplorer TE;

        private ITerraExplorer51 TE51;

        private IRender5 IRender;

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            this.TE = new TerraExplorerClass();

            this.TE51 = (ITerraExplorer51)TE;

            IRender = (IRender5)TE;

                       

            this.TE.OnFrame += new _ITerraExplorerEvents5_OnFrameEventHandler(TE_OnFrame);

 

            TE51.Load(Application.StartupPath + "\\Default.fly");

        }

 

        void TE_OnFrame()

        {

            object plongFlags, plSX, plSY;

            IRender.GetMouseInfo(out plongFlags,out plSX,out plSY);

            Double dx, dy, dh;

            IRender.ScreenToTerrain(Convert.ToInt32(plSX), Convert.ToInt32(plSY), out dx, out dy, out dh);

 

            string scontent = "当前鼠标点坐标:" + "\r\n$X:" + dx.ToString() + "\r\n$Y:" + dy.ToString() + "\r\n$H:" + dh.ToString();

            this.label1.Text = scontent;

        }

    }

}

【javascript】

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="IRender5.aspx.cs" Inherits="ExCode_IRender5" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

     <title>Skyline二次开发教程【配套示例】</title>   

    <script type ="text/javascript">

        function Init() {

            var TE = _$SGCreateTEObj();

            var ITerraExplorer = TE.interface("ITerraExplorer51");

            ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");

            ITerraExplorer.AttachEvent("OnFrame", OnFrame);

        }

        function OnFrame()

        {

            var myparam = new _$SGWorldParam();

            GetMouseInfo(myparam);

            var myparam2 = new _$SGWorldParam();

            GetWorldParam(myparam.x, myparam.y, myparam2);

            var scontent = "当前鼠标点坐标:" + "\r\n$X:" + myparam2.x + "\r\n$Y:" + myparam2.y + "\r\n$H:" + myparam2.h;

            window.document.getElementById("Title").innerHTML = scontent;

        }

 

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

        // 创建三维对象 赵贺 2009.01.25.

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

        function _$SGCreateTEObj() {

            var obj = window.document.getElementById("TE");

            if (obj == null) {

                obj = document.createElement('object');

                document.body.appendChild(obj);

                obj.name = "TE";

                obj.id = "TE";

                obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";

            }

            return obj;

        }

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

        // 定义集合参数 赵贺 2009.01.25.

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

        function _$SGWorldParam() {

            this.x = 0;

            this.y = 0;

            this.h = 0;

            this.yaw = 0;

            this.pitch = 0;

            this.roll = 0;

            this.OID = 0;

            this.OType = 0;

        } 

    </script>

    <script type ="text/vbscript">

    '------------------------------------------------------------

    ' GetMouseInfo 得到鼠标信息 赵贺 2009.02.18.

    '------------------------------------------------------------

    sub GetMouseInfo(param)

        Dim IRender

        Set IRender = TE.interface("IRender5")

        IRender.GetMouseInfo longFlags,longScreenX,longScreenY

        param.x = longScreenX

        param.y = longScreenY

        param = longFlags

    end sub

    '------------------------------------------------------------

    ' IRender 坐标转换 赵贺 2009.01.25.

    '------------------------------------------------------------

    sub GetWorldParam(x,y,param)  

        Dim objType, dX, dY, dH, objID

        objType = 0

        'Dim TE

        'Set TE = _$SGCreateTEObj()

        Dim IRender

        Set IRender = TE.interface("IRender5")

        IRender.ScreenToWorld x, y,objType,dX,dH,dY,objID

        param.x=dX

        param.y=dY

        param.h=dH

        param.OID=objID

        param.OType=objType

        param=objID

    end sub

    </script>

</head>

<body onload = "Init()">

    <form id="form1" runat="server">

    <div id = "Title"></div>

    <div id="Main">

        <object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"

            width="521" height="521">

        </object>

    </div>

    </form>

</body>

</html>

 

 

posted @ 2011-05-16 18:07 Itan 阅读(334) 评论(1) 编辑

Skyline TEP5.1.3二次开发入门——初级(六)

6.6  IContainer2

主要用来设置TerraExplorer中的泡泡等弹出信息和超链接信息等,提供添加、删除、编辑指定容器及其内容的方法;

 

SetURL

设置超链接地址;

RemoveURL

移除URL;

BringToFront

将设置的URL文件在容器前端显示;

SetMessageBarText

设置Message Bar Container信息;

HTMLPopup

显示HTML浮动窗口,可以显示文本或者网页内容;

 

 

代码示例:

【C#】

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using TerraExplorerX;

 

namespace ExCodeIContainer

{

    public partial class Form1 : Form

    {

        private TerraExplorer TE;

        private ITerraExplorer51 TE51;

        private IContainer2 IContainer;

 

        public Form1()

        {

            InitializeComponent();

 

            this.TE = new TerraExplorerClass();

            this.TE51 = (ITerraExplorer51)TE;

            this.IContainer = (IContainer2)TE;

 

            TE51.Load(Application.StartupPath + "\\Default.fly");

        }

 

        private void btnStart_Click(object sender, EventArgs e)

        {

            if (this.btnStart.Text == "打开")

            {

                IContainer.HTMLPopup(MsgType.TYPE_TEXT, 1, 1, 300, 100, "Skyline", "感谢您对Skyline的支持!", 0, -1);

                this.btnStart.Text = "关闭";

            }

            else

            {

                IContainer.RemoveURL(5, "Skyline");

                this.btnStart.Text = "打开";

            }

        }

    }

}

【javascript】

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="IContainer2.aspx.cs" Inherits="ExCode_IContainer2" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>Skyline二次开发教程【配套示例】</title>   

    <script type ="text/javascript">

        function Init() {

            var TE = _$SGCreateTEObj();

            var ITerraExplorer = TE.interface("ITerraExplorer51");

            ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");

        }

        function Test(obj) {

            var TE = _$SGCreateTEObj();

            var IContainer = TE.interface("IContainer2");

            if (obj.value == "打开") {

                IContainer.HTMLPopup(0, 1, 1, 300, 100, "Skyline", "感谢您对Skyline的支持!", 0, -1);

                obj.value = "关闭";

            }

            else {

                IContainer.RemoveURL(5, "Skyline");

                obj.value = "打开";

            }

        }

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

        // 创建三维对象 赵贺 2009.01.25.

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

        function _$SGCreateTEObj() {

            var obj = window.document.getElementById("TE");

            if (obj == null) {

                obj = document.createElement('object');

                document.body.appendChild(obj);

                obj.name = "TE";

                obj.id = "TE";

                obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";

            }

            return obj;

        }

    </script>

</head>

<body onload = "Init()">

    <form id="form1" runat="server">

    <div id = "Title">

    <input id="Button1" type="button" value="打开" onclick = "Test(this)" />

    </div>

    <div id="Main">

        <object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"

            width="521" height="521">

        </object>

    </div>

    </form>

</body>

</html>

 

 

posted @ 2011-05-16 18:06 Itan 阅读(419) 评论(0) 编辑

Skyline TEP5.1.3二次开发入门——初级(五)

6.5  ITerrain5

主要用来获取三维场景中基础信息,包括MPT的投影信息、坐标信息、地形高度和地表透明度等;

 

MPTName

返回当前使用的MPT文件名,如果当前未装载MPT文件,则返回“NO_MPT”;

GroupKey

定义工程的组键值;

SystemKey

定义工程的坐标系统键值;

DatumKey

定义工程的数据键值;

UnitKey

定义测量单位;

EPSG

定义工程的EPSG代码;

Description

用户定义描述(TerraExplorer Pro中Project中的Description设置);

Opacity

地表透明度(0.1-1);

GetGroundHeight

用此方法获取当前坐标距离地面的距离高度;

GetGroundHeightEx

用此方法获取当前坐标距离地面的距离高度,同时如果该坐标点上存有对象,可以获得该对象的ObjectID;

GetExtent

返回当前所使用的地形数据的范围;

 

 

代码示例:

【C#】

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using TerraExplorerX;

 

namespace ExCodeITerrain

{

    public partial class Form1 : Form

    {

        private TerraExplorer TE;

        private ITerraExplorer51 TE51;

        private ITerrain5 ITerrain;

       

        public Form1()

        {

            InitializeComponent();

 

            this.TE = new TerraExplorerClass();

            this.TE51 = (ITerraExplorer51)TE;

            ITerrain = (ITerrain5)TE;

 

            TE51.Load(Application.StartupPath + "\\Default.fly");

        }

 

        private void btnStart_Click(object sender, EventArgs e)

        {

            MessageBox.Show("$MPTName:"+ITerrain.MPTName+"\r\n"+

                "$GroupKey:" + ITerrain.GroupKey + "\r\n" +

                "$SystemKey:" + ITerrain.SystemKey + "\r\n" +

                "$DatumKey:" + ITerrain.DatumKey + "\r\n" +

                "$UnitKey:" + ITerrain.UnitKey + "\r\n" +

                "$EPSG:" + ITerrain.EPSG.ToString() + "\r\n" +

                "$Description:" + ITerrain.Description + "\r\n" +

                "$Opacity:"+ITerrain.Opacity.ToString());

        }

    }

}

【javascript】

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ITerrain5.aspx.cs" Inherits="ExCode_ITerrain5" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>Skyline二次开发教程【配套示例】</title>   

    <script type ="text/javascript">

        function Init() {

            var TE = _$SGCreateTEObj();

            var ITerraExplorer = TE.interface("ITerraExplorer51");

            ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");

        }

        function Test() {

            var ITerrain = TE.interface("ITerrain5");

            alert("$MPTName:" + ITerrain.MPTName + "\r\n" +

                "$GroupKey:" + ITerrain.GroupKey + "\r\n" +

                "$SystemKey:" + ITerrain.SystemKey + "\r\n" +

                "$DatumKey:" + ITerrain.DatumKey + "\r\n" +

                "$UnitKey:" + ITerrain.UnitKey + "\r\n" +

                "$EPSG:" + ITerrain.EPSG + "\r\n" +

                "$Description:" + ITerrain.Description + "\r\n" +

                "$Opacity:" + ITerrain.Opacity);

 

        }

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

        // 创ä建三维对象 赵贺 2009.01.25.

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

        function _$SGCreateTEObj() {

            var obj = window.document.getElementById("TE");

            if (obj == null) {

                obj = document.createElement('object');

                document.body.appendChild(obj);

                obj.name = "TE";

                obj.id = "TE";

                obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";

            }

            return obj;

        }

    </script>

</head>

<body onload = "Init()">

    <form id="form1" runat="server">

    <div id = "Title">

    <input id="Button1" type="button" value="测试" onclick = "Test()" />

    </div>

    <div id="Main">

        <object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"

            width="521" height="521">

        </object>

    </div>

    </form>

</body>

</html>

 

 

posted @ 2011-05-16 18:03 Itan 阅读(283) 评论(0) 编辑

Skyline TEP5.1.3二次开发入门——初级(四)

摘要: 6.4 IInformationTree5主要用来组织管理信息树中的全部对象(包括组和图层等对象),实现对象遍历、矢量数据导入、对象删除等功能;CreateGroup在信息树窗口中创建一个新组;CreateLockedGroup创建一个锁定组。当组被锁定的时候,TerraExplorer View用户不能展开该组;RenameGroup重命名一个组;ExpandGroup展开组或者折叠该组;GetItemName使用ItemID获取该子项的名称,TerraExplorer Viewer支持本方法;DeleteItem删除树中的一个子项;SetParent移动条目到不同的组;GetNextIte阅读全文

posted @ 2011-05-16 18:01 Itan 阅读(472) 评论(0) 编辑

Skyline TEP5.1.3二次开发入门——初级(三)

摘要: 6.3 IObjectManager51主要用来实现对象的创建、编辑等操作,结合ITerraExplorerObject5等对象接口,来实现各种类型对象的三维渲染功能;CreatePolyline创建线对象;Create2DPolygon创建多边形对象;CreateRectangle创建矩形对象;CreateRegularPolygon创建正多边形对象;CreateCircle创建圆对象;Create3DPolygon创建三维多边形对象;CreateBuilding创建建筑物对象;CreateBox创建箱子对象;CreatePyramid创建金字塔对象;CreateCylinder创建圆柱体对阅读全文

posted @ 2011-05-16 17:59 Itan 阅读(523) 评论(0) 编辑

Skyline TEP5.1.3二次开发入门——初级(二)

6.2  IPlane5

主要用来控制相机(三维场景观察点)的坐标位置、角度、速度等参数;提供实现飞行定位和浏览缩放的操作方法;

 

Speed

设置飞行速度,可用GetSpeed方法来获取速度;

FieldOfView

相机视域范围;

FlyTo

飞行到某一位置;

SetPosition

设置跳转到视角的位置;

MovePosition

设置移动到视角的位置;

GetPosition

获取当前视角的位置;

FlyToObject

飞行到某一对象;

SetSpeed

设置相机速度;

GetSpeed

获取相机的速度;

Zoom

缩放操作;

GetPositionEx

获取相机的位置和方向;

 

代码示例:

【C#】

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using TerraExplorerX;

 

namespace ExCodeIPlane

{

    public partial class Form1 : Form

    {

        private TerraExplorer TE;

        private ITerraExplorer51 TE51;

        private IPlane5 IPlane;

 

        public Form1()

        {

            InitializeComponent();

 

            this.TE = new TerraExplorerClass();

            this.IPlane = (IPlane5)TE;

            this.TE51 = (ITerraExplorer51)TE;

 

            TE51.Load(Application.StartupPath + "\\Default.fly");

        }

 

        private void btnFlyTo_Click(object sender, EventArgs e)

        {

            new Random().Next(1,36);

            Random rd = new Random(DateTime.Now.Millisecond);

 

 

            IPlane.FlyTo(128 + 2 * rd.Next(0, 10), 36 + 2 * rd.Next(0, 10), 1111111, 1000000, 0, -89, "FlyToLocation");

        }

 

        private void btnZoom_Click(object sender, EventArgs e)

        {

            object dX, dH, dY, dYaw, dPitch, dRoll, dcYaw, dcPitch;

            IPlane.GetPosition(out dX, out dY, out dH, out dYaw, out dPitch, out dRoll, out dcYaw, out dcPitch);

            if (Convert.ToDouble(dH) > 100000)

            {

                IPlane.Zoom(Convert.ToDouble(dH) / 100);

            }

            else

            {

                IPlane.Zoom(Convert.ToDouble(dH) * 100);

            }

        }

    }

}

 

【javascript】

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="IPlane5.aspx.cs" Inherits="ExCode_IPlane5" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>Skyline二次开发教程【配套示例】</title>   

    <script type ="text/javascript">

        function Init() {

            var TE = _$SGCreateTEObj();

            var ITerraExplorer = TE.interface("ITerraExplorer51");

            ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");

        }

        //缩放

        function ZoomFlyTo() {

            var IPlane = TE.interface("IPlane5");

            var myparam = new _$SGWorldParam();

            GetPosition(myparam);

            if (myparam.h > 100000) {

                IPlane.Zoom(myparam.h / 100);

            }

            else {

                IPlane.Zoom(myparam.h * 100);

            }

 

        }       

        //定位

        function RadomFlyTo() {

            var IPlane = TE.interface("IPlane5");

            IPlane.FlyTo(128 + 20 * Math.random(), 36 + 20 * Math.random(), 1111111, 1000000, 0, -89, "FlyToLocation");

        }

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

        // 创建三维对象 赵贺 2009.01.25.

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

        function _$SGCreateTEObj() {

            var obj = window.document.getElementById("TE");

            if (obj == null) {

                obj = document.createElement('object');

                document.body.appendChild(obj);

                obj.name = "TE";

                obj.id = "TE";

                obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";

            }

            return obj;

        }

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

        // 定义集合参数 赵贺 2009.01.25.

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

        function _$SGWorldParam() {

            this.x = 0;

            this.y = 0;

            this.h = 0;

            this.yaw = 0;

            this.pitch = 0;

            this.roll = 0;

            this.OID = 0;

            this.OType = 0;

        } 

    </script>

    <script type ="text/vbscript">

    '------------------------------------------------------------

    ' IPlane GetPosition 赵贺 2009.01.25.

    '------------------------------------------------------------

    sub GetPosition(param)

        Dim dx,dy,dh,dyaw,dpitch,droll,dcyaw,dcpitch

        Dim IPlane

        Set IPlane = TE.interface("IPlane5")

        IPlane.GetPosition dx,dy,dh,dyaw,dpitch,droll,dcyaw,dcpitch

        param.x = dx

        param.y = dy

        param.h = dh

        param.yaw = dyaw+dcyaw

        param.pitch = dpitch+dcpitch

        param.roll = droll

        param = dh

    end sub

    </script>

</head>

<body onload = "Init()">

    <form id="form1" runat="server">

    <div id = "Title">

        <input id="Button1" type="button" value="缩放" onclick = "ZoomFlyTo()" />

        <input id="Button2" type="button" value="定位" onclick = "RadomFlyTo()" />

        </div>

    <div id="Main">

        <object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"

            width="521" height="521">

        </object>

    </div>

    </form>

</body>

</html>

 

 

posted @ 2011-05-16 17:57 Itan 阅读(470) 评论(0) 编辑

Skyline TEP5.1.3二次开发入门——初级(一)

6.1  ITerraExplorer51

主要用来获取安装在客户端的Skyline软件的版本信息及设置的工程参数等信息;提供实现数据加载、保存和事件接口的初始化等方法;

下面是对ITerraExplorer51的属性和方法的概要说明:

Type

判断客户端使用的是Pro还是Viewer;

FlyName

返回当前工程中加载的FLY文件名,没有FLY文件则返回NO_FLY ;

DisplayErrorMessages

设置为false时,COM方法调用期间如果发生错误则不显示错误信息。反之,显示错误信息;

ProjectParam

FLY工程参数环境设置;

OptionParam

TerraExplorer参数环境设置;

Load

加载FLY文件;

SetCPUSavingMode

设置CPU保存模式;

GetUserUnits

获取客户端坐标系统的使用单位;

LoadEx

加载FLY文件,需要输入用户名和密码;

GetTEVersion

获取支持的软件版本;

Save

保存当前的工程到FLY文件中;

SaveAs

保存当前的工程到指定的FLY文件中,不支持TerraExplorer Viewer ;

SetParam

保留,当前不能使用;

GetParam

保留,当前不能使用;

AttachEvent

保留,当前不能使用;

DetachEvent

保留,当前不能使用;

 

代码示例:(操作系统:Windows XP SP3;代码调试环境VS2010,DotNet4.0,IE7,IIS6.0)

【C#】

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using TerraExplorerX;

 

namespace ExCodeProject

{

    public partial class Form1 : Form

    {

        private TerraExplorer TE;

        private ITerraExplorer51 TE51;

 

        public Form1()

        {

            InitializeComponent();

 

            this.TE = new TerraExplorerClass();

            this.TE51 = (ITerraExplorer51)TE;

 

            TE51.Load(Application.StartupPath+"\\Default.fly");

           

        }

    }

}

【javascript】

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>Skyline二次开发教程【配套示例】</title>   

    <script type ="text/javascript">

        function Init() {

            var TE = _$SGCreateTEObj();

            var ITerraExplorer = TE.interface("ITerraExplorer51");

            ITerraExplorer.Load("D:\\2010售前演示系统\\WPFA-DEMO\\WPFA-DEMO\\bin\\Debug\\FLY\\Default.fly");

        }

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

        // 创建三维对象 赵贺 2009.01.25.

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

        function _$SGCreateTEObj() {

            var obj = window.document.getElementById("TE");

            if (obj == null) {

                obj = document.createElement('object');

                document.body.appendChild(obj);

                obj.name = "TE";

                obj.id = "TE";

                obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";

            }

            return obj;

        }

    </script>

</head>

<body onload = "Init()">

    <form id="form1" runat="server">

    <div id = "Title"></div>

    <div id="Main">

        <object id="TerraExplorer3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1"

            width="521" height="521">

        </object>

    </div>

    </form>

</body>

</html>

 

 

 

posted @ 2011-05-16 17:54 Itan 阅读(447) 评论(0) 编辑

2011年5月11日 #

基于Skyline的TEP5.1.3实现对矢量SHP文件的加载和渲染

我们知道在Skyline的TEP软件中可以添加多种矢量图层,对于常见的SHP文件,我们如何通过接口来开发实现呢?

下面代码是基于C#开发的,供大家参考:

 

string XMLLayerInfo = "<PlugData><LayerName>" +
                        // 这里是要加载的shp文件所在的路径
                        Application.StartupPath + "//shp//DC_FF_Parks.shp" +
                        "</LayerName><PlugType>shape</PlugType><Annotation>0</Annotation><Feature>1</Feature>" +
                        "<AttributesToLoad>Name,County</AttributesToLoad>" + //这里是设置要加载的shp文件的属性字段
                        "<StreamedLayer>1</StreamedLayer></PlugData>";
                    iLyr = IInfoTree.CreateLayer("point", XMLLayerInfo, 0);
                    iLyr.Load();
                    iLyr.DisplayAs(ObjectTypeCode.OT_LABEL);
                    iLyr.SetFeature();
                    iLyr.SetValue("Text", PropertyValueType.PROPERTY_CLASSIFICATION, "<Classification FuncType='0'><Class><Value>[NAME]</Value></Class><DefaultValue>0</DefaultValue></Classification>");

                    //==Appearance
                    iLyr.SetProperty("Activation Action", 1);
                    iLyr.SetProperty("Line to Ground", 0);
                    iLyr.SetProperty("Line Length", 1000);
                    iLyr.SetProperty("Line Color", 300);
                    //==Text Options
                    iLyr.SetProperty("Text Color", 255);
                    iLyr.SetProperty("Text Size", 12);
                    iLyr.SetProperty("Font", "宋体");
                    iLyr.SetProperty("Bold", 1);
                    iLyr.SetProperty("Underline", 1);
                    iLyr.SetProperty("Italic", 1);
                    iLyr.SetProperty("Multiline Justification", 0);
                    iLyr.SetProperty("Background Color", 100);
                    iLyr.SetProperty("Background Opacity", 0);
                    iLyr.SetProperty("Lock Mode", 0);
                    //==Image Options           
                    iLyr.SetProperty("Image file", "C:\\Program Files\\Skyline\\TerraExplorer Pro\\Tools\\Data-Library\\Icons\\Letters\\Letter-a.gif");
                    //==Position
                    iLyr.SetProperty("Altitude Method", 1);
                    iLyr.SetProperty("Altitude", 1000);
                    iLyr.SetProperty("Yaw", 10);
                    iLyr.SetProperty("Pitch", 10);
                    iLyr.SetProperty("Roll", 10);
                    string[] myStrings = new string[9];
                    myStrings[0] = "0,0";
                    iLyr.SetProperty("Pivot Alignment", myStrings[0]);
                    //==Geometry
                    iLyr.SetProperty("Scale", 100);
                    iLyr.SetProperty("Limit Growth", 1);
                    iLyr.SetProperty("Min. Viewing Height", 100);
                    iLyr.SetProperty("Smallest Visible Size", 10);
                    //==Text&Image Alignment
                    iLyr.SetProperty("Text Relative to Image", 0);
                    iLyr.SetProperty("Text Alignment", myStrings[0]);
                    //==General
                    iLyr.SetProperty("Show In Basic", 0);
                    //---------------------------------------------------
                    ITerraExplorerMessage5 cMessage = null;
                    string tMessage = "Hello Skyline";
                    MsgType eMsgType = MsgType.TYPE_TEXT;
                    cMessage = IObjectManager.CreateMessage(MsgClient.CLIENT_POPUP, tMessage, eMsgType, _HTML_POPUP_FLAGS.HTML_POPUP_ALLOW_RESIZE, "属性信息", -1, 0, 0, 300, 300, 0);
                    iLyr.SetProperty("Message", cMessage.ID.Substring(cMessage.ID.IndexOf('_') + 1, (cMessage.ID.Length - cMessage.ID.IndexOf('_') - 1)));
                    //---------------------------------------------------
                    iLyr.SetProperty("Tool Tip", "公园");
                    iLyr.SetProperty("Default Viewing Distance", 1000);

 

说明:上面的代码实现了对点类型的SHP文件的加载和在三维场景中的渲染显示。

 

posted @ 2011-05-11 16:51 Itan 阅读(510) 评论(0) 编辑

2010年6月6日 #

如何在WPF中嵌入Skyline提供的三维控件

以VS2008开发工具以为:

1、创建Visual C# .NET framework 3.0 Windows Application(WPF) 工程
2、添加 reference 到 .NET 组件 WindowsFormsIntegration
3、添加 reference 到 .NET 组件 System.Windows.Forms
4、添加 reference 到 前面生成的Windows Form DLL
5、WPF提供了一个WindowsFormsHost类( 需要添加using System.Windows.Forms.Integration;)用来做Windows Form的容器,我们要用到的Form控件就必须放进这个容器里。我们可以在InitializeComponent()后添加:
WindowsFormsHost host = new WindowsFormsHost();
AxTerraExplorerX.AxTE3DWindow axTE3DWindow1 = new AxTerraExplorerX.AxTE3DWindow();
host.Child = axTE3DWindow1;      
this.TEWindow.Children.Add(host);
以上代码创建一个Windows Form容器,创建Windows Form控件,将控件添加到容器里,再将容器添加到Grid里,这样界面上就可以看到Form控件了,其布局将受到Grid的控制。

 

附后台完整代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Forms.Integration;  // 在WPF中使用ActiveX控件需要引用的类
using TerraExplorerX;  // Skyline提供的类

namespace WPFA_DEMO
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            WindowsFormsHost host = new WindowsFormsHost();
            AxTerraExplorerX.AxTE3DWindow axTE3DWindow1 = new AxTerraExplorerX.AxTE3DWindow();
            host.Child = axTE3DWindow1;     
            this.TEWindow.Children.Add(host);
        }

        private TerraExplorer TE;
        private ITerraExplorer51 TE51;

        private void LoadFLY()
        {
            this.TE = new TerraExplorerClass();
            this.TE51 = (ITerraExplorer51)TE;
            this.TE51.Load(@"C:\izhaohe\skyline.fly");

            this.TE.OnLoadFinished += new _ITerraExplorerEvents5_OnLoadFinishedEventHandler(TE_OnLoadFinished);
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            LoadFLY();
        }

        void TE_OnLoadFinished()
        {
            //MessageBox.Show("ok");            
        }

    }
}

 

posted @ 2010-06-06 16:41 Itan 阅读(535) 评论(0) 编辑

My Links

Blog Stats

News

搜索

 
 

常用链接

我的标签

随笔分类

随笔档案

我自己的网站

最新评论

阅读排行榜

评论排行榜

推荐排行榜