伟景行citymaker-----01.javascript打开本地模型CEP,加载目录树,加载要素类

以下所有代码基于 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;
    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值