|
@@ -36,6 +36,124 @@ export const enter = (dom, isLocal) => {
|
|
|
let maxLoadingCount = /* isLocal ? 1 : */2; //正在加载模型的最大数目
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ const units = { 1: 'metric', 2: 'imperial' }
|
|
|
+ let getMeasureType = function (type, unit) {
|
|
|
+ let info
|
|
|
+ switch (type) {
|
|
|
+ case 'LINE':
|
|
|
+ info = { measureType: 'Distance' }
|
|
|
+ break
|
|
|
+ case 'AREA':
|
|
|
+ info = { measureType: 'Area' }
|
|
|
+ break
|
|
|
+ case 'L_LINE':
|
|
|
+ info = { measureType: 'Hor Distance' }
|
|
|
+ break
|
|
|
+ case 'L_AREA':
|
|
|
+ info = { measureType: 'Hor Area' }
|
|
|
+ break
|
|
|
+ case 'L_RECTANGLE':
|
|
|
+ info = { measureType: 'Hor Rect Area' }
|
|
|
+ break
|
|
|
+ case 'V_LINE':
|
|
|
+ info = { measureType: 'Ver Distance' }
|
|
|
+ break
|
|
|
+ case 'V_AREA':
|
|
|
+ info = { measureType: 'Ver Area' }
|
|
|
+ break
|
|
|
+ case 'V_RECTANGLE':
|
|
|
+ info = { measureType: 'Ver Rect Area' }
|
|
|
+ break
|
|
|
+ default:
|
|
|
+ console.error('无此 measure type')
|
|
|
+ }
|
|
|
+ info.unit = units[unit]
|
|
|
+ return info
|
|
|
+ }
|
|
|
+
|
|
|
+ let getMeasureFunction = function (measure, bus) {
|
|
|
+ measure.changeCallBack = () => {
|
|
|
+ //拖拽结束后发送
|
|
|
+ if (measure.parent) {
|
|
|
+ //未被删除
|
|
|
+ bus.emit('update')
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ quit: () => {
|
|
|
+ Potree.Log('quit结束且删除: ' + measure.id, '#00c7b2')
|
|
|
+ viewer.dispatchEvent({ type: 'cancel_insertions', remove: true, measure })
|
|
|
+ }, //触发结束。退出测量模式,清除之前操作
|
|
|
+ clear: () => {
|
|
|
+ //删除
|
|
|
+ Potree.Log('clear删除: ' + measure.id, '#00c7b2')
|
|
|
+
|
|
|
+ viewer.dispatchEvent({ type: 'cancel_insertions', remove: true, measure })
|
|
|
+ viewer.scene.removeMeasurement(measure)
|
|
|
+ },
|
|
|
+
|
|
|
+ getPoints: () => {
|
|
|
+ return measure.points
|
|
|
+ },
|
|
|
+ getDatasetLocations: () => {
|
|
|
+ return measure.dataset_points
|
|
|
+ },
|
|
|
+ getDatasets: () => {
|
|
|
+ return measure.points_datasets
|
|
|
+ },
|
|
|
+ getDatasetId: () => {
|
|
|
+ return measure.datasetId
|
|
|
+ },
|
|
|
+
|
|
|
+ getArea: () => {
|
|
|
+ return measure.area //{value:area, string:..}
|
|
|
+ },
|
|
|
+ getDistance: () => {
|
|
|
+ if (measure.points.length < 2) return null
|
|
|
+
|
|
|
+ var value = measure.points[0].distanceTo(measure.points[1])
|
|
|
+
|
|
|
+ return {
|
|
|
+ value, //米
|
|
|
+ string: viewer.unitConvert.convert(value, 'distance', void 0, measure.unitSystem, 0.1, true),
|
|
|
+ }
|
|
|
+ },
|
|
|
+ changeUnit: unit => {
|
|
|
+ //公制|英制 , 1 | 2 单位
|
|
|
+ measure.setUnitSystem(units[unit])
|
|
|
+ },
|
|
|
+ toDataURL: (width, height) => {
|
|
|
+ //截图
|
|
|
+ isScreenshoting = true
|
|
|
+ var promise = viewer.startScreenshot({ type: 'measure', measurement: measure, hideMarkers: true }, width, height)
|
|
|
+ promise.done(() => {
|
|
|
+ isScreenshoting = false
|
|
|
+ })
|
|
|
+ return promise
|
|
|
+ },
|
|
|
+ //手动开启或关闭:
|
|
|
+ show: () => {
|
|
|
+ viewer.updateVisible(measure, 'inListByUser', true)
|
|
|
+ },
|
|
|
+ hide: () => {
|
|
|
+ viewer.updateVisible(measure, 'inListByUser', false)
|
|
|
+ },
|
|
|
+ highlight: isHight => {
|
|
|
+ measure.setSelected(isHight, 'byList')
|
|
|
+ },
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
let sdk = {
|
|
|
sceneBus,
|
|
|
getPositionByScreen(pos2d, hopeModelId ){//通过屏幕坐标获取真实坐标 . hopeModelId: 如果指定了模型,优先返回hopeModelId上的intersect
|
|
@@ -516,12 +634,15 @@ export const enter = (dom, isLocal) => {
|
|
|
},
|
|
|
changeBottom(z){
|
|
|
model && MergeEditor.setModelBtmHeight(model,z)
|
|
|
+ model.dispatchEvent('transformChanged') //改了position
|
|
|
},
|
|
|
changePosition(pos){//校准取消时执行
|
|
|
model && model.position.copy(pos)
|
|
|
+ model.dispatchEvent({type:'transformChanged'})
|
|
|
},
|
|
|
changeRotation(rot){//校准取消时执行
|
|
|
model && model.rotation.setFromVector3(rot)
|
|
|
+ model.dispatchEvent({type:'transformChanged'}) //通知measure
|
|
|
},
|
|
|
|
|
|
enterRotateMode(){
|
|
@@ -565,7 +686,53 @@ export const enter = (dom, isLocal) => {
|
|
|
leaveAlignment(){
|
|
|
MergeEditor.leaveSplit()
|
|
|
},
|
|
|
+ /* enterScaleSet()我输入长度会调用setLength
|
|
|
+ 返回{
|
|
|
+ setLength(length: number)
|
|
|
+ }
|
|
|
+ */
|
|
|
+ enterScaleSet(){
|
|
|
+ let bus = new mitt()
|
|
|
+ let length, measure;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let setScale = ()=>{
|
|
|
+ if(length == void 0 || measure == void 0)return
|
|
|
+ let s = length / measure.length
|
|
|
+ result.changeScale(s)
|
|
|
+
|
|
|
+ //measure.update()
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ bus,
|
|
|
+ setLength(v){
|
|
|
+ length = v
|
|
|
+ setScale()
|
|
|
+ },
|
|
|
+ startMeasure(){
|
|
|
+ let measure = viewer.measuringTool.startInsertion(
|
|
|
+ {measureType: "Distance", unit: "metric"},
|
|
|
+ () => {
|
|
|
+ //done:
|
|
|
+ bus.emit('end', ret) //完成
|
|
|
+ setScale()
|
|
|
+ },
|
|
|
+ () => {
|
|
|
+ //cancel
|
|
|
+ bus.emit('quit', ret) //删除
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
|
|
|
+ leaveScaleSet(){
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
|
|
|
destroy(){
|
|
|
model && MergeEditor.removeModel(model)
|
|
@@ -577,16 +744,21 @@ export const enter = (dom, isLocal) => {
|
|
|
},
|
|
|
|
|
|
|
|
|
- addTag(){//加热点
|
|
|
+ //测量线的点都附着于各个模型,当模型变化时,点跟着变化。
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ addTag(info){//加热点
|
|
|
let bus = mitt()
|
|
|
-
|
|
|
- viewer.tagTool.startInsertion().done(tag=>{
|
|
|
- bus.emit('added')
|
|
|
-
|
|
|
-
|
|
|
- })
|
|
|
-
|
|
|
-
|
|
|
+ if(!info.position){
|
|
|
+ viewer.tagTool.startInsertion().done(tag=>{
|
|
|
+ bus.emit('added')
|
|
|
+
|
|
|
+
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|