首页 / 浏览问题 / 三维GIS / 问题详情
场景中模型对象选中函数无效
6EXP 2018年03月09日

使用产品:iserver 8c  操作系统:win7 x64
数据类型: oracle 11g x64 或 文件型
问题详细描述:sceneControl 绑定 objectSelected  场景中模型对象选中函数无效
问题重现步骤: 

1.

//初始化三维场景控件实例,参数为包含控件的HTML元素
		sceneControl = new SuperMap.Web.UI.Controls.SceneControl($get("sceneControlDiv"), initCallback, failedCallback);

2.

/**
 * 控件初始化完成后的回调函数,初始化完成之后才能进行数据加载
 */
function initCallback() {
	//获取地球控件场景,控件和场景是一对一的捆绑关系
	scene = sceneControl.get_scene();
	
	screenLayer = scene.get_screenLayer3D();  

	trackingLayer = scene.get_trackingLayer3D();
	camera = scene.get_camera();
	
	sceneControl.addEvent("objectSelected", objectSelected);
	sceneControl.addEvent("bubbleInitialize",bubbleInitialize);
	sceneControl.addEvent("bubbleResize",bubbleResize);
	sceneControl.addEvent("bubbleClose",bubbleClose);    
	
	if(scene != null){
    	openScene();
    }
	
	//添加屏幕图层文本
	addScreenText();
	
	//获取FlyManager对象
    flyManager = scene.get_flyManager();

}

3.

/**
 * 选择对象方法
 * @param selected3d
 */
function objectSelected(selected3d) {

	var objId = selected3d[0].get_item(0);
	var objInLayer3D = selected3d[0].get_layer3D();
	var feature3D = objInLayer3D.findFeature3DByID(objId);

	switch(objId){
	case 206:
		infoPage = "/rehab/map/plugin/html/Info_1.htm";
		break;
	case 156:
		infoPage = "/rehab/map/plugin/html/Info_3.htm";
		break;
	case 17:
		infoPage = "/rehab/map/plugin/html/Info_2.htm";
		break;
	default:
		infoPage = "/rehab/map/plugin/html/noInfo.htm";
	break;
	}

	if(feature3D !== null){ 
		var point3D = null;
		if (feature3D) {
			point3D = feature3D.get_geometry().get_position();
		}
		createBubble(point3D);
	}else{
		var dataName = objInLayer3D.get_dataName();
		console.log("选择的layer的名称: " + dataName);
		
		var layerName = "";
		if(dataName !== null && dataName !== ""){
			layerName = dataName.split("@")[0];
		}
		//如果是缓存场景,可能无法调用findFeature3DByID接口,需要根据矢量地图服务来查询这个feature3D
		doSqlQueryById(layerName, objId);  
		
		setTimeout(function() {
			createBubble(currentPoint);
		}, 100);
	}
}

我看了 scencontrol 也注册了这个代码,为什么我点击缓存场景中的模型的时候,就是不能够进这个 objectSelected的函数的断点呢?求指点,谢谢!

1个回答

您的模型数据是osgb三维切片缓存数据吧?示例中所使用的数据是矢量缓存数据,所以能触发objectselected操作;osgb三维切片缓存数据的话,需要通过layer3d.getAllFieldValuesOfLastSelected来获取选择对象的属性。或者您也生成矢量缓存,然后就可以触发点击事件了。
5,560EXP 2018年03月09日
好像IE11下不行,改成IE10就行了,不过兼容性的meta 没反应,还在看
...