首页 技术 正文
技术 2022年11月14日
0 收藏 955 点赞 2,559 浏览 6316 个字

封装的方法

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);
}
}
);
});
});
}
};

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297