如何快速学好terraexplorer pro二次开发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何快速学好terraexplorer pro二次开发相关的知识,希望对你有一定的参考价值。
1、学习开发之前一定要熟悉terraexplorer pro的操作。二次开发都是操作的模仿,只有熟悉了操作你才会知道如何设定参数以及使用这个接口。举个例子,我每次写威胁分析的那个接口都设定不好参数,这时候我就到pro里随便建立个威胁分析对象,把参数搬过来。2、不能盲目的入手,在写代码之前一定要搞清楚自己要干什么,是要做cs的还是bs的,要实现什么功能,或者学习什么功能。不同的目的入口点是有很大差别的。要先区分。
3、学软件要先学软件本身,试着去看看skyline安装目录里有什么:...\Tools\Data-Library里是模型,Tools里面有个ToolsCommon.js,如果是bs开发,你搞懂了这个js里的内容,那么你直接引用进来,onframe,buttondown,buttonup的一些事件是不用手写的,直接有,不过前提是,你懂了这看懂了这个js里的内容。
4、软件自带的帮助是在软件安装目录的Help文件夹里,哪怕你安装的是view,这里面也会有3个帮助文件ProgrammersGuide.chm就是完整的帮助文档。 参考技术A TerraExplorer Pro用来浏览由TerraBuilder创建的三维地形场景MPT或直连工程TBP,并能够进行空间分析、对象编辑、图层叠加等操作。
如有疑问追问,如满意记得~~,
如果有其他问题也可点我名字向我求助
答题不易,
如果没有回答完全,请您谅解,
请~~最快回答的正确答案!!谢谢!
Skyline(6.x)-Web二次开发-1多窗口对比
一个页面加载多个TerraExplorer3DWindow和SGWorld等只有第一个能用(即使用iframe也是一样)
所以我决定打开两个新页面实现多窗口对比,然后我在《主页面》使用window.open打开了两个《新页面》,但这两个新页面使用SGWorld时居然在主页面(使用window.open的页面)产生了效果,感觉和以前的一个页面加载多个TerraExplorer3DWindow 和 SGWorld效果一样了!!!
然后经过测试发现关闭主页面新页面就正常加载三维地图了。可以看出使用window.open时主页面和新页面是有关联的,我一开始试了很多方法都断不开这个关联,最后决定打开新页面时多打开一个主页面,然后关掉主页面这种笨方法。
当使用window.close当前关闭窗口,居然没有关上,我一搜发现了关闭前有这一行代码window.opener=null
opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用。
opener 属性非常有用,创建的窗口可以引用创建它的窗口所定义的属性和函数。
断开主页面和新页面关联的方法找到了!!!
总结:
使用window.open打开两个窗口,然后设置window.opener为null,这样就可以在不同窗口中打开三维场景了。
修正:
今天又测试一下设置window.opener为null不好使,还是使用将主页面关闭这种方法吧=_=
//遍历工程树,将所有的layer图层、图层名都存放在数组中
var players=new Array();
var playersName=new Array();
function BuildTreeRecursive(current) {
try{
while (current > 0) {
itemName = SGWorld.ProjectTree.GetItemName(current);
if (itemName != "地形修改" && itemName != "位置" && itemName != "PresentationRoute") {
if (SGWorld.ProjectTree.IsGroup(current)) {
if (SGWorld.ProjectTree.IsLayer(current)) {
var name = SGWorld.ProjectTree.GetItemName(current);
var layer = SGWorld.ProjectTree.GetLayer(current);
playersName[playersName.length] = name;
players[players.length] = layer;
}
else {
var childItem = SGWorld.ProjectTree.GetNextItem(current, 11);//CHILD – 11,The first child item of ItemID.
BuildTreeRecursive(childItem);
}
}
}
current = SGWorld.ProjectTree.GetNextItem(current, 13);
}
}
catch (e) { alert(e)}
}
//下面是根据工程树中layer图层的名字获取layer
function GetLayerByLayerGroupName(layerGroupName) {
if (playersName.length>0) {
for (i = 0; i < playersName.length; i++) {
if (playersName[i] == layerGroupName)
return players[i];
}
}
else { alert("图层名数组为空,请检查TR.BuildTreeRecursive()方法是否执行"); }
};
以上是关于如何快速学好terraexplorer pro二次开发的主要内容,如果未能解决你的问题,请参考以下文章