|
@@ -31,23 +31,38 @@ export class MeasuringTool extends THREE.EventDispatcher{
|
|
|
|
|
|
this.history = new History({
|
|
|
applyData: (data)=>{
|
|
|
- if(data.measure.parent && data.measure.visible){
|
|
|
+ if(data.measure.parent && data.measure.visible){
|
|
|
data = Potree.Common.CloneObject(data) //避免使用后更改数据又被使用
|
|
|
data.measure.reDraw()
|
|
|
data.measure.initData(data)
|
|
|
- data.measure.dispatchEvent('changeByHistory')
|
|
|
+ data.measure.isNew = data.isNew
|
|
|
+ data.measure.dispatchEvent('changeByHistory')
|
|
|
+
|
|
|
+ /* if(data.measure.isPrism){
|
|
|
+ data.measure.needsCompute = data.needsCompute
|
|
|
+ } */
|
|
|
+ data.measure.facePlane = data.facePlane && data.facePlane.clone()
|
|
|
+ data.measure.cannotConfirmNormal = data.cannotConfirmNormal
|
|
|
return true
|
|
|
}
|
|
|
},
|
|
|
- getData:(measure)=>{
|
|
|
- if(measure.isNew)return
|
|
|
- return {
|
|
|
+ getData:(measure)=>{
|
|
|
+ let data = {
|
|
|
measure,
|
|
|
points: measure.points.map(e=>e.clone()),
|
|
|
dataset_points: measure.dataset_points ? measure.dataset_points.map(e=>e&&e.clone()) : null,
|
|
|
points_datasets: measure.points_datasets.slice(),
|
|
|
- datasetId: measure.datasetId
|
|
|
+ datasetId: measure.datasetId,
|
|
|
+ isNew: measure.isNew,
|
|
|
+ facePlane: measure.facePlane && measure.facePlane.clone(),
|
|
|
+ cannotConfirmNormal: measure.cannotConfirmNormal
|
|
|
}
|
|
|
+ /* if(measure.isPrism){ //没用
|
|
|
+ data.volumeInfo = measure.volumeInfo
|
|
|
+ data.needsCompute = measure.needsCompute
|
|
|
+ //但不记录其他信息
|
|
|
+ } */
|
|
|
+ return data
|
|
|
}
|
|
|
}),
|
|
|
//this.scene = viewer.overlay//
|
|
@@ -339,12 +354,14 @@ export class MeasuringTool extends THREE.EventDispatcher{
|
|
|
if (e.button == THREE.MOUSE.LEFT || e.isTouch) {
|
|
|
if (length >= measure.maxMarkers) {
|
|
|
end({finish:true});
|
|
|
- }else{
|
|
|
- var marker = measure.addMarker({point:measure.points[length - 1].clone()})
|
|
|
+ }else{
|
|
|
+
|
|
|
+ this.history.beforeChange(measure)
|
|
|
|
|
|
- if(args.isRect && measure.markers.length == 3){//marker全可见
|
|
|
- measure.addMarker({point:measure.points[0].clone()})
|
|
|
-
|
|
|
+ let marker = measure.cloneMarker(length - 1, length)
|
|
|
+
|
|
|
+ if(args.isRect && measure.markers.length == 3){//marker全可见
|
|
|
+ measure.cloneMarker(0, 3)
|
|
|
}else{
|
|
|
measure.markers[length].visible = false
|
|
|
measure.edges[length].visible = false
|
|
@@ -354,6 +371,9 @@ export class MeasuringTool extends THREE.EventDispatcher{
|
|
|
measure.markers[length-1].visible = true;
|
|
|
|
|
|
marker.isDragging = true
|
|
|
+
|
|
|
+ this.history.afterChange(measure)
|
|
|
+
|
|
|
measure.continueDrag(marker, e)
|
|
|
}
|
|
|
|
|
@@ -535,8 +555,8 @@ export class MeasuringTool extends THREE.EventDispatcher{
|
|
|
marker.isDragging = true
|
|
|
this.viewer.inputHandler.startDragging(marker , {endDragFun, notPressMouse:true} ); //notPressMouse代表不是通过按下鼠标来拖拽
|
|
|
e.drag = this.viewer.inputHandler.drag
|
|
|
- e.drag.endDragFun = endDragFun
|
|
|
- e.drag.notPressMouse = true
|
|
|
+ /* e.drag.endDragFun = endDragFun
|
|
|
+ e.drag.notPressMouse = true */
|
|
|
|
|
|
//if(!measure.dragMarker(e) || !measure.dropMarker(e))return
|
|
|
|
|
@@ -598,6 +618,30 @@ export class MeasuringTool extends THREE.EventDispatcher{
|
|
|
}
|
|
|
|
|
|
|
|
|
+ let changeByHistory = (e)=>{
|
|
|
+ if(!measure.isNew)return
|
|
|
+
|
|
|
+ let marker = measure.markers[measure.points.length-1]
|
|
|
+ this.viewer.inputHandler.startDragging(marker , {endDragFun, notPressMouse:true} );
|
|
|
+ e.drag = this.viewer.inputHandler.drag
|
|
|
+
|
|
|
+
|
|
|
+ var I = viewer.inputHandler.intersect && (viewer.inputHandler.intersect.orthoIntersect || viewer.inputHandler.intersect.location)
|
|
|
+ if(I){
|
|
|
+ measure.dragChange(I.clone(), measure.points.length-1 ) //使最后一个点在鼠标处
|
|
|
+ }
|
|
|
+ /* if(measure.markers.length == 1){
|
|
|
+ Common.updateVisible(marker, ,false)
|
|
|
+ } */
|
|
|
+ args.isRect || ( measure.edges[measure.points.length-1].visible = false)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //measure.continueDrag(measure.markers[measure.points.length-1], o )
|
|
|
+ }
|
|
|
+ measure.addEventListener('changeByHistory',changeByHistory)
|
|
|
+
|
|
|
+
|
|
|
this.viewer.scene.addMeasurement(measure);
|
|
|
|
|
|
return measure;
|