Skyline Te Pro二次开发技能总结
前两天项目开发中,忽然一个Imagelabel的参数不会调了,但是前段时间可是很熟悉的。好吧,好记性不如烂笔头!
1. 模型弹出窗调试
这里的模型弹出框指涉及到模型操作的,比如监听模型选定事件、根据窗口数据定位模型等,或者说是需要关联模型对象的窗口。
<object id="sgworld" classid="clsid:3a4f9199-65a8-11d5-85c1-0001023952c1" style="visibility: hidden; height: 0"></object>
由于使用Te插件API弹出的窗口,无法直接通过浏览器F12进行调试,因此我们通常使用下面两种方式。

- 浏览器 + Te Pro
桌面Te打开对应的模型FLY文件,浏览器直接访问弹出窗口,这样弹出窗口直接获取到桌面Te的模型对象,就可以实现通过浏览器F12窗口对弹出窗口的调试。

- 浏览器 + Visual Studio
另外一种方式,在Javascript代码中添加debugger预设断点。执行到断点处,程序提示选用Visual Studio进行弹出窗口内代码调试。


缓存清理:Te插件中的弹出窗口,如果发现普通的清理缓存方法无效时,需要清理浏览器缓存文件

3. FLY更新
如果同名FLY更新发布的服务器后,发现加载的还是以前的FLY文件,同样需要使用上面提到的缓存清理办法。不管是桌面TE打开FLY还是浏览器页面加载FLY,上面的缓存清理办法同样有效。
4. ImageLabel缩放比例
ImageLabel标签可以通过设置Scale控制图片显示比例,达到最好的显示效果,避免出现很远就看到标签或者很近时标签很大的情况。

5. 透明窗体
通过TE插件的弹出窗口APIWindow.ShowPopup无法直接弹出具有透明背景的弹出框:
- TE插件的弹出窗口API
Window.ShowPopup弹出普通HTML窗口:无法实现,IPopupMessage701无接口支持 - 在Te插件
<object>所在html页面,增加iframe,普通div会被插件遮盖。这种方式虽然可以在模型上方覆盖html窗口,但是无法设置背景透明。网上提供的
Iframe设置allowtransparency="true"
src链接页面body设置background="transparent"
均无效。
<div id="tool" style="width: 100%; background-color: transparent;">
<iframe id="toolbar" name="toolbar"
style="position: absolute; visibility: inherit; top: 0px; left: 6px; height: 30px; width: 100%; z-Index: 9999;background-color:transparent;"
allowtransparency="true"
src="toolbartest.html"></iframe>
</div>
<object id="TerraExplorer3DWindowEx" classid="CLSID:3a4f9196-65a8-11d5-85c1-0001023952c1"
style="position:absolute;left: 0px; top: 0px; right: 0px; bottom: 0px;width:100%;height:100%"></object>
- 透明窗体插件
使用泰瑞提供的另外一个网页透明窗体插件可以实现透明窗体。
6. Feature渲染
Feature渲染是经常用到的一个操作,比如鼠标悬浮、选定等事件,一般都是通过修改Feature颜色实现。但是Feature的获取依赖于FLY中添加图层,分为3dml和shp,不同图层feature获取方法如下:
function getFeature(sgworld, layerId, featureId) {
try {
var layer = sgworld.ProjectTree.GetObject(layerId);
var feature = null;
//shp图层
if (layer.ObjectType === 36) {
feature = layer.FeatureGroups.Item(0).ExecuteGetDataSourceFeatureIdQuery(featureId);
}
//3dml mesh feature图层
else if (layer.ObjectType === 39) {
feature = layer.ExecuteGetDataSourceFeatureIdQuery(featureId);
}
//3dml mesh 图层
else if (layer.ObjectType === 38) {
feature = layer.FeatureLayers.Item(0).ExecuteGetDataSourceFeatureIdQuery(featureId);
}
return feature;
} catch (e) {
return null;
}
}
7. 视频插件不兼容
海康视频可以通过单窗口url功能,通过模型的接口IWindow701.ShowPopup直接弹出视频画面。但是由于Te6.6插件是32位版本,Te7.0.1只支持64位。因此可以在Te6.6版本正常使用,Te7.0.1无法正常弹出。
无法直接接入,需要使用EasyDarwin等视频服务器进行转发,然后通过JS插件进行播放。项目中使用过ckplayerJS插件,存在的问题是支持H.264视频格式,不支持H.265视频格式。
最后还使用过EasyDarwin+VLC插件的方案,但是VLC插件易卡死的问题也没有解决。
目前方案:Te7.0.1 + 海康单窗口URL + 弹出浏览器Tab页
8. TePro操作分类
其实不管在二维地图中还是三维模型中,我们抛开业务后,操作逻辑也就那么几种。所以,我们刚做三维时,使用的基础平台不成熟,有很多厂家来推销平台。我们在选择平台的标准,平台是否支持三种基本的操作逻辑:
;根据数据查模型,要求平台提供根据标识信息查询、操作对应模型对象的能力;空间查询,平台支持根据空间点位信息查询区域内设备。这是我们在三维平台中要求支持三种基本操作。
- 根据模型查数据
要求平台能够支持单个模型对象的选择,并能够在事件响应中获取模型对象的ID等标识信息。当然这里的对象ID最好是建模人员建模时生成的,这样可以保证关联信息的稳定性。如果使用平台自动生成的ID,则每次更新发布模型,ID都会发生变化,关联信息的维护将会耗费很大精力。

- 根据数据查模型
要求平台提供API支持根据模型的标识ID等信息,进行模型的操作,比如显示隐藏和修改色彩、大小、位置等,这样便于实现二三维联动功能、数据驱动模型渲染的功能。

- 区域查询
区域查询,在二维地图中我们是画一个面查询面内的兴趣点,在空间中我们可以根据业务需要,画一个面查询投影到该面内的模型对象,或者画一个立体图形查询根据该空间相关的模型对象。

9. ObjectID,LayerID,FeatureID,BimID,GroupPath
- ObjectID:图层添加到FLY文件时,自动生成的模型对象ID,每次重新添加图层都会发生变化,Te插件接口
ITerraExplorerObject701.ID。 - LayerID:图层添加到FLY文件时,自动生成的图层对象ID,每次重新添加图层都会发生变化,Te插件接口
IFeatureLayer701.ID或I3DMLFeatureLayer701.ID。 - FeatureID:建模人员导出模型时,自动生成的模型对象序号(0-n),同一模型文件内唯一,建模软件中增加、删除模型后导出时会发生变化,非增删类修改或者重新导出不会发生变化,Te插件接口
IFeature701.DataSourceFeatureID。 - BimID:建模人员建模时,自动生成的模型对象唯一标识,后续修改、导出不会发生变化,Te插件无直接对应的接口,一般可以通过
IFeature701.FeatureAttributes.GetFeatureAttribute("FileName").Value,其中包含BimID。
Skyline Te Pro二次开发技能总结的更多相关文章
- Skyline 7 版本TerraExplorer Pro二次开发快速入门
年底了,给大家整理了一下Skyline 7版本的二次开发学习初级入门教程,献给那些喜欢学习的年轻朋友. 我这整理的是Web控件版本的开发示例,里面页面代码保存成html,都可以直接运行的. 测试使用的 ...
- ArcGIS Pro 二次开发
本文基于 Windows7 + VS2019 + .NET Framework 4.8 + ArcGIS Pro 2.5.22081 开发和撰写. 目录 开发环境配置 获取ArcGIS Pro 安装V ...
- [地图SkyLine二次开发]框架(1)
项目介绍: 项目是三维地理信息系统的开发,框架MVC4.0 + EF5.0 + Extjs4.2 + SkyLine + Arcgis,是对SkyLine的二次开发. 项目快结束了,先给大家看一眼效果 ...
- 23 Pro/E二次开发中的问题记录
0 引言 由于项目中涉及到Pro/E的二次开发技术,因此在边用边学的情况下,解决了不少问题,也积攒了不少问题.其中有些问题可能不是调个函数就能搞定的,得了解CAD底层的东西. 1 问题描述 (1)CA ...
- 解析大型.NET ERP系统 窗体、查询、报表二次开发
详细介绍Enterprise Solution 二次开发的流程步骤,主要包括数据输入窗体(Entry Form),查询(Query/Enquiry),报表(Report)三个重要的二次开发项目. 数据 ...
- Skyline TerraExplorer Pro(等ActiveX控件)在Google Chrome浏览器的运行方法
首先感谢ActiveX for Chrome 网银助手(np-activex)这个项目(https://code.google.com/p/np-activex/),解决了我们困惑很久的问题——在Ch ...
- Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
关于QGis的二次开发,大致看了一下,基本都是在VC+QT的环境下做环境部署,并且QGis的版本号很老.在mingw下直接开发搭建好开发环境的样例少之又少.基于最新的Qgis2.4.0版本号做了对应的 ...
- JBuss--为所有JFinal开发者提供二次开发的后台管理系统
百度搜索:JBuss 或jfinal.com官网https://www.jfinal.com/share/1704 JBuss背景: 2018年6月1日,作者“为道日损”从上海一家xxx公司离职,那时 ...
- GISer如何突破二次开发瓶颈
年初时写的<一个GISer的使命>那篇文章中,提出了GISer的技术提升路径可以分为四个大的阶段: 阶段一,能使用商业GIS软件去解决问题. 阶段二,能使用开源GIS软件去解决问题. 阶段 ...
随机推荐
- Tomcat 8.0的并发优化 - 优化server.xml的配置
目录 1 Tomcat的3种运行模式 1.1 BIO - 同步阻塞IO模式 1.2 NIO - 同步非阻塞IO模式 1.3 APR - 可移植运行时模式 2 Tomcat的并发配置(配置Connect ...
- mqtt服务器apollo的搭建和测试工具paho的使用
(1)前言 MQTT协议是IBM开发的一个即时通讯协议; 基于发布/订阅的消息协议,近些年来被广泛应用于能源.电力.....等硬件性能低下的远程设备,此外国内很多企业使用MQTT作为android手机 ...
- javascript入门篇(四)
Break 和 Continue 语句 break 它常用于跳出 switch() 语句, break 语句也可用于跳出循环.break 语句跳出循环后,会继续执行该循环之后的代码(如果有的话) co ...
- angular开发环境搭建及新建项目
最近一个星期准备学习一下angular前端框架,因为之前在学习abp框架的时候,都要求前端要掌握angular,所以不得不回来恶补一下了,学习的过程有时间的话会记录在这里,方便以后复习. 闲言少叙,下 ...
- ajax调用WebAPI添加数据
//获取账号名 var Name = document.getElementById("Text1").value;//获取密码 var Pass = document.getEl ...
- 内置对象Cookie和Session有何不同【常见面试题】
我们在面试的时候,时常会被问到Cookie和Session的区别,对于初学者来说,有时候会混淆这两个内置对象.下面就我自己的理解,对这2个内置对象进行剖析. 1.Session对象存在Web服务器端, ...
- vue之$root,$parent
$root vue状态管理使用vuex,如果项目不大,逻辑不多,name我们没必要用vuex给项目增加难度,只需要用$root设置vue实例的data就行了,如下 main.js new Vue({ ...
- 涨姿势:抛弃字母、数字和下划线写SHELL
PHP中异或 (^) 的概念 <?php echo"A"^"?";?> <?php echo"A"^"?&quo ...
- sublime实现markdown浏览器预览
效果预览 实现 首先下载插件OmniMarkupPreviewer 方法:ctrl + shift + P 安装完成后搜索'OmniMarkupPreviewer'双击即可 下载完成后新建.md文件 ...
- SQL Server 数据库部分常用语句小结(三)
21.SQL运行Log的读取 .EXEC xp_readerrorlog 0,1,null,null,'开始时间','结束时间' 22. Alwayson 状况及传输情况监控 SELECT ar.re ...