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、进行下一次测量时,需先“关闭测量”,再“开启测量”
点击查看示例演示 →
Powered by mms3D