From e78397cc852166314ad0eab66008fb090d798f4a Mon Sep 17 00:00:00 2001 From: 584911253@qq.com <584911253@qq.com> Date: 星期一, 13 三月 2023 15:05:49 +0800 Subject: [PATCH] 模型裁剪修改 --- src/views/Tools/LayerTree.vue | 5 - src/views/Synthesis/LeftMenu.vue | 142 ++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 129 insertions(+), 18 deletions(-) diff --git a/src/views/Synthesis/LeftMenu.vue b/src/views/Synthesis/LeftMenu.vue index 24c3923..941fa7e 100644 --- a/src/views/Synthesis/LeftMenu.vue +++ b/src/views/Synthesis/LeftMenu.vue @@ -666,7 +666,8 @@ }, { value: '鍏朵粬妯″瀷', label: '鍏朵粬妯″瀷' - }] + }], + targetY: 0.0, }; }, methods: { @@ -674,8 +675,8 @@ setChangeTwoMenu(res) { var val = res.id[0]; if (window.model != null) { - window.model.deleteObject(); - window.model = null; + // window.model.deleteObject(); + // window.model = null; } sgworld.Analysis.clearCurtainContrast(); if (this.isMenuFlag == "d") { @@ -1518,18 +1519,39 @@ // window.MXModel=null; // } else { var that = this; - window.model = sgworld.Creator.create3DTilesets( - "", - modelUrl + "/tileset/m/SN/tileset.json", - {}, - {}, - "0", - true, - (data) => { - sgworld.Navigate.flyToObj(data); - that.setclippingModel(); - } - ); + if (window.model){ + that.modelClipping(); + }else { + var tileset = Viewer.scene.primitives.add( + new Cesium.Cesium3DTileset({ + name: res.cnName, + url: modelUrl+ "/tileset/m/SN/tileset.json", + maximumScreenSpaceError: 64, // 鏈�澶у睆骞曠┖闂撮敊璇細16 + maximumMemoryUsage: 768, // 鏈�澶у唴瀛橈細512 + dynamicScreenSpaceError: true, // 鍑忓皯绂荤浉鏈鸿緝杩滅殑灞忓箷绌洪棿閿欒锛歠alse + skipLevelOfDetail: true, // 鍦ㄩ亶鍘嗘椂鍊欒烦杩囪鎯咃細false + }) + ); + tileset.readyPromise.then((tileset) => { + tileset.id = res.cnName; + tileset.layerId = res.id; + Viewer.flyTo(tileset); + that.modelClipping(); + }); + window.model = tileset + } + // window.model = sgworld.Creator.create3DTilesets( + // "", + // modelUrl + "/tileset/m/SN/tileset.json", + // {}, + // {}, + // "0", + // true, + // (data) => { + // sgworld.Navigate.flyToObj(data); + // that.setclippingModel(); + // } + // ); break; case "d9": //绠¢亾鍒嗘瀽 @@ -1689,6 +1711,96 @@ break; } }, + + //妯″瀷瑁佸垏 + modelClipping() { + const scene = Viewer.scene; + let targetY = 0.0; + let planeEntities = []; + let selectedPlane; + let clippingPlanes = new Cesium.ClippingPlaneCollection({ + planes: [ // ClippingPlane瀵硅薄鏁扮粍闆嗗悎 + new Cesium.ClippingPlane( // 瑁佸垏闈� + new Cesium.Cartesian3(0.0, 0.0, -1.0), // 娉曠嚎鏂瑰悜 + 0.0 // 鍘熺偣鍒板钩闈㈢殑鏈�鐭窛绂伙紝璁剧疆0灏卞ソ + ), + ], + edgeWidth: 1.0, // 妯″瀷琚鍒囬儴鍒嗙殑鎴潰绾垮 + }); + let boundingSphere = window.model.boundingSphere; + // 鍒涘缓娣诲姞瑁佸壀骞抽潰 + for (let i = 0; i < clippingPlanes.length; ++i) { + const plane = clippingPlanes.get(i); + const planeEntity = Viewer.entities.add({ + position: boundingSphere.center, + plane: { + dimensions: new Cesium.Cartesian2( + boundingSphere.radius * 1.5, + boundingSphere.radius * 1.5 + ), + material: Cesium.Color.WHITE.withAlpha(0.1), + plane: new Cesium.CallbackProperty( + // 娣诲姞缁戝畾浜嬩欢锛屼笉鏂皟鐢� + createPlaneUpdateFunction(plane), + false + ), + outline: true, + outlineColor: Cesium.Color.WHITE, + }, + }); + planeEntities.push(planeEntity); + } + window.model.clippingPlanes = clippingPlanes; + + // Select plane when mouse down + // 缁戝畾涓婄Щ鍔ㄤ簨浠� + const downHandler = new Cesium.ScreenSpaceEventHandler( + Viewer.scene.canvas + ); + downHandler.setInputAction(function (movement) { + const pickedObject = scene.pick(movement.position); + if ( + Cesium.defined(pickedObject) && + Cesium.defined(pickedObject.id.plane) + ) { + selectedPlane = pickedObject.id.plane; + selectedPlane.material = Cesium.Color.WHITE.withAlpha(0.05); + selectedPlane.outlineColor = Cesium.Color.WHITE; + scene.screenSpaceCameraController.enableInputs = false; + } + }, Cesium.ScreenSpaceEventType.LEFT_DOWN); + + // Release plane on mouse up + // 缁戝畾涓嬬Щ鍔ㄤ簨浠� + const upHandler = new Cesium.ScreenSpaceEventHandler( + Viewer.scene.canvas + ); + upHandler.setInputAction(function () { + if (Cesium.defined(selectedPlane)) { + selectedPlane.material = Cesium.Color.WHITE.withAlpha(0.1); + selectedPlane.outlineColor = Cesium.Color.WHITE; + selectedPlane = undefined; + } + scene.screenSpaceCameraController.enableInputs = true; + }, Cesium.ScreenSpaceEventType.LEFT_UP); + // Update plane on mouse move + const moveHandler = new Cesium.ScreenSpaceEventHandler( + Viewer.scene.canvas + ); + moveHandler.setInputAction(function (movement) { + if (Cesium.defined(selectedPlane)) { + const deltaY = movement.startPosition.y - movement.endPosition.y; + targetY += deltaY; + } + }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); + function createPlaneUpdateFunction(plane) { + return function () { + plane.distance = targetY; + return plane; + }; + } + }, + //鍏抽棴绠¢亾淇℃伅寮圭獥 closePipelinePop(){ this.$refs && diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue index 04456b5..3aa0188 100644 --- a/src/views/Tools/LayerTree.vue +++ b/src/views/Tools/LayerTree.vue @@ -564,7 +564,7 @@ for (var i in Viewer.scene.primitives._primitives) { Viewer.scene.primitives._primitives[i].show = checked; if (Viewer.scene.primitives._primitives[i].id == data.cnName) { - std.push(res.id); + // std.push(res.id); Viewer.flyTo(Viewer.scene.primitives._primitives[i]); } } @@ -669,7 +669,6 @@ }); window.map.addLayer(vectorLayer); } else if (res.serveType == "Tileset") { - var tileset = Viewer.scene.primitives.add( new Cesium.Cesium3DTileset({ name: res.cnName, @@ -680,13 +679,13 @@ skipLevelOfDetail: true, // 鍦ㄩ亶鍘嗘椂鍊欒烦杩囪鎯咃細false }) ); - tileset.readyPromise.then((tileset) => { tileset.id = res.cnName; tileset.layerId = res.id; this.tileSet(tileset, parseFloat(res.elev)) Viewer.flyTo(tileset); }); + window.model = tileset } }, -- Gitblit v1.9.3