千家信息网

TE二次开发中如何遍历信息树

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要为大家展示了"TE二次开发中如何遍历信息树",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"TE二次开发中如何遍历信息树"这篇文章吧。TE自带的信
千家信息网最后更新 2025年01月31日TE二次开发中如何遍历信息树

这篇文章主要为大家展示了"TE二次开发中如何遍历信息树",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"TE二次开发中如何遍历信息树"这篇文章吧。

TE自带的信息树控件,包含了fly工程的位置、演示、图层和其他单个元素,在信息树中,是按照树结构进行摆放的,要想在开发中,获取树中的所有对象,或者查找树中的某一个对象,需要使用开发接口,对信息树进行遍历,在程序中,对树结构遍历少不了要用递归算法,在TE的信息树遍历中,这也是需要的。

下边根据一个js的代码,简单说一下,在开发中如何遍历信息树:

//首先要指定遍历的根节点,这个可以是整个工程的根节点,也可以是信息树中

//某个文件夹的id,在js可以使用回调函数,执行外部的一些操作

function searchGeometries2(parentNode, callbackFunc) {

//EnableRedraw是控制信息树中内容发生变化时,是否实施刷新

SGWorld.ProjectTree.EnableRedraw(0);

searchGeometriesLeaf2(parentNode, callbackFunc);

SGWorld.ProjectTree.EnableRedraw(1);

}

function searchGeometriesLeaf2(parentNode, callbackFunc) {

//此例子是搜索到图层,判断图层中的内容

if (SGWorld.ProjectTree.IsLayer(parentNode)) // Layer

{

//关于图层中的feature操作

var layer = SGWorld.ProjectTree.GetLayer(parentNode);

var featureGroups = layer.FeatureGroups;

for (var i = 0; i < featureGroups.Count; i++) // Traverse all sub-layers

{

var featureGroup = featureGroups.Item(i);

var altitudeType = AltitudeMethodToAltitudeType(featureGroup.GetProperty("Altitude Method"));

var features = featureGroup.Features;

for (var j = 0; j < features.Count; j++) {

var ret;

if (featureGroup.GeometryType != 0)

ret = callbackFunc(features.Item(j).Geometry, featureGroup.GeometryType, altitudeType);

else {

if (features.Item(j).Geometry.GeometryType == 0) // Point

{

var position = SGWorld.Creator.CreatePosition(features.Item(j).Geometry.X, features.Item(j).Geometry.Y, features.Item(j).Geometry.Z);

ret = callbackFunc(position, featureGroup.GeometryType, altitudeType);

}

}

if (!ret)

return;

}

}

}

else {

//根据参数,获得下一个信息树的节点,后参数见api文档

var node = SGWorld.ProjectTree.GetNextItem(parentNode, 11);

while (node != "") {

//判断是不是文件夹,文件夹中还要继续循环

if (SGWorld.ProjectTree.IsGroup(node) || SGWorld.ProjectTree.IsLayer(node))

//递归调用继续查找

searchGeometriesLeaf2(node, callbackFunc);

else {

//单个对象的处理方式

var Object = SGWorld.Creator.GetObject(node);

if (Object != null) {

var altitudeType = Object.Position.AltitudeType;

var ret;

if (Object.ObjectType == 1 || Object.ObjectType == 2)

ret = callbackFunc(Object.Geometry, Object.ObjectType, altitudeType, Object.Position);

else

ret = callbackFunc(Object.Position, Object.ObjectType, altitudeType, Object.Position);

if (!ret)

return;

}

}

//根据参数,获得下一个信息树的节点 ,后参数见api文档

node = SGWorld.ProjectTree.GetNextItem(node, 13);

}

}

}

以上是"TE二次开发中如何遍历信息树"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

信息 开发 内容 参数 节点 对象 文件 文件夹 篇文章 单个 工程 文档 结构 得下 递归 学习 帮助 少不了 代码 位置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 穿越火线服务器能不能换 中国网络安全系网警 网络技术报文区分大小写 网络安全法相关图片 数据库版本查看语句 查找个数最多的数据库 如何租用阿里云服务器 基于数据什么特性数据库得以发展 郧阳区互联网软件开发服务保障 服务器主板报警五短一长 请简述什么是云服务器 石门软件开发专业学校 网络信息交流和网络安全 数据库er模型设计内容主题 互联网科技刊 数据库表的关键字 北京优雅施软件开发服务中心 软件开发产品生产计划 为什么软件开发比国外有多少 cod16服务器拒绝连线请求 每个人远程连接服务器的分辨率 广东新一代网络技术开发工艺 网络技术员转销售 了解应用软件开发 服务器如何添加本机管理员 网络安全工程师在什么网校报名 厦门软件开发外包公司哪家好 数据库设计三大范式举例 问鼎网络技术有限公司 电脑连服务器管理口
0