zoukankan      html  css  js  c++  java
  • Skyline Te Pro二次开发技能总结

    前两天项目开发中,忽然一个Imagelabel的参数不会调了,但是前段时间可是很熟悉的。好吧,好记性不如烂笔头!

    1. 模型弹出窗调试

    这里的模型弹出框指涉及到模型操作的,比如监听模型选定事件、根据窗口数据定位模型等,或者说是需要关联模型对象的窗口。

    <object id="sgworld" classid="clsid:3a4f9199-65a8-11d5-85c1-0001023952c1" style="visibility: hidden; height: 0"></object>
    

    由于使用Te插件API弹出的窗口,无法直接通过浏览器F12进行调试,因此我们通常使用下面两种方式。

    调试目标窗口.png

    • 浏览器 + Te Pro

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

    浏览器+TE调试.png

    • 浏览器 + Visual Studio

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

    预设断点调试.png

    预设断点调试2.png

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

    删除缓存文件.png

    3. FLY更新

    如果同名FLY更新发布的服务器后,发现加载的还是以前的FLY文件,同样需要使用上面提到的缓存清理办法。不管是桌面TE打开FLY还是浏览器页面加载FLY,上面的缓存清理办法同样有效。

    4. ImageLabel缩放比例

    ImageLabel标签可以通过设置Scale控制图片显示比例,达到最好的显示效果,避免出现很远就看到标签或者很近时标签很大的情况。

    ImageLabel标签Scale设置.png

    5. 透明窗体

    通过TE插件的弹出窗口APIWindow.ShowPopup无法直接弹出具有透明背景的弹出框:

    • TE插件的弹出窗口APIWindow.ShowPopup弹出普通HTML窗口:无法实现,IPopupMessage701无接口支持
    • 在Te插件<object>所在html页面,增加iframe,普通div会被插件遮盖。这种方式虽然可以在模型上方覆盖html窗口,但是无法设置背景透明。网上提供的

    Iframe设置allowtransparency="true"

    src链接页面body设置background="transparent"

    均无效。

    <div id="tool" style=" 100%; background-color: transparent;">
        <iframe id="toolbar" name="toolbar"
                style="position: absolute; visibility: inherit; top: 0px; left: 6px; height: 30px;  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;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都会发生变化,关联信息的维护将会耗费很大精力。

    模型属性查询.png

    • 根据数据查模型

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

    二三维定位.png

    • 区域查询

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

    区域查询.png

    9. ObjectID,LayerID,FeatureID,BimID,GroupPath

    • ObjectID:图层添加到FLY文件时,自动生成的模型对象ID,每次重新添加图层都会发生变化,Te插件接口ITerraExplorerObject701.ID
    • LayerID:图层添加到FLY文件时,自动生成的图层对象ID,每次重新添加图层都会发生变化,Te插件接口IFeatureLayer701.IDI3DMLFeatureLayer701.ID
    • FeatureID:建模人员导出模型时,自动生成的模型对象序号(0-n),同一模型文件内唯一,建模软件中增加、删除模型后导出时会发生变化,非增删类修改或者重新导出不会发生变化,Te插件接口IFeature701.DataSourceFeatureID
    • BimID:建模人员建模时,自动生成的模型对象唯一标识,后续修改、导出不会发生变化,Te插件无直接对应的接口,一般可以通过IFeature701.FeatureAttributes.GetFeatureAttribute("FileName").Value,其中包含BimID。
  • 相关阅读:
    【题解】直线交点数
    【题解】[TJOI2010] 阅读理解
    清北学堂 2020 国庆J2考前综合强化 Day7
    清北学堂 2020 国庆J2考前综合强化 Day6
    清北学堂 2020 国庆J2考前综合强化 Day5
    清北学堂 2020 国庆J2考前综合强化 Day4
    清北学堂 2020 国庆J2考前综合强化 Day3
    test
    清北学堂 2020 国庆J2考前综合强化 Day2
    清北学堂 2020 国庆J2考前综合强化 Day1
  • 原文地址:https://www.cnblogs.com/zhangdk/p/terraexplorer.html
Copyright © 2011-2022 走看看