封装的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) { ...
随机推荐
- C# 最简单的使程序单进程运行的方法
1.代码1 static void Main() { Process current = Process.GetCurrentProcess(); Process[] processes = Proc ...
- CentOS 6和 CentOS 7的区别【转】
虽然,redhat 8在今年已经推出了,但是centos 8还没有推出.而且公司好多都在用centos 6和7 来了解一下6和7的区别吧 整体说明 1.系统 项目CentOS 6CentOS7 . 安 ...
- 单点登录(SSO)工作原理
单点登录(SSO)工作原理 一.单点登录的介绍 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次 ...
- java查看线程的堆栈信息
通过使用jps 命令获取需要监控的进程的pid,然后使用jstack pid 命令查看线程的堆栈信息. 通过jstack 命令可以获取当前进程的所有线程信息. 每个线程堆中信息中,都可以查看到线程ID ...
- Spring cloud微服务安全实战-7-9自定义日志采集的格式和内容
怎么来控制输出的日志的格式.并且从日志里面提取出来我想要的一些信息. 整个的message是一个大的json格式字符串. 虽然是可以通过关键字搜索到.但是日志看起来并不舒服. 在我们的控制台,日志实际 ...
- Python - Django - 序列化
app01/__int__.py: import pymysql pymysql.install_as_MySQLdb() app01/models.py: from django.db import ...
- js的style.width取不到元素的宽度值
使用jquery的.width()方法获取一个元素的当前宽度,不管元素是否设置了宽度,css样式时内联 外联或者是内嵌,都可以使用 这个方法获取元素的宽度. 使用原生js style.width .w ...
- [LeetCode] 150. Evaluate Reverse Polish Notation 计算逆波兰表达式
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- @Component和@Configuration作为配置类的差别
https://blog.csdn.net/long476964/article/details/80626930 虽然Component注解也会当做配置类,但是并不会为其生成CGLIB代理Class ...
- [转帖]中兴GoldenDB数据库开始了第一轮中信银行核心业务系统迁移落地
中兴GoldenDB数据库开始了第一轮中信银行核心业务系统迁移落地 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...