正射面积测量

MMSDT.surveyArea()

       不规则凸形面积测量,正射投影面积。

       Tips: 该测量结果为mms3D三维空间的正射面积,需要按比例尺换算成实际长度单位。

构造函数

      MMSDT.surveyArea(scale:number)

        scale - 数字,辅助点缩放大小(另:辅助点越大,面积填充图形越厚)

属性

       .enabled( Boolean )

       测量开关

       Boolean - 布尔值,true开启,false关闭。

       .addPoint( position )

       添加标识点

       position - 数组,标识点的坐标。

       .result()

       return 返回面积和对应正射中心点的坐标

       area - 数字,面积。

       position - 数组,正射中心点坐标。

代码示例

var MMS3D_exceptionMesh = ['dmxx328','dmxx362','dmxx388']; //需要材质拆分的网格 var MMS3D_instancingMesh = []; //合并实例化网格 //初始化场景 MMSDT.initScene( false, MMS3D_exceptionMesh, MMS3D_instancingMesh ); //设置第3人称鼠标控制器 controls3.maxPolarAngle = Math.PI*0.49; //向下,最大角度限制 controls3.maxDistance = 1000; //最远距离限制 controls3.screenSpacePanning = false; //右键平移是否上下移动 controls3.enableDamping = true; //是否开启惯性阻尼 controls3.dampingFactor = 0.1; //惯性阻尼系数 //使用json文件让场景还原 MMSDT.onloadScene( "models/mms3D_cangku1.json", function(progress){ if( progress == 'done' ){ //加载完成,播放动画 for( var i=0; i<actions[0].length; i++ ){ actions[0][i].play(); actions[0][i].timeScale = 0.5; } }else if( progress == 'ok' ){ //渲染完成 onloadDone(); }else{ //显示进度条数字 document.getElementById("loadNum").innerHTML = Math.round( progress )+'%'; } }); //初始化测面积函数(数字,辅助点缩放大小) var surveys = new MMSDT.surveyArea(2); //返回计算结果 var jsonData = null; //用于标注数字的div var divInfo = null; //场景加载完成 function onloadDone(){ //需要监听的地面网格名字 var eventAll = ["dmxx117","dmxx329"]; //对场景中包含子网格进行监听 var meshEvent = new MMSDT.mouseChildEvent( eventAll ); //鼠标单击场景中的模型 var onDown = function( name, buttons, position ){ //右键点击 if( buttons == 'right' ){ surveys.addPoint( position ); //单击鼠标右键添加关键点,得到当前点击场景的坐标点 } } //鼠标双击场景中的模型 var onDouble = function( name, buttons ){ //左键双击得到结果 if( buttons == 'left' ){ jsonData = surveys.result(); //双击鼠标左键结束,输出计算结果 //创建标注信息框 divInfo = document.createElement("div"); divInfo.className = "infoBox"; divInfo.innerHTML = "区域面积" + "
" + jsonData.area.toFixed(2); //标注信息 document.body.appendChild(divInfo); } } //鼠标单击设备图标 var iotDown = function(icon, buttons){ } //鼠标双击设备图标 var iotDouble = function(icon, buttons){ } MMSDT.mouseDownEvent( onDown, onDouble, iotDown, iotDouble ); //初始化鼠标点击事件 animate(); //循环动画,标注信息在面积的中心位置 function animate(){ requestAnimationFrame( animate ); if( divInfo != null ){ var vector = MMSDT.mapped3to2( jsonData.position ); divInfo.style.bottom = vector.y + "px"; divInfo.style.left = vector.x - 50 + "px"; } } } //自定义对外函数接口------------------------------------------------------------------------ //测距开 MMAPI.measureOn = function(){ surveys.enabled(true); //true开, false关 } //测距关 MMAPI.measureOff = function(){ surveys.enabled(false); //true开, false关 //删掉信息标注框 divInfo.parentNode.removeChild( divInfo ); divInfo=null; jsonData=null; }

示例说明:

1、开启测量后,对着地面点击鼠标右键添加点位。

2、对着地面双击鼠标左键结束并输出计算结果。

3、进行下一次测量时,需先“关闭测量”,再“开启测量”

点击查看示例演示 →