封装的PKPM BimView的方法
封装的方法
var ObvApiWrapper;
if (!ObvApiWrapper) {
ObvApiWrapper = {};
}
ObvApiWrapper = function(build, obvApiObj, applicationObj) {
var self = this;
var obvApi = obvApiObj;
var application = applicationObj;
var build = build; //用于加载文档和模型的对象 self.getObvApi = function() {
return obvApi;
}; //选中,展示,隔离,隐藏操作
self.select = function(nodeIdArray) {
this.getObvApi() && this.getObvApi().roomSelect(nodeIdArray);
}; self.hideAll = function() {
this.getObvApi() && this.getObvApi().hideAll();
};
self.hide = function(nodeIds) {
this.getObvApi() && this.getObvApi().hide(nodeIds);
}; self.show = function(nodeIds) {
this.getObvApi() && this.getObvApi().show(nodeIds);
};
self.showAll = function() {
this.getObvApi() && this.getObvApi().showAll();
};
self.setIsolation = function(param) {
this.getObvApi() && this.getObvApi().setIsolation(param);
};
//设置颜色,恢复颜色
self.restoreObjectsColor = function(nodeIdArray) {
this.getObvApi() &&
this.getObvApi().getModels().length > 0 &&
this.getObvApi().restoreObjectsColor(nodeIdArray);
}; self.restoreObjectsColor = function() {
this.getObvApi() &&
this.getObvApi().getModels().length > 0 &&
this.getObvApi().restoreObjectsColor();
};
self.setObjectsColor = function(nodeIds, r, g, b, a) {
this.getObvApi() && this.getObvApi().setObjectsColor(nodeIds, r, g, b, a);
};
//设置视角
self.fitToView = function() {
this.getObvApi() && this.getObvApi().fitToView();
};
self.fitToView = function(nodeIdArray) {
this.getObvApi() && this.getObvApi().fitToView(nodeIdArray);
};
self.setViewTo = function(position, target) {
this.getObvApi() && this.getObvApi().setViewTo(position, target);
};
//获取模型的id,和id和name的互找
self.getModelIds = function() {
if (this.getObvApi()) {
return this.getObvApi().getModelIds();
}
};
self.getModelNameById = function(modelId) {
if (this.getObvApi()) {
var model = this.getObvApi().getModelById(modelId);
if (model) {
return model.name;
}
}
};
self.getModelIdByName = function(name) {
if (this.getObvApi()) {
return this.getObvApi().getModelIdByName(name);
}
};
self.setCamera = function(camera) {
var viewer = this.getViewer();
new OBV.Controllers.Viewer3d.ViewController(
viewer
).setViewFromCameraInfoSync(camera, true);
}; self.getCameraInfo = function(camera) {
var viewer = this.getViewer();
new OBV.Controllers.Viewer3d.ViewController(
viewer
).setViewFromCameraInfoSync(camera, true);
};
//是否打开,不可见构件的透明化显示
self.isOpenXRay = function(val) {
if (self.getObvApi()) {
if (val) {
this.getObvApi().setXRayColor(200, 200, 200, 0.1, false);
} else {
this.getObvApi().restoreXRayColor();
}
}
};
self.getViewer = function() {
return this.getObvApi().getViewer();
};
self.unloadModel = function(modelId) {
this.getObvApi() && this.getObvApi().unloadModel(modelId);
};
//加载模型,外调
self.loadDocumentByUrn = function(documentUrn, resolve) {
build.loadDocument(application, documentUrn).then(function(obvDocument) {
const viewer3dItem = obvDocument.getViewer3dItem(); // guid
if (typeof resolve === "function") {
resolve();
}
build
.load3dModels(obvApi, {
obvDocument,
viewer3dItem
})
.then(function(result) {
console.log("load3dModels", result);
});
});
};
self.getMarkerAddin = function(callback) {
if (!self.getObvApi()) {
return;
}
var addinManager = self.getObvApi().getAddinManager();
// 插件的ID
var markerAddinId = "OBVAddins.Marker"; //写死window["OBVAddins"].Marker.MarkerAddin.AddinId;
// 获取插件
var markerAddin = addinManager.getAddin(markerAddinId);
if (!markerAddin) {
// 插件没有加载过,需要加载到平台中
addinManager
.loadAddin(markerAddinId)
.then(function() {
self.markerAddin = addinManager.getAddin(markerAddinId);
callback();
})
.catch(function() {
if (!self.markerAddin) {
console.error("无法加载插件:", markerAddinId);
}
});
} else {
self.markerAddin = markerAddin;
callback();
}
// return markerAddin;
};
//功能上创建标注
self.createMarker = function(markerItem, item, message) {
var markerAddin = self.markerAddin;
if (!markerAddin) {
return;
}
var position;
//构件做标注可以
if (item == "object") {
var bbox = this.getObvApi().getObjectsBounds(markerItem.position);
if (!bbox) {
return;
}
position = bbox.center();
} else {
position = markerItem.position;
}
var tag = markerItem;
var anchor = " "; // 'relationItem.relation.anchor'
var id = new Date().getTime() + Math.random() * 100; //relationItem.relation.id + ''
markerAddin.createTextSymbolMarker(
position,
anchor,
tag,
message,
id,
1,
1
);
};
//清空标注
self.clearMarkers = function() {
var markerAddin = self.markerAddin;
if (!markerAddin) {
return;
}
markerAddin.clearAnnotations();
};
//标注的点击事件
self.getMarkerAnnotationClickedEventListener = function(resolve) {
var markerAddin = self.markerAddin;
markerAddin.addEventListener(
window["OBVAddins"].Marker.MarkerEventTypes.ANNOTATION_CLICKED,
annotation => {
let nodeIdArray = annotation.data.tag.position;
self.getObvApi().restoreObjectsColor();
// self.getObvApi().setObjectsColor(nodeIdArray, 56, 184, 49, 1);
self.getObvApi().setObjectsColor(nodeIdArray, 255, 0, 0, 1);
if (typeof resolve === "function") {
resolve(annotation.data);
}
}
);
}; //标注的点击事件
self.getMarkerSelectedEventListener = function(resolve) {
var markerAddin = self.markerAddin;
markerAddin.addEventListener(
window["OBVAddins"].Marker.MarkerEventTypes.MARKER_SELECTED,
annotation => {
let nodeIdArray = annotation.data.tag.position;
self.getObvApi().restoreObjectsColor();
// self.getObvApi().setObjectsColor(nodeIdArray, 56, 184, 49, 1);
self.getObvApi().setObjectsColor(nodeIdArray, 255, 0, 0, 1);
if (typeof resolve === "function") {
resolve(annotation.data);
}
}
);
};
/**
* // 根据guid 获得 nodeId
* @param {OBVAPI} obvApi
* @param {*成功后的回调} successCallback
* @param {*失败后的回调} errorCallback
* @param {*modelId} modelId
*/
self.getMapGuid = function(successCallback, errorCallback) {
if (!this.getObvApi()) {
return;
}
var modelIds = this.getObvApi().getModelIds();
var obvApi = this.getObvApi();
var obj = {};
var mapIndex = 0;
modelIds.forEach(function(modelId) {
getObjectTree(
obvApi,
modelId,
function(mapData) {
for (var key in mapData) {
obj[key] = mapData[key];
}
mapIndex++;
if (mapIndex === modelIds.length) {
successCallback(obj);
}
},
function() {
errorCallback(obj);
}
);
});
};
//通过一个modelId找到树以及guid的映射关系
function getObjectTree(obvApi, modelId, successCallback, errorCallback) {
obvApi.getObjectTree(modelId, function(objTree) {
var mapGuid = {};
var modelId = objTree.modelId;
var nodeIdArray = objTree.dbIdToNode;
var nodeIdArrayLastIndex = nodeIdArray.length - 1;
nodeIdArray.forEach(function(item, arrIndex) {
// console.log("indexArr: ", indexarr);
var nodeId = {
dbId: item.dbId,
modelId: modelId,
hasChildren: !!item.children
};
// var nodeId = {dbId: item.dbId, modelId: modelId}
obvApi.getProperties(
nodeId,
function(result) {
for (var i = 0; i < result.properties.length; i++) {
var name = result.properties[i].displayName;
var val = result.properties[i].displayValue; if (name === "Guid" || name === "OBVID") {
mapGuid[val] = nodeId;
break;
}
}
if (arrIndex === nodeIdArrayLastIndex) {
successCallback(mapGuid);
}
},
function(error) {
if (arrIndex === nodeIdArrayLastIndex) {
successCallback(mapGuid);
}
}
);
});
});
}
};
封装的PKPM BimView的方法的更多相关文章
- 【转】第4篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-18 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第4篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】3篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:官方原生方法分析
作者: 牛A与牛C之间 时间: 2013-11-17 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第3篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 封装JDBC操作数据库的方法
自己动手封装java操作数据库的方法: 一:目录结构 二:所需依赖的第三方jar包 这里只需引入mysql-connector-java-5.1.8-bin.jar,mysql数据库驱动jar包 三: ...
- 省市联动JQ封装比较简洁调用的方法
前言 因为省市联动的需求在每个项目几乎存在,所以本人也对此在web页面通过封装比较简洁的JQ方法循环判断调用调用后台获取数据再绑定到Select表单上.如果对代码有什么疑问或者更好办法可以在评论区留言 ...
- Python_selenium二次封装selenium的几个方法
Python_selenium二次封装selenium的几个方法 将常用的几个webdriver方法封装到自己写的一个类中去,此实例中是将"浏览器后退.浏览器前进.打开站点和关闭浏览器&qu ...
- vue封装公用弹出框方法,实现点击出现操作弹出框
vue封装公用弹出框方法,实现点击出现操作弹出框 如上图所示,这次要实现一个点击出现操作弹框的效果:并将这个功能封装成一个函数,便于在项目的多个地方使用. 具体思路是: 封装一个组件,组件保护一个插槽 ...
- 封装jQuery Validate扩展验证方法
一.封装自定义验证方法-validate-methods.js /***************************************************************** j ...
- Asp.net Core中使用NLog,并封装成公共的日志方法
1.安装NLog "NLog.Extensions.Logging": "1.0.0-rtm-alpha4" 2.配置NLog public void Conf ...
- Javascript的对象封装和继承有哪些方法?优劣分别是什么?
1.对象封装方法 (1)原始模式生成对象 直接将我们的成员写入对象中,用函数返回. 缺点:很难看出是一个模式出来的实例. function Stu(name, score) { ...
随机推荐
- SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步
最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错 ...
- 刷题记录:[BUUCTF 2018]Online Tool
目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...
- JAVA微信开发-如何保存包含特殊字符的微信昵称
我们在做微信开发的时候,有一个很重要的就是通过openid获取用户的详细信息,包含昵称,头像,省,市,区的信息,但是现在移动时代,很多人追求个性,在名字当中大量使用火星文或者表情符.(本人实际测试过一 ...
- 运维笔记--ubuntu安装指定版本的RabbitMQ
场景描述: 日常开发or生产环境经常会需要安装指定版本的软件,出于和其他软件的配合兼容性,以及稳定性的考虑. 现在我们的需求是安装指定版本的RabbitMQ,版本号: 操作步骤: 注意事项: 异常处理 ...
- vmware装centos7 无法上网
现象 使用ip address看不到ip地址 ping www.baidu.com无法ping通 解决方式: 1.设置网卡 vi /etc/sysconfig/network-scripts/ifcf ...
- 微信小程序 自定义tabbar实例
在小程序的开发文档中,对tabbar是这样说明的: 如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar 配置项指定 tab 栏的表现,以及 t ...
- Windows10下安装Git
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.具体安装步骤如下: 第一步:先从官网下载最新版本的Git 官网地址:https://git-scm.com/do ...
- 转 全新多媒体共享器Ipush推送|Miracast WIFI无线同屏推送
http://www.52bjw.cn/product-info/5767857.html 操作指南及注意事项 (draft) miracast和dlna/airplay分别工作在wifi direc ...
- WebViewJavascriptBridge js跟app的交互框架
https://github.com/marcuswestin/WebViewJavascriptBridge 参考: https://www.cnblogs.com/LiLihongqiang/p/ ...
- [LeetCode] 529. Minesweeper 扫雷
Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix representin ...