以下所有代码基于 CityMaker_IE_Plugin_vConnect8.0.171127.exe 版本
该版本只能使用IE打开,建议使用IE11
1.打开cep模型代码
1.1 html中的模型标签
<!-- 3D窗口 -->
<div id="SGWorldDvi" style="width:100%;height:100%;">
<object id="plugin" type="application/x-cm-3d8" style="height: 95%; width: 100%">
</object>
</div>
1.2 打开本地模型cep代码
//调用打开本地模型的方法
function openLocal(){
var inputObj = document.createElement('input');
inputObj.setAttribute('id', '_ef');
inputObj.setAttribute('type', 'file');
inputObj.setAttribute("style", 'visibility:hidden');
document.body.appendChild(inputObj);
inputObj.click();
if (inputObj.value != "") {
openPlugin(inputObj.value,false);
}
}
function openPlugin(path,flag){
var start1=new Date();//计时记录
plugin = document.getElementById("plugin");
proj = plugin.project;//工程
console.log(" open 之前 ");
//1.提示是否安装版本
//if(!downloadRunTime()){return}
//2.提示是否为最新版本
//if(!runTimeVersion()){return}
//3.打开初始化
plugin.initialize(false, null);
setTimeout(function () {
//4.打开cep(open打开)
proj.open(path, true, "");
publicPlugin();
//打开open完成(计时)
var start2=new Date();
console.log("加载cep:"+(start2.getTime()-start1.getTime())/1000+"s");
//开始加载资源(树,fc,fl之前需要执行,用于提高速度,执行完成后,需要关闭)
plugin.pauseRendering(false);
console.log(" pauseRendering 开始 ");
//7.添加树
try{
var start3=new Date();//计时
addArray();
var start4=new Date();//计时
console.log("加载树:"+(start4.getTime()-start3.getTime())/1000+"s");
}catch (e) {
console.log("图层树方法加载失败,请检查treeUtils内方法!!!");
}
//资源加载完成,关闭
plugin.resumeRendering();
console.log("resumeRendering 结束");
}, 1000);
}
1.3加载全局变量
var plugin=null;
var proj=null;//工程
var __rootId;//根节点
var crsWKT;
var camera;//摄像机
var projTree;//工程树;
var objManager;
var terrain;//地形
var dataSF;
var featureMag;
var objectEditor;
var geoFactory;
var viewPort;
var filter;
var rect;
var uiWindowManager;
var htmlWindow;
var uiRoot;
function publicPlugin(){
//proj = plugin.project;//工程
__rootId = plugin.projectTree.rootID;//根节点
crsWKT = plugin.getCurrentCrsWKT();
camera = plugin.camera;//摄像头
projTree = plugin.projectTree;//工程树
objManager = plugin.objectManager;
terrain=plugin.terrain;//地形
dataSF=plugin.dataSourceFactory;
featureMag=plugin.featureManager;
objectEditor=plugin.objectEditor;
geoFactory=plugin.geometryFactory;
viewPort= plugin.viewport;
filter = plugin.new_QueryFilter;
rect = plugin.new_UIRect;
uiWindowManager = plugin.uiWindowManager;
htmlWindow=plugin.htmlWindow;
uiRoot= uiWindowManager.uiRootWindow;
}
2.加载目录树
2.1 该处是基于easyUI显示目录树
var treeJson=null;
function addArray(){
//只有该工程树节点存在的情况下,才加载图层树
if($('#treepanle').length>0){
//清除目录树
$('#treepanle').tree('loadData', []);
//获取树
treeJson = plugin.projectTree.traverse();
treeJson = treeJson.replace(/ /g, '');
treeJson = treeJson.replace(/\/n/g, '');
treeJson = treeJson.replace(/visibility/g, 'checked');
treeJson = treeJson.replace(/\n/g, '');
treeJson = treeJson.replace(/\"/g, "'");
treeJson = treeJson.replace(/:0}/g, ":false}");
treeJson = treeJson.replace(/:1}/g, ":true}");
treeJson = treeJson.replace(/:2}/g, ":false}");
treeJson = treeJson.replace(/,'checked'/g, ",'checked'");
treeJson = treeJson.replace(/name/g, 'text');
treeJson = eval('(' + treeJson + ')');
addNodeTree(treeJson.children,null);
$('#treepanle').tree('collapseAll');//expandAll
addArrayComplete();
}
}
function addNodeTree(jsondata,parent){
$('#treepanle').tree({
formatter: function(node){
var childName=node.text;
//名称检查操作
return childName;
}
});
$('#treepanle').tree('append', {
parent: parent,
data: jsondata
});
}
2.2目录树点击操作
function addArrayComplete(){
//1.树的点击事件
$('#treepanle').tree({
onClick: function (node) {
//单击事件
}
});
//2.左侧树复选框事件
$('#treepanle').tree({
onCheck: function (node) {
plugin.pauseRendering(false);
//遍历左侧树复选框被选中的
var nodesChecked = $('#treepanle').tree('getChecked');
for (var j = 0; j < nodesChecked.length; j++) {
var fcId = nodesChecked[j].id;
if (!projTree.isGroup(fcId)) {
if (objManager.getObjectById(fcId) != null) {
switch (objManager.getObjectById(fcId).type) {
case gviObjectType.gviObjectFeatureLayer:
objManager.getObjectById(fcId).visibleMask = gviViewportMask.gviViewAllNormalView;
break;
case gviObjectType.gviObjectRenderModelPoint:
objManager.getObjectById(fcId).visibleMask = gviViewportMask.gviViewAllNormalView;
break;
case gviObjectType.gviObject3DTileLayer:
objManager.getObjectById(fcId).visibleMask = gviViewportMask.gviViewAllNormalView;
break;
case gviObjectType.gviObjectTerrainImageLabel:
objManager.getObjectById(fcId).visibleMask = gviViewportMask.gviViewAllNormalView;
break;
default :
break;
}
}
}
}
//遍历左侧树复选框未被选中的
var nodesUnchecked = $('#treepanle').tree('getChecked', 'unchecked');
for (var i = 0; i < nodesUnchecked.length; i++) {
var fcId = nodesUnchecked[i].id;
if (!projTree.isGroup(fcId)) {
if (objManager.getObjectById(fcId) != null) {
switch (objManager.getObjectById(fcId).type) {
case gviObjectType.gviObjectFeatureLayer:
objManager.getObjectById(fcId).visibleMask = gviViewportMask.gviViewNone;
break;
case gviObjectType.gviObjectRenderModelPoint:
objManager.getObjectById(fcId).visibleMask = gviViewportMask.gviViewNone;
break;
case gviObjectType.gviObject3DTileLayer:
objManager.getObjectById(fcId).visibleMask = gviViewportMask.gviViewNone;
break;
case gviObjectType.gviObjectTerrainImageLabel:
objManager.getObjectById(fcId).visibleMask = gviViewportMask.gviViewNone;
break;
default :
break;
}
}
}
}
plugin.resumeRendering();
}
});
//3.图层树的双击事件
$('#treepanle').tree({
onDblClick: function (node) {
if (!projTree.isGroup(node.id) || node.id == 1) {
if (node.id == 1) {
terrain.flyTo(gviTerrainActionCode.gviJumpToTerrain);
} else {
switch (objManager.getObjectById(node.id).type) {
case gviObjectType.gviObjectFeatureLayer:
//飞入
camera.flyToObject(node.id, gviActionCode.gviActionJump);
break;
case gviObjectType.gviObjectRenderModelPoint:
camera.flyToObject(node.id, gviActionCode.gviActionFlyTo);
break;
case gviObjectType.gviObjectPresentation:
objManager.getObjectById(node.id).play(0);
//geoFactory.cameraViewBindMask = gviViewportMask.gviViewNone;//视口不联动
break;
case gviObjectType.gviObjectTerrainLocation:
var camposition = objManager.getObjectById(node.id).position;
var camPnt = geoFactory.createPoint(gviVertexAttribute.gviVertexAttributeZ);
camPnt.setCoords(camposition.x, camposition.y, camposition.altitude, 0, 0);
var cameulerAngle = plugin.new_EulerAngle;
cameulerAngle.set(camposition.heading, camposition.tilt, camposition.roll);
camera.lookAt2(camPnt, camposition.distance, cameulerAngle);
camera.flyTime = 0;
break;
case gviObjectType.gviObjectClipPlaneOperation:
objManager.getObjectById(node.id).execute();
break;
case gviObjectType.gviObject3DTileLayer:
//飞入
camera.flyToObject(node.id, gviActionCode.gviActionJump);
break;
case gviObjectType.gviObjectTerrainImageLabel:
//飞入
camera.flyToObject(node.id, gviActionCode.gviActionJump);
break;
}
}
}
}
});
}
3.加载模型所有的要素类
var fcArray=[];
var foArray = [];
/*************************/
/** 获取所有的要素类
/*************************/
var fcArray=[];
function getFeatureClass() {
if(projTree==null) return;
if(fcArray.length != 0) return;
getFeatureObject();
for(var i=0;i<foArray.length;i++){
fObject=foArray[i];
var fc =getfcbyfl(fObject)
if(fc!=null){
fcArray.push(fc);
}
}
}
/*************************/
/** 获取所有的要素对象
/*************************/
var foArray = [];
function getFeatureObject() {
if(projTree==null) return;
if(foArray.length != 0) return;
var arrayProjectTree = projTree;
foArray = getAllNode(__rootId,function(nodeId){
if (!arrayProjectTree.isGroup(nodeId)) {
var fObject = objManager.getObjectById(nodeId);
if (fObject.type == gviObjectType.gviObjectFeatureLayer) {
return fObject;
}
}
});
}
//递归获取
function getAllNode(nodeId,filter){
if(projTree==null) return;
var nodeList = new Array();
if(nodeId != '00000000-0000-0000-0000-000000000000'){
var node = filter(nodeId);
if(node){
nodeList.push(node);
}
}
var itemid =projTree.getNextItem(nodeId, 11);//第一个子目录,11表示子节点第一个
if(itemid == '00000000-0000-0000-0000-000000000000'){
return nodeList;
}
while (itemid != '00000000-0000-0000-0000-000000000000') {
var childNodeList =getAllNode(itemid,filter);
nodeList = nodeList.concat(childNodeList);
itemid = projTree.getNextItem(itemid, 13);//13表示同级节点的下一个
}
return nodeList;
}
//要素图层转要素类
function getfcbyfl(fl){
if(fl.type!=256) return null;
var fdsNames = fl.featureClassInfo.dataSetName;
var c = fl.featureClassInfo.dataSourceConnectionString;
var featureClassName = fl.featureClassInfo.featureClassName;
var ds =dataSF.openDataSourceByString(c);
var __fds = ds.openFeatureDataset(fdsNames);
if (featureClassName != null && featureClassName != "ImportInstance") {
//console.log("featureClassName:"+featureClassName+" showname:"+__fds.name);
var fc = __fds.openFeatureClass(featureClassName);
return fc;
}else{
return null;
}
}