|
@@ -432,7 +432,7 @@ var enter = ({
|
|
|
|
|
|
return info
|
|
|
} */
|
|
|
- let getMeasurePointsInfo = (fixPoint, onlyMoveBasePoint)=>{
|
|
|
+ let getMeasurePointsInfo = (fixPoint, baseMeasurePoints )=>{
|
|
|
let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine && e.points.length == 2)
|
|
|
if(!baseLine){
|
|
|
return console.error('创建失败,因基准线不存在')
|
|
@@ -456,15 +456,36 @@ var enter = ({
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- let basePoint2d = new THREE.Vector2().copy(fixPoint.basePoint)
|
|
|
- let anotherPoint2d = new THREE.Vector2().addVectors(basePoint2d, new THREE.Vector2().subVectors(baselineP12d,baselineP22d))//测量线方向上另一点
|
|
|
+
|
|
|
let basePointProj = fixPoint.basePoint.clone().setZ(baseLine.points[0].z)
|
|
|
- let foot2_2d = Potree.math.getFootPoint(fixPoint2d, basePoint2d, anotherPoint2d)
|
|
|
- let foot2_P1 = new THREE.Vector3(foot2_2d.x, foot2_2d.y, baseLine.points[0].z)
|
|
|
- info.disMeasure2 = {
|
|
|
- guideLinePoints : [new THREE.Vector3().copy(fixPoint.basePoint), basePointProj, foot2_P1, foot1_P1],
|
|
|
- points : [basePointProj, foot2_P1 ],
|
|
|
- }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if(baseMeasurePoints){//初始创建
|
|
|
+ info.disMeasure2 = {
|
|
|
+ points : baseMeasurePoints,
|
|
|
+ guideLinePoints:[fixPoint.basePoint.clone(), basePointProj,
|
|
|
+ basePointProj, baseMeasurePoints[0].clone(),
|
|
|
+ baseMeasurePoints[1].clone(), foot1_P1]
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ let basePoint2d = new THREE.Vector2().copy(fixPoint.basePoint)
|
|
|
+ let anotherPoint2d = new THREE.Vector2().addVectors(basePoint2d, new THREE.Vector2().subVectors(baselineP12d,baselineP22d))//测量线方向上另一点
|
|
|
+
|
|
|
+ let foot2_2d = Potree.math.getFootPoint(fixPoint2d, basePoint2d, anotherPoint2d)
|
|
|
+ let foot2_P1 = new THREE.Vector3(foot2_2d.x, foot2_2d.y, baseLine.points[0].z)
|
|
|
+
|
|
|
+ info.disMeasure2 = {
|
|
|
+ points : [basePointProj, foot2_P1 ],
|
|
|
+ guideLinePoints : [fixPoint.basePoint.clone(), basePointProj, foot2_P1, foot1_P1],
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
fixPoint.bus.emit('measureChange',[
|
|
|
{line: info.disMeasure1.points, dis: info.disMeasure1.points[0].distanceTo(info.disMeasure1.points[1])},
|
|
|
{line: info.disMeasure2.points, dis: info.disMeasure2.points[0].distanceTo(info.disMeasure2.points[1])}
|
|
@@ -478,10 +499,10 @@ var enter = ({
|
|
|
|
|
|
|
|
|
|
|
|
- let createMeasureForPoint = (fixPoint)=>{
|
|
|
+ let createMeasureForPoint = (fixPoint, baseMeasurePoints)=>{
|
|
|
|
|
|
|
|
|
- let info = getMeasurePointsInfo(fixPoint)
|
|
|
+ let info = getMeasurePointsInfo(fixPoint, baseMeasurePoints)
|
|
|
if(!info)return
|
|
|
|
|
|
let info1 = {//垂直于基准线的水平测量线
|
|
@@ -501,7 +522,45 @@ var enter = ({
|
|
|
guideLinePoints : info.disMeasure2.guideLinePoints
|
|
|
}
|
|
|
let disMeasure2 = viewer.measuringTool.createMeasureFromData(info2);
|
|
|
-
|
|
|
+
|
|
|
+ //因多个measure在同一直线上,会重叠,所以使可拖拽
|
|
|
+ let mouseover = (e) => {
|
|
|
+ //this.setMarkerSelected(e.object, 'hover', 'single');
|
|
|
+ viewer.dispatchEvent({
|
|
|
+ type : "CursorChange", action : "add", name:"markerMove"
|
|
|
+ })
|
|
|
+ };
|
|
|
+
|
|
|
+ let mouseleave = (e) => {
|
|
|
+ //this.setMarkerSelected(e.object, 'unhover', 'single');
|
|
|
+ viewer.dispatchEvent({
|
|
|
+ type : "CursorChange", action : "remove", name:"markerMove"
|
|
|
+ })
|
|
|
+ }
|
|
|
+ disMeasure2.edges[0].addEventListener('mouseover', mouseover);
|
|
|
+ disMeasure2.edges[0].addEventListener('mouseleave', mouseleave);
|
|
|
+ let dragInfo = {}
|
|
|
+
|
|
|
+ disMeasure2.edges[0].addEventListener('startDragging',(e)=>{
|
|
|
+ dragInfo = {
|
|
|
+ startMeasurePoints : disMeasure2.points.map(e=>e.clone()),
|
|
|
+ dragPoint : e.drag.location.clone(),
|
|
|
+ normal : new THREE.Vector3().copy(Potree.math.getNormal2d({p1:disMeasure2.points[0], p2:disMeasure2.points[1]})).setZ(0), //measure的法线
|
|
|
+ plane: new THREE.Plane().setFromNormalAndCoplanarPoint(new THREE.Vector3(0,0,1), disMeasure2.points[0]), //水平面
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ disMeasure2.edges[0].addEventListener('drag',(e)=>{ //平移
|
|
|
+ let ray = Potree.Utils.mouseToRay(e.pointer, e.drag.dragViewport.camera);
|
|
|
+ let I = ray.intersectPlane(dragInfo.plane, new THREE.Vector3())
|
|
|
+ if(!I)return //向上了
|
|
|
+ let dragVec = new THREE.Vector3().subVectors(I, dragInfo.dragPoint);
|
|
|
+ dragVec.projectOnVector(dragInfo.normal)
|
|
|
+ dragDisMeasure2(fixPoint, dragVec, dragInfo.startMeasurePoints)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ })
|
|
|
|
|
|
fixPoint.disMeasure1 = disMeasure1;
|
|
|
fixPoint.disMeasure2 = disMeasure2;
|
|
@@ -519,15 +578,40 @@ var enter = ({
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- let removeMeasureForPoint = (fixPoint)=>{
|
|
|
- viewer.scene.removeMeasurement(fixPoint.disMeasure1);
|
|
|
- viewer.scene.removeMeasurement(fixPoint.disMeasure2);
|
|
|
- fixPoint.disMeasure1 = null
|
|
|
- fixPoint.disMeasure2 = null
|
|
|
- fixPoint.basePoint = null
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let dragDisMeasure2 = (fixPoint, dragVec, startMeasurePoints)=>{//将disMeasure2拖拽一定距离
|
|
|
+ let disMeasure1 = fixPoint.disMeasure1,
|
|
|
+ disMeasure2 = fixPoint.disMeasure2
|
|
|
+ startMeasurePoints = startMeasurePoints || disMeasure2.points //开始拖拽时的点
|
|
|
+ disMeasure2.points = startMeasurePoints.map(e=>new THREE.Vector3().addVectors(e,dragVec))
|
|
|
+
|
|
|
+ let basePointProj = disMeasure2.guideLinePoints[1]
|
|
|
+ let foot1_P1 = disMeasure2.guideLinePoints[disMeasure2.guideLinePoints.length-1]
|
|
|
+ disMeasure2.guideLinePoints = [fixPoint.basePoint.clone(), basePointProj, //修改虚线
|
|
|
+ basePointProj, disMeasure2.points[0].clone(),
|
|
|
+ disMeasure2.points[1].clone(), foot1_P1]
|
|
|
+ disMeasure2.updateGuideLines()
|
|
|
+ disMeasure2.update({ifUpdateMarkers:true})
|
|
|
+ viewer.dispatchEvent('content_changed')
|
|
|
+
|
|
|
+
|
|
|
+ fixPoint.bus.emit('measureChange',[
|
|
|
+ {line: disMeasure1.points.map(e=>e.clone()), dis: disMeasure1.points[0].distanceTo(disMeasure1.points[1])},
|
|
|
+ {line: disMeasure2.points.map(e=>e.clone()), dis: disMeasure2.points[0].distanceTo(disMeasure2.points[1])}
|
|
|
+ ])
|
|
|
+
|
|
|
}
|
|
|
- let updateMeasureForPoint = (fixPoint, {onlyBasePoint}={})=>{
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let updateMeasureForPoint = (fixPoint, {onlyBasePoint,updateBaseLine}={})=>{
|
|
|
if(!fixPoint.disMeasure1)return
|
|
|
+ let ps = fixPoint.disMeasure2.guideLinePoints
|
|
|
+ let dragVec = ps.length == 6 && new THREE.Vector3().subVectors(ps[3],ps[2])
|
|
|
+
|
|
|
+
|
|
|
|
|
|
let info = getMeasurePointsInfo(fixPoint)
|
|
|
if(!info)return
|
|
@@ -535,6 +619,7 @@ var enter = ({
|
|
|
fixPoint.disMeasure1.points = info.disMeasure1.points
|
|
|
fixPoint.disMeasure1.update({ifUpdateMarkers:true})
|
|
|
}
|
|
|
+
|
|
|
fixPoint.disMeasure1.guideLinePoints = info.disMeasure1.guideLinePoints
|
|
|
fixPoint.disMeasure1.updateGuideLines()
|
|
|
fixPoint.disMeasure2.points = info.disMeasure2.points
|
|
@@ -542,12 +627,36 @@ var enter = ({
|
|
|
fixPoint.disMeasure2.guideLinePoints = info.disMeasure2.guideLinePoints
|
|
|
fixPoint.disMeasure2.updateGuideLines()
|
|
|
|
|
|
+ if(dragVec){
|
|
|
+ if(updateBaseLine){//移动基准线的话dragVec也改变方向了
|
|
|
+ //let dragDir = dragVec.dot(fixPoint.disMeasure1.lineDir)<0 ? 1 : -1 //向外or向内
|
|
|
+ let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine && e.points.length == 2)
|
|
|
+ let dragDir = dragVec.cross(baseLine.lineDir).z < 0 ? 1 : -1
|
|
|
+
|
|
|
+
|
|
|
+ ps = fixPoint.disMeasure2.guideLinePoints
|
|
|
+ let newVec = new THREE.Vector3().subVectors(ps[ps.length-2],ps[ps.length-1]).normalize()
|
|
|
+ let dis = dragVec.length() * dragDir
|
|
|
+ newVec.multiplyScalar(dis)
|
|
|
+ dragVec = newVec
|
|
|
+ }
|
|
|
+ dragDisMeasure2(fixPoint, dragVec)//恢复之前拖拽的距离
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
+
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ let removeMeasureForPoint = (fixPoint)=>{
|
|
|
+ viewer.scene.removeMeasurement(fixPoint.disMeasure1);
|
|
|
+ viewer.scene.removeMeasurement(fixPoint.disMeasure2);
|
|
|
+ fixPoint.disMeasure1 = null
|
|
|
+ fixPoint.disMeasure2 = null
|
|
|
+ fixPoint.basePoint = null
|
|
|
+ }
|
|
|
|
|
|
|
|
|
var sdk = {
|
|
@@ -799,7 +908,7 @@ var enter = ({
|
|
|
|
|
|
|
|
|
|
|
|
- createFixPoint({measure, graph, pos, basePoint}){//创建固定点或多线段
|
|
|
+ createFixPoint({measure, graph, pos, basePoint, }){//创建固定点或多线段
|
|
|
|
|
|
console.log('createFixPoint',measure, graph, pos, basePoint)
|
|
|
let ifDrawVerMeasure = measure//是否绘制垂线
|
|
@@ -810,7 +919,7 @@ var enter = ({
|
|
|
|
|
|
|
|
|
const baseLineChanged = ()=>{
|
|
|
- updateMeasureForPoint(mainPoint)
|
|
|
+ updateMeasureForPoint(mainPoint,{updateBaseLine:true})
|
|
|
}
|
|
|
const setDisplay = (show)=>{
|
|
|
if(graph){
|
|
@@ -899,8 +1008,11 @@ var enter = ({
|
|
|
changePos(pos){//固定点修改
|
|
|
console.log('changePos',pos)
|
|
|
mainPoint.copy(pos)
|
|
|
- ifDrawVerMeasure && updateMeasureForPoint(mainPoint)
|
|
|
-
|
|
|
+ if(ifDrawVerMeasure){
|
|
|
+ updateMeasureForPoint(mainPoint)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
},
|
|
|
changeBase(pos){//基准点修改
|
|
|
console.log('changeBase',pos)
|