首页 / 浏览问题 / 三维GIS / 问题详情
三维场景怎么画一个面
sun
2EXP 2017年12月06日
我目前利用js的插件版开发web端三维,现在有一个需求是在三维场景中画一个平面。我尝试通过量测面积的接口去获取点击的每个点坐标,但发现这个点信息根本无法获取,请问有没有什么其他方法在三维场景中画一个平面,谢谢!

1个回答

您好,您可以添加自定义的onClick事件(或者onMouseDown事件),通过e.get_longitude()和e.get_latitude()获取经纬度位置。详细代码可以参考插件客户端示例:场景浏览 - 自定义action.
5,560EXP 2017年12月06日
这个方法我用过,两个问题:1、这样在交互的时候只能通过鼠标在模型上点击,无法实时绘制出一个多边形;2、在三维模型中怎么通过连续的点生成一个二维面呢?通过什么接口呢?谢谢!
measureArea也是可以添加onClick事件(或者onMouseDown事件)的,Action3D=pan不是必须的。

点生成面的话,构造面后,修改面的parts字段即可。
不是很理解,能否加个qq?
请问怎么添加onMouseDown事件啊,我昨天下午添加一直没成功
等一下哈,我写一段示例给你。可能上午比较忙,下午才能给你哈。
非常谢谢
请问示例写好了吗?
function getInfo()
{
	//设置控件的当前操作为自定义操作
		var myAction = new SuperMap.Web.UI.Action3Ds.MyAction(sceneControl);
		sceneControl.set_sceneAction(myAction);
}

//通过继承SceneAction的方式来扩展用户的Action,继承方式采用框架提供的格式
//扩展Action的构造函数
SuperMap.Web.UI.Action3Ds.MyAction = function(sceneControl)
{
		///<param name="sceneControl" type="SuperMap.Web.UI.Controls.SceneControl"></param>
	  SuperMap.Web.UI.Action3Ds.MyAction.initializeBase(this);

	  this._name = "myAction";

	  this._sceneControl = sceneControl;

	  this._type = SuperMap.Web.UI.Action3Ds.SceneActionType.MEASUREAREA;

};

//扩展Action的属性和方法
SuperMap.Web.UI.Action3Ds.MyAction.prototype ={
	  /*
	  * 析构方法
	  */
	  dispose:function()
	  {
				///<returns type="void"></returns>
				this._sceneControl = null;
	  },

	  /*
	  * 鼠标单击方法
	  */
	  onMouseDown:function(e)
	  {
			///<param name="e" type="EventObject"></param>
				///<returns type="void"></returns>
				if(e.get_flagType() == SuperMap.Web.Realspace.FlagType.LBUTTON){
					var point = sceneControl.pixelToGlobe(new SuperMap.Pixel(e.get_clientX(), e.get_clientY()));
					var point3d = new SuperMap.Web.Core.Point3D(e.get_longitude(),e.get_latitude(),e.get_altitude());
					point3ds.add(point3d);
				}
				if(e.get_flagType() == SuperMap.Web.Realspace.FlagType.RBUTTON){
					var p3ds = [point3ds]; 
					var georegion3d = new SuperMap.Web.Core.GeoRegion3D(p3ds);
				}
	  }
};

貌似没有效果。。。
有效果,谢谢,只是要再加一个注册的代码。非常感谢啊
...