Skyline Globe中3dml图层的遍历

cesium 新建模型_TerraExplorer Pro 7.2版本输出的3D Tiles模型如何在Cesium中使用? 在TerraExplorer Pro 7.2版本中,增加了三维模型导出功能,能够将3DML模型导出成Cesium支持的3D Tiles和Esri支持的I3S格式,方便大家做三维模型(包括传统人工模型、BIM、倾斜实景三维模型等)的共享服务。随着这几年基于Cesium应用项目的增多,这个功能也更方便大家将以前3dml格式的成果数据转移到新的项目中来应用,同时也简化了模型的处理流程,更易于应... 阅读详情

在Skyline从6.5版本之后支持以3dml的方式加载模型,3dml的格式相比之前的xpl和xpl2发布的格式渲染的效率更高,在加载海量模型的场景时非常的实用。

在Skyline开发中经常会需要寻找符合条件的场景对象,skyline的模型种类非常繁多,可以根据不同的模型类型来遍历搜索场景。本文主要介绍一下3dml图层在遍历时候的方式。

3dml的图层在Skyline中使用 IMeshLayer66 来表示,当加载3dml的图层之后,遍历场景树的时候,会发现3dml的图层类型是:OT_3D_MESH_LAYER 另外还有一种类型是OT_3D_MESH_FEATURE_LAYER 这个实际上是OT_3D_MESH_LAYER下面真正的图层。

遍历skyline的场景树结构时,可以使用递归的方式进行遍历,类似于下面的代码:

        public  void IteratorProjectTree(string tParentItemID)
        {
            string tItemID = _sgWorld.ProjectTree.GetNextItem(tParentItemID, ItemCode.CHILD);

            if (tItemID == "") return null;

            while (tItemID != "")
            {
                if (_sgWorld.ProjectTree.IsGroup(tItemID) == true)
                {
                    if (某种条件)
                    {
                        //Do your stuff
                    }

                    IteratorProjectTree(tItemID);
                }
                else
                {
                    //do your stuff

                    tItemID = _sgWorld.ProjectTree.GetNextItem(tItemID, ItemCode.NEXT);
                }

            }
        }

3dml格式的文件从本质上来说是属于Feature类型的(它遍历到最小的单元就是一个IFeature),说到IFeature就不得不提在没有引入3dml格式之前的skyline版本的FeatureLayer,在Skyline中(以skyline6.6为例),FeatureLayer直接可以实现遍历,通过它提供的方法和属性,方式如下:

IFeatureLayer66 ---> IFeatureGroups66 --->IFeatureGroup66--->IFeatures66--->IFeature66

这一条链基本上前一个类中有获取后一个类的方式,前一个类提供了一个数组来保存后一个类的对象。

但是在3dml中并没有这种方式,在接口中
IMeshLayer66提供了获取I3DMLFeatureLayers66的方式,在通过I3DMLFeatureLayers66获取到I3DMLFeatureLayer66,之后I3DMLFeatureLayer66并不提供FeatureGroups的方式进一步向下遍历,它的成员如下:

这里写图片描述

提供的属性SelectedFeatures仅仅可以获取当前选中的要素,如果没有被选中那么得到的要素节点是空的。在遍历的过程中很显然不会去选中所有的要素。

在详细阅读完文档之后,发现了这个类提供的方法

IFeatures66 ExecuteSpatialQuery(
       IGeometry pIGeometry,
       [IntersectionType IntersectionType = IntersectionType.IT_INTERSECT])

可以做到这一点,这个方式是在图层中查询满足要求的要素,在skyline中可以设置一个全球的坐标,让场景中所有的要素落入其中,这样就可以获取到所有该图层的要素了,具体实现方式如下:

                            IMeshLayer66 fl = (IMeshLayer66)3dmloj;
                            for (int i = 0; i < fl.FeatureLayers.Count; ++i)
                            {
                                I3DMLFeatureLayer66 ifl66 = (I3DMLFeatureLayer66)fl.FeatureLayers[i];

                                IGeometry cPolygonGeometry = null;
                                double[]  cVerticesArray = new double[] {
                                    -180,  -90,   10,
                                    180,  -90,  10,
                                    180,  90,  10,
                                    -180,  90,  10,
                                };
                                ILinearRing cRing = _sgWorld.Creator.GeometryCreator.CreateLinearRingGeometry(cVerticesArray);
                                cPolygonGeometry = _sgWorld.Creator.GeometryCreator.CreatePolygonGeometry(cRing, null);

                                IFeatures66 allFeaturesInCurrent3DMLayer = ifl66.ExecuteSpatialQuery(cPolygonGeometry);

因为设置的坐标是经纬度在(-180,180)(-90,90)所以场景中的要素必然落入其中,用这种方法变相的完成了获取到场景中的3dml要素。(补充:在测试过几个场景之后,发现坐标位置使用(-180,180)(-90,90)的时候有时候求交不到,改为比求交区域稍微大一点的多边形之后,每次都可以求交正确【高程的参数无关紧要,可以设置为0】,因此项目中建议使用一个比我们场景区域稍大一点的多边形作求交即可)

3D MAX模型批量导出加载到Skyline的操作流程 描述3DMAX导入到skyline的详细操作流程,包括导入前的模型标准化检查,导入过程操作,以及导入到skyline后的优化操作。 立即下载

相关推荐

dreamerv3复现教程

由于dreamerv3存在很多版本冲突问题,所以很难直接使用和复现。

无人机飞啊飞啊飞 2837

Skyline 3dm格式l数据困惑

自从Skyline 发布6.5版本以后,推出了新的数据格式3dml,可以通过Pro的Make 3DML 工具,或者单独的CityBuilder工具把一般的模型图层生成3dml图层。 所谓3dml图层实际是把模型打包生成一整块的三角网,生成以后不能编辑。3dml图层的优势在于加载快速,模型显示范围大,比起流方式能迅速的加载当前范围的模型,而且模型不会消失,只是根据距离...

bangrennie5907的博客 468

模拟电子课设-半导体直流稳压电源的设计和测试

1、学习直流稳压电源的设计方法; 2、研究直流稳压电源的设计方案; 3、掌握直流稳压电路的调试及主要指标的测试方法。二、设计要求和技术指标 1、设计要求1)、设计一个能输出5V-12V连续可调的直流稳压电源,或±12V的直流稳压电源; 2)、根据设计要求和技术指标设计好电路,选好元件及参数,要求绘出原理图,并用Protel 99SE/DXP画出印制板图; 3)、在万能板或面包板上制作一台直流稳压电源; 4)、测量直流稳压电源的稳压系数; 5)、测量直流稳压电源的内阻; 6)、拟定测试方案和设计步

GJZGRB的博客 1971

3dml发布解决方案

1、基于java web架构实现,稳定可靠 2、数据接口符合skyline的3dml模型网络发布形式 3、通过简单的发布界面,直接发布3dml模型 4、可直接实现在te客户端加载数据 5、完全支持在te客户端的查询、分析功能 6、单机多进程部署,支持单机多服务端(不同于skyline的iis部署 7、云架构部署 8、多机器负载均衡解决方案 9、其他方式存储3dml数据(根据要求实现) 数据连接样例...

地理信息技术杂谈 博客,欢迎技术交流 1853

驱动兼容_FANUC 驱动器兼容问题探讨

近10年来,FANUC伺服驱动器随着系统的升级而升级,不同的系统,可以兼容很多种类的驱动器,作者做了一些常见经验总结如下表:电源模块伺服放大器主轴放大器bi一体18i/OIB/OIC6110-Hxxx6114-Hxxx6111-Hxxx6134-Hxxx31iA/OID6140-Hxxx6117-Hxxx6141-Hxxx6164-Hxxx31IB/35IB/OIF/OI MATE D(5包)62...

weixin_34420941的博客 1751

0 基础学前端:100 天拿 offer 实战课(第 16 天)—— JS 数组高级方法:数据处理效率翻倍,代码更简洁

方法名核心作用回调函数返回值返回结果适用场景map数据转换转换后的新元素新数组(长度与原数组一致)格式转换、新增字段、生成 DOM 字符串filter数据筛选true(保留)/false(过滤)新数组(符合条件的元素)筛选符合条件的元素(如未完成计划、今天的评论)reduce数据汇总新的累加值任意类型(数字、对象等)求和、计数、分组、多数据汇总find查找元素true(匹配)/false(不匹配)第一个匹配的元素 /undefined。

苏打水.X的博客 135

倾斜摄影OSGB转Skyline 3dml文件

研发效果通过网上一通搜索,发现Skyline的3dml居然是个开源的格式,于是奋力一段时间后,终于把3dml格式的转换给实现了,不但一键生成3dml格式,而且能兼容各种倾斜摄影OSGB,在转换速度上也是发扬倾斜伴侣一贯的风格:速度快,功能多。最近有不少用户反馈,用TerraExplorer pro将倾斜摄影osgb数据转成3dml,不但操作繁琐,而且有些实景三维软件生产的osgb数据,无法转成3dml,或者即使能转,也存在效果问题。

weixin_69518140的博客 861

华为OD机试真题 新系统2026-04-15 C++ 实现【失灵的键盘】

有一个键盘有2个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下: 1. 按下j键一次,屏幕上显示uu(两个连续的u);  按下b键一次,屏幕上显示t(两个连续的t) 2. u键和t键是好的,按下u键一次时,屏幕只会显示一次u(正常按键);按下t键一次时,屏幕只会显示一次t(正常按键) 3. 假定屏幕上连续显示两个t一定是按了一次b键,而不是两次t键;假定按键t之后不会紧接着按键b,即tttt转义为两个b,而不可能是tb

MISAYAONE的博客 212

skyline开发:批量加载发布3dml模型

在TE的二次开发过程中,把3dml模型用sfs或者sgs发布完成后,如何获取到sfs或者sgs上发布的模型列表,使用一定的规则对模型进行加载,灵活的控制模型图层。 下边列举一下具体过程: 1、通过TE的网络请求,发现获取模型列表的数据服务地址为:http://ip地址或者localhost/SG/streamer.ashx?request=GetCapabilities&amp;service=...

地理信息技术杂谈 博客,欢迎技术交流 1747

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 475

Skyline Web 二次开发-部署、发布、浏览

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34174132的博客 1597

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

1-3DML语言与INsert注入逻辑

1.什么DML? DML:数据操作语言(data manipulation language) 功能:主要是对表、视图等对象进行查询、插入、更新和删除操作,如果我们没有特殊的说明,主要是对表的操作 包括: SELECT 查询 INSERT 插入 UPDATE 更新 DELETE 删除 实战演示 打开kali的终端,输入mysql -uroot,访问mysql数据库 我们这篇文章演示要用到一个示例的数据库,我们自己创一个数据库。create database hxf default charset utf8

山兔的博客 901

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Skyline 服务器 新增.3DML文件,通过FLY文件接入使用

最近接收到一批.3DML三维模型,应用于新的需求。 原有的系统架构是:三维模型和shapefile文件都发布于Skyline服务器,客户端fly文件通过用户名,按照所属权限访问这些模型数据。客户端具有IE浏览器插件,并开发了相关HTML+JS工程文件。 原有系统需要继续使用(即不能修改原有fly文件),新的需求要用新的界面和fly文件。 我的处...

aganliang的专栏 1917

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

GIS开发:TE7.2支持3D Tiles和I3S

Skyline新发布的TERRAEXPLORER FOR DESKTOP 7.2,支持将Skyline格式的三维模型数据(3DML),导出成Cesium的3D Tiles格式,同时支持导出成Arcgis webgl三维的 I3S格式模型数据。 支持在TERRAEXPLORER FOR DESKTOP 7.2中加载3D Tiles格式的模型数据,导出成Skyline的三维模型数据格式(3DML)。 此功能需要Skyline的授权才能进行使用,可以从官方申请试用版的许可,测试相对应功能。 这对Cesium开发

地理信息技术杂谈 博客,欢迎技术交流 1375

SkylineGlobeServer

SkylineGlobeServer 是 B3DM 服务

PHP代码的博客 382

Skyline Globe——初识庐山真面目

  被问及如何实现将三维模型导入Skyline场景。所以花了一个下午研究了一下。   首先是Skyline Globe的产品,包括三个部分:TerraBuilder、TerraExplorer、TerraGate三个部分。 TerraBuilder:负责背景影像的压缩,采用的小波算法,可以生产MPT文件。 TerraExplorer:发布三维场景fly,可以加载MPT、和矢量要素(shp)和...

weixin_34262482的博客 360

倾斜摄影数据OSGB转换成3DML(转载)

工具/原料 skyline CityBuilder 方法/步骤 确定手中的osgb数据文件夹符合命名规则,如下图 打开CityBuilder(软件许可目前只能申请试用),在工具栏Mesh Layer的下拉选项中选择Import OSGB Layer,弹出相应对话框,在对话框Input folder后的Browse选择上图中的上级文件夹,选择后对话框中的后两项会自动填充,将Metedat...

weixin_33809981的博客 2352

skyline 3dml刷不出来解决办法

在TEPro中,加载了3dml模型之后,有时候会出现模型刷不出来,按如下操作: 新建一个“Tree Message”对象,在类型中选择“Script”, 添加代码(V6): SGWorld.SetParam 8020,2000000 SGWorld.SetParam 8021,2000000 或者添加代码(V7) <script type = "Java...

shendygis的专栏 867

解决Skyline 6.5版本中3DML模型单体化后外部网页挂接问题

解决Skyline 6.5版本中3DML模型单体化后外部网页挂接问题

weixinhmz的博客 222

Skyline开发:如何开发3dml模型服务系列技术内容

Skyline开发:如何开发3dml模型服务(一) Skyline开发:如何开发3dml模型服务(二) 公众号正在连载中,喜欢的可以关注:

地理信息技术杂谈 博客,欢迎技术交流 508

CityBuilder导入倾斜数据OSGB,生成3DML常见问题解决

1、打开CityBuilder,在工具栏Mesh Layer的下拉选项中选择Import OSGB Layer,弹出相应对话框。2、在对话框Input folder后的Browse选择上图中的上级文件夹,选择后对话框中的后两项会自动填充,将Metedata file后的内容删除,单击确定,则数据开始转换...

fanquanlong的博客 7625

DML数据库操作语言

DML语言 数据操作语言: 插入:insert 修改:update 删除:delete #一、插入语句 #方式一:经典的插入 /* 语法: insert into 表名(列名,...) values(值1,...); */ SELECT * FROM beauty; #1.插入的值的类型要与列的类型一致或兼容 INSERT INTO beauty(i...

388
上一篇: OSG动画库Animation解析(三)
下一篇: OSG在事件处理中由于模态对话框导致后续事件出错的问题
csxiaoshui
博客等级 码龄16年 873粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值