From d334518da7825a912d3358b20761ed4cb99691d9 Mon Sep 17 00:00:00 2001 From: zh <972939975@qq.com> Date: Wed, 27 Aug 2025 00:56:56 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BC=A0=E6=A0=87=E5=B7=A6=E9=94=AE=E7=82=B9?= =?UTF-8?q?=E5=87=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Global/ClickCallback/index.js | 374 ++++++++++++------ .../MultiViewportMode/ClickCallback/index.js | 374 ++++++++++++------ src/Global/SplitScreen/ClickCallback/index.js | 374 ++++++++++++------ src/Global/global.js | 2 +- src/Global/mouseRightMenu/index.js | 6 +- src/Obj/Base/CurvelineObject/index.js | 7 +- 6 files changed, 779 insertions(+), 358 deletions(-) diff --git a/src/Global/ClickCallback/index.js b/src/Global/ClickCallback/index.js index cc940af..33913dc 100644 --- a/src/Global/ClickCallback/index.js +++ b/src/Global/ClickCallback/index.js @@ -72,13 +72,267 @@ function openLeftClick(sdk, cb) { click = true }, 600); if (!YJ.Measure.GetMeasureStatus() && cartesian) { - let flag = false + const pick = sdk.viewer.scene.pick(movement.position) + if (pick) { + if (pick.id) { + let entityId + // 矢量 + if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) { + let obj = leftClickCallbackMap.get(pick.id.parentId) + if (obj.that.picking && obj.that.geojson) { + for (let i = 0; i < obj.that.geojson.features.length; i++) { + if (obj.that.geojson.features[i].id === pick.id._id) { + obj.callback( + movement, + obj.that.geojson.features[i].id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + else if (typeof pick.id.id == 'string') { + let array = pick.id.id.split('-') + array.splice(array.length - 1, 1) + entityId = array.join('-') + } + + if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) { + let obj = leftClickCallbackMap.get(pick.id.properties.id._value) + if (obj.that.picking) { + obj.callback( + movement, + pick.id.properties.id._value, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + else if (leftClickCallbackMap.has(pick.id.id)) { + let obj = leftClickCallbackMap.get(pick.id.id) + if (obj.that.type === 'PolygonObject') { + // 是否可点击y + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let pt = turf.point([pos84.lng, pos84.lat]); + let polyPos = [] + for (let i = 0; i < obj.that.options.positions.length; i++) { + polyPos.push([ + obj.that.options.positions[i].lng, + obj.that.options.positions[i].lat + ]) + } + polyPos.push([ + obj.that.options.positions[0].lng, + obj.that.options.positions[0].lat + ]) + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 聚集地 + else if (obj.that.type === 'AssembleObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let positions = obj.that.computeAssemble(obj.that.options.positions, true) + let pt = turf.point([pos84.lng, pos84.lat]); + let polyPos = [] + for (let i = 0; i < positions.length; i += 2) { + polyPos.push([ + positions[i], + positions[i + 1] + ]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 单箭头 + else if (obj.that.type === 'AttackArrowObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let pt = turf.point([pos84.lng, pos84.lat]); + let positions = obj.that.computeAttackArrow(obj.that.options.positions) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + let pos84 = cartesian3Towgs84(positions[m], sdk.viewer) + polyPos.push([pos84.lng, pos84.lat]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 双箭头 + else if (obj.that.type === 'PincerArrowObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 5) { + let pt = turf.point([pos84.lng, pos84.lat]); + let positions = obj.that.computePincerArrow(obj.that.options.positions) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + let pos84 = cartesian3Towgs84(positions[m], sdk.viewer) + polyPos.push([pos84.lng, pos84.lat]) + } + let pos84_0 = cartesian3Towgs84(positions[0], sdk.viewer) + polyPos.push([pos84_0.lng, pos84_0.lat]) + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 圆 + else if (obj.that.type === 'CircleObject') { + if (obj.that.picking) { + let pt = turf.point([pos84.lng, pos84.lat]); + if (obj.that.options.center && obj.that.options.radius) { + let center = [obj.that.options.center.lng, obj.that.options.center.lat]; + let radius = obj.that.options.radius / 1000; + let options = { steps: 360, units: 'kilometers' }; + let circle = turf.circle(center, radius, options); + let contain = turf.booleanPointInPolygon(pt, circle); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + + } + } + // 扇形 + else if (obj.that.type === 'SectorObject') { + if (obj.that.picking) { + let pt = turf.point([pos84.lng, pos84.lat]); + if (obj.that.options.center && obj.that.options.radius && obj.that.options.startAngle && obj.that.options.endAngle) { + let positions = obj.that.calSector(obj.that.options.center, obj.that.options.radius, obj.that.options.startAngle, obj.that.options.endAngle, undefined, true) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + polyPos.push([positions[m].lng, positions[m].lat]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + + } + } + if (obj.that.picking) { + obj.callback( + movement, + pick.id.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + else if (entityId && leftClickCallbackMap.has(entityId)) { + let obj = leftClickCallbackMap.get(entityId) + if (obj.that.picking) { + obj.callback( + movement, + entityId, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + else if (pick.primitive) { + if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) { + let obj = leftClickCallbackMap.get(pick.id) + obj.callback( + movement, + pick.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + else { + if (pick.primitive && pick.primitive.id) { + if (leftClickCallbackMap.has(pick.primitive.id)) { + let obj = leftClickCallbackMap.get(pick.primitive.id) + if (obj.that.picking) { + if (obj.that.type === 'bim') { + if (YJ.Global.getBimPickStatus(sdk)) { + obj.callback( + movement, + pick.primitive, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else { + obj.callback( + movement, + pick.primitive.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + } + if (pick.content && (!pick.primitive || !pick.primitive.id)) { + if (leftClickCallbackMap.has(pick.content.tileset.id)) { + let obj = leftClickCallbackMap.get(pick.content.tileset.id) + if (obj.that.picking) { + if (obj.that.type === 'bim') { + if (YJ.Global.getBimPickStatus(sdk)) { + obj.callback( + movement, + pick.content.tileset, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else { + obj.callback( + movement, + pick.content.tileset.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + } for (let i = leftClickCallbackMap.size - 1; i >= 0; i--) { let key = Array.from(leftClickCallbackMap.keys())[i] let obj = leftClickCallbackMap.get(key) if (obj) { - - if (obj.that) { + if (obj.that && obj.that.show && (obj.that.entity && obj.that.entity.show)) { // 是否为多边形 if (obj.that.type === 'PolygonObject') { // 是否可点击y @@ -103,7 +357,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -129,7 +382,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -153,7 +405,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -179,7 +430,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -200,7 +450,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -224,7 +473,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -234,114 +482,6 @@ function openLeftClick(sdk, cb) { } } } - if (!flag) { - const pick = sdk.viewer.scene.pick(movement.position) - if (pick) { - if (pick.id) { - let entityId - // 矢量 - if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) { - let obj = leftClickCallbackMap.get(pick.id.parentId) - if (obj.that.picking && obj.that.geojson) { - for (let i = 0; i < obj.that.geojson.features.length; i++) { - if (obj.that.geojson.features[i].id === pick.id._id) { - obj.callback( - movement, - obj.that.geojson.features[i].id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - } - else if (typeof pick.id.id == 'string') { - let array = pick.id.id.split('-') - array.splice(array.length - 1, 1) - entityId = array.join('-') - } - - if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) { - let obj = leftClickCallbackMap.get(pick.id.properties.id._value) - if (obj.that.picking) { - obj.callback( - movement, - pick.id.properties.id._value, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else if (leftClickCallbackMap.has(pick.id.id)) { - let obj = leftClickCallbackMap.get(pick.id.id) - if (obj.that.picking) { - obj.callback( - movement, - pick.id.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else if (entityId && leftClickCallbackMap.has(entityId)) { - let obj = leftClickCallbackMap.get(entityId) - if (obj.that.picking) { - obj.callback( - movement, - entityId, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else if (pick.primitive) { - if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) { - let obj = leftClickCallbackMap.get(pick.id) - obj.callback( - movement, - pick.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - else { - if (pick.primitive && pick.primitive.id) { - if (leftClickCallbackMap.has(pick.primitive.id)) { - let obj = leftClickCallbackMap.get(pick.primitive.id) - if (obj.that.picking) { - if (obj.that.type === 'bim') { - if (YJ.Global.getBimPickStatus(sdk)) { - obj.callback( - movement, - pick.primitive, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else { - obj.callback( - movement, - pick.primitive.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - } - } - if (pick.content && (!pick.primitive || !pick.primitive.id)) { - if (leftClickCallbackMap.has(pick.content.tileset.id)) { - let obj = leftClickCallbackMap.get(pick.content.tileset.id) - if (obj.that.picking) { - if (obj.that.type === 'bim') { - if (YJ.Global.getBimPickStatus(sdk)) { - obj.callback( - movement, - pick.content.tileset, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else { - obj.callback( - movement, - pick.content.tileset.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - } - } - } } } diff --git a/src/Global/MultiViewportMode/ClickCallback/index.js b/src/Global/MultiViewportMode/ClickCallback/index.js index cc940af..33913dc 100644 --- a/src/Global/MultiViewportMode/ClickCallback/index.js +++ b/src/Global/MultiViewportMode/ClickCallback/index.js @@ -72,13 +72,267 @@ function openLeftClick(sdk, cb) { click = true }, 600); if (!YJ.Measure.GetMeasureStatus() && cartesian) { - let flag = false + const pick = sdk.viewer.scene.pick(movement.position) + if (pick) { + if (pick.id) { + let entityId + // 矢量 + if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) { + let obj = leftClickCallbackMap.get(pick.id.parentId) + if (obj.that.picking && obj.that.geojson) { + for (let i = 0; i < obj.that.geojson.features.length; i++) { + if (obj.that.geojson.features[i].id === pick.id._id) { + obj.callback( + movement, + obj.that.geojson.features[i].id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + else if (typeof pick.id.id == 'string') { + let array = pick.id.id.split('-') + array.splice(array.length - 1, 1) + entityId = array.join('-') + } + + if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) { + let obj = leftClickCallbackMap.get(pick.id.properties.id._value) + if (obj.that.picking) { + obj.callback( + movement, + pick.id.properties.id._value, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + else if (leftClickCallbackMap.has(pick.id.id)) { + let obj = leftClickCallbackMap.get(pick.id.id) + if (obj.that.type === 'PolygonObject') { + // 是否可点击y + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let pt = turf.point([pos84.lng, pos84.lat]); + let polyPos = [] + for (let i = 0; i < obj.that.options.positions.length; i++) { + polyPos.push([ + obj.that.options.positions[i].lng, + obj.that.options.positions[i].lat + ]) + } + polyPos.push([ + obj.that.options.positions[0].lng, + obj.that.options.positions[0].lat + ]) + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 聚集地 + else if (obj.that.type === 'AssembleObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let positions = obj.that.computeAssemble(obj.that.options.positions, true) + let pt = turf.point([pos84.lng, pos84.lat]); + let polyPos = [] + for (let i = 0; i < positions.length; i += 2) { + polyPos.push([ + positions[i], + positions[i + 1] + ]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 单箭头 + else if (obj.that.type === 'AttackArrowObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let pt = turf.point([pos84.lng, pos84.lat]); + let positions = obj.that.computeAttackArrow(obj.that.options.positions) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + let pos84 = cartesian3Towgs84(positions[m], sdk.viewer) + polyPos.push([pos84.lng, pos84.lat]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 双箭头 + else if (obj.that.type === 'PincerArrowObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 5) { + let pt = turf.point([pos84.lng, pos84.lat]); + let positions = obj.that.computePincerArrow(obj.that.options.positions) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + let pos84 = cartesian3Towgs84(positions[m], sdk.viewer) + polyPos.push([pos84.lng, pos84.lat]) + } + let pos84_0 = cartesian3Towgs84(positions[0], sdk.viewer) + polyPos.push([pos84_0.lng, pos84_0.lat]) + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 圆 + else if (obj.that.type === 'CircleObject') { + if (obj.that.picking) { + let pt = turf.point([pos84.lng, pos84.lat]); + if (obj.that.options.center && obj.that.options.radius) { + let center = [obj.that.options.center.lng, obj.that.options.center.lat]; + let radius = obj.that.options.radius / 1000; + let options = { steps: 360, units: 'kilometers' }; + let circle = turf.circle(center, radius, options); + let contain = turf.booleanPointInPolygon(pt, circle); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + + } + } + // 扇形 + else if (obj.that.type === 'SectorObject') { + if (obj.that.picking) { + let pt = turf.point([pos84.lng, pos84.lat]); + if (obj.that.options.center && obj.that.options.radius && obj.that.options.startAngle && obj.that.options.endAngle) { + let positions = obj.that.calSector(obj.that.options.center, obj.that.options.radius, obj.that.options.startAngle, obj.that.options.endAngle, undefined, true) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + polyPos.push([positions[m].lng, positions[m].lat]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + + } + } + if (obj.that.picking) { + obj.callback( + movement, + pick.id.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + else if (entityId && leftClickCallbackMap.has(entityId)) { + let obj = leftClickCallbackMap.get(entityId) + if (obj.that.picking) { + obj.callback( + movement, + entityId, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + else if (pick.primitive) { + if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) { + let obj = leftClickCallbackMap.get(pick.id) + obj.callback( + movement, + pick.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + else { + if (pick.primitive && pick.primitive.id) { + if (leftClickCallbackMap.has(pick.primitive.id)) { + let obj = leftClickCallbackMap.get(pick.primitive.id) + if (obj.that.picking) { + if (obj.that.type === 'bim') { + if (YJ.Global.getBimPickStatus(sdk)) { + obj.callback( + movement, + pick.primitive, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else { + obj.callback( + movement, + pick.primitive.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + } + if (pick.content && (!pick.primitive || !pick.primitive.id)) { + if (leftClickCallbackMap.has(pick.content.tileset.id)) { + let obj = leftClickCallbackMap.get(pick.content.tileset.id) + if (obj.that.picking) { + if (obj.that.type === 'bim') { + if (YJ.Global.getBimPickStatus(sdk)) { + obj.callback( + movement, + pick.content.tileset, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else { + obj.callback( + movement, + pick.content.tileset.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + } for (let i = leftClickCallbackMap.size - 1; i >= 0; i--) { let key = Array.from(leftClickCallbackMap.keys())[i] let obj = leftClickCallbackMap.get(key) if (obj) { - - if (obj.that) { + if (obj.that && obj.that.show && (obj.that.entity && obj.that.entity.show)) { // 是否为多边形 if (obj.that.type === 'PolygonObject') { // 是否可点击y @@ -103,7 +357,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -129,7 +382,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -153,7 +405,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -179,7 +430,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -200,7 +450,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -224,7 +473,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -234,114 +482,6 @@ function openLeftClick(sdk, cb) { } } } - if (!flag) { - const pick = sdk.viewer.scene.pick(movement.position) - if (pick) { - if (pick.id) { - let entityId - // 矢量 - if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) { - let obj = leftClickCallbackMap.get(pick.id.parentId) - if (obj.that.picking && obj.that.geojson) { - for (let i = 0; i < obj.that.geojson.features.length; i++) { - if (obj.that.geojson.features[i].id === pick.id._id) { - obj.callback( - movement, - obj.that.geojson.features[i].id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - } - else if (typeof pick.id.id == 'string') { - let array = pick.id.id.split('-') - array.splice(array.length - 1, 1) - entityId = array.join('-') - } - - if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) { - let obj = leftClickCallbackMap.get(pick.id.properties.id._value) - if (obj.that.picking) { - obj.callback( - movement, - pick.id.properties.id._value, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else if (leftClickCallbackMap.has(pick.id.id)) { - let obj = leftClickCallbackMap.get(pick.id.id) - if (obj.that.picking) { - obj.callback( - movement, - pick.id.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else if (entityId && leftClickCallbackMap.has(entityId)) { - let obj = leftClickCallbackMap.get(entityId) - if (obj.that.picking) { - obj.callback( - movement, - entityId, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else if (pick.primitive) { - if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) { - let obj = leftClickCallbackMap.get(pick.id) - obj.callback( - movement, - pick.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - else { - if (pick.primitive && pick.primitive.id) { - if (leftClickCallbackMap.has(pick.primitive.id)) { - let obj = leftClickCallbackMap.get(pick.primitive.id) - if (obj.that.picking) { - if (obj.that.type === 'bim') { - if (YJ.Global.getBimPickStatus(sdk)) { - obj.callback( - movement, - pick.primitive, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else { - obj.callback( - movement, - pick.primitive.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - } - } - if (pick.content && (!pick.primitive || !pick.primitive.id)) { - if (leftClickCallbackMap.has(pick.content.tileset.id)) { - let obj = leftClickCallbackMap.get(pick.content.tileset.id) - if (obj.that.picking) { - if (obj.that.type === 'bim') { - if (YJ.Global.getBimPickStatus(sdk)) { - obj.callback( - movement, - pick.content.tileset, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else { - obj.callback( - movement, - pick.content.tileset.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - } - } - } } } diff --git a/src/Global/SplitScreen/ClickCallback/index.js b/src/Global/SplitScreen/ClickCallback/index.js index cc940af..33913dc 100644 --- a/src/Global/SplitScreen/ClickCallback/index.js +++ b/src/Global/SplitScreen/ClickCallback/index.js @@ -72,13 +72,267 @@ function openLeftClick(sdk, cb) { click = true }, 600); if (!YJ.Measure.GetMeasureStatus() && cartesian) { - let flag = false + const pick = sdk.viewer.scene.pick(movement.position) + if (pick) { + if (pick.id) { + let entityId + // 矢量 + if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) { + let obj = leftClickCallbackMap.get(pick.id.parentId) + if (obj.that.picking && obj.that.geojson) { + for (let i = 0; i < obj.that.geojson.features.length; i++) { + if (obj.that.geojson.features[i].id === pick.id._id) { + obj.callback( + movement, + obj.that.geojson.features[i].id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + else if (typeof pick.id.id == 'string') { + let array = pick.id.id.split('-') + array.splice(array.length - 1, 1) + entityId = array.join('-') + } + + if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) { + let obj = leftClickCallbackMap.get(pick.id.properties.id._value) + if (obj.that.picking) { + obj.callback( + movement, + pick.id.properties.id._value, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + else if (leftClickCallbackMap.has(pick.id.id)) { + let obj = leftClickCallbackMap.get(pick.id.id) + if (obj.that.type === 'PolygonObject') { + // 是否可点击y + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let pt = turf.point([pos84.lng, pos84.lat]); + let polyPos = [] + for (let i = 0; i < obj.that.options.positions.length; i++) { + polyPos.push([ + obj.that.options.positions[i].lng, + obj.that.options.positions[i].lat + ]) + } + polyPos.push([ + obj.that.options.positions[0].lng, + obj.that.options.positions[0].lat + ]) + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 聚集地 + else if (obj.that.type === 'AssembleObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let positions = obj.that.computeAssemble(obj.that.options.positions, true) + let pt = turf.point([pos84.lng, pos84.lat]); + let polyPos = [] + for (let i = 0; i < positions.length; i += 2) { + polyPos.push([ + positions[i], + positions[i + 1] + ]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 单箭头 + else if (obj.that.type === 'AttackArrowObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let pt = turf.point([pos84.lng, pos84.lat]); + let positions = obj.that.computeAttackArrow(obj.that.options.positions) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + let pos84 = cartesian3Towgs84(positions[m], sdk.viewer) + polyPos.push([pos84.lng, pos84.lat]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 双箭头 + else if (obj.that.type === 'PincerArrowObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 5) { + let pt = turf.point([pos84.lng, pos84.lat]); + let positions = obj.that.computePincerArrow(obj.that.options.positions) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + let pos84 = cartesian3Towgs84(positions[m], sdk.viewer) + polyPos.push([pos84.lng, pos84.lat]) + } + let pos84_0 = cartesian3Towgs84(positions[0], sdk.viewer) + polyPos.push([pos84_0.lng, pos84_0.lat]) + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + } + // 圆 + else if (obj.that.type === 'CircleObject') { + if (obj.that.picking) { + let pt = turf.point([pos84.lng, pos84.lat]); + if (obj.that.options.center && obj.that.options.radius) { + let center = [obj.that.options.center.lng, obj.that.options.center.lat]; + let radius = obj.that.options.radius / 1000; + let options = { steps: 360, units: 'kilometers' }; + let circle = turf.circle(center, radius, options); + let contain = turf.booleanPointInPolygon(pt, circle); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + + } + } + // 扇形 + else if (obj.that.type === 'SectorObject') { + if (obj.that.picking) { + let pt = turf.point([pos84.lng, pos84.lat]); + if (obj.that.options.center && obj.that.options.radius && obj.that.options.startAngle && obj.that.options.endAngle) { + let positions = obj.that.calSector(obj.that.options.center, obj.that.options.radius, obj.that.options.startAngle, obj.that.options.endAngle, undefined, true) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + polyPos.push([positions[m].lng, positions[m].lat]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + + } + } + if (obj.that.picking) { + obj.callback( + movement, + pick.id.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + else if (entityId && leftClickCallbackMap.has(entityId)) { + let obj = leftClickCallbackMap.get(entityId) + if (obj.that.picking) { + obj.callback( + movement, + entityId, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + else if (pick.primitive) { + if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) { + let obj = leftClickCallbackMap.get(pick.id) + obj.callback( + movement, + pick.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + return + } + } + } + else { + if (pick.primitive && pick.primitive.id) { + if (leftClickCallbackMap.has(pick.primitive.id)) { + let obj = leftClickCallbackMap.get(pick.primitive.id) + if (obj.that.picking) { + if (obj.that.type === 'bim') { + if (YJ.Global.getBimPickStatus(sdk)) { + obj.callback( + movement, + pick.primitive, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else { + obj.callback( + movement, + pick.primitive.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + } + if (pick.content && (!pick.primitive || !pick.primitive.id)) { + if (leftClickCallbackMap.has(pick.content.tileset.id)) { + let obj = leftClickCallbackMap.get(pick.content.tileset.id) + if (obj.that.picking) { + if (obj.that.type === 'bim') { + if (YJ.Global.getBimPickStatus(sdk)) { + obj.callback( + movement, + pick.content.tileset, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else { + obj.callback( + movement, + pick.content.tileset.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + } for (let i = leftClickCallbackMap.size - 1; i >= 0; i--) { let key = Array.from(leftClickCallbackMap.keys())[i] let obj = leftClickCallbackMap.get(key) if (obj) { - - if (obj.that) { + if (obj.that && obj.that.show && (obj.that.entity && obj.that.entity.show)) { // 是否为多边形 if (obj.that.type === 'PolygonObject') { // 是否可点击y @@ -103,7 +357,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -129,7 +382,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -153,7 +405,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -179,7 +430,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -200,7 +450,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -224,7 +473,6 @@ function openLeftClick(sdk, cb) { movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - flag = true break } } @@ -234,114 +482,6 @@ function openLeftClick(sdk, cb) { } } } - if (!flag) { - const pick = sdk.viewer.scene.pick(movement.position) - if (pick) { - if (pick.id) { - let entityId - // 矢量 - if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) { - let obj = leftClickCallbackMap.get(pick.id.parentId) - if (obj.that.picking && obj.that.geojson) { - for (let i = 0; i < obj.that.geojson.features.length; i++) { - if (obj.that.geojson.features[i].id === pick.id._id) { - obj.callback( - movement, - obj.that.geojson.features[i].id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - } - else if (typeof pick.id.id == 'string') { - let array = pick.id.id.split('-') - array.splice(array.length - 1, 1) - entityId = array.join('-') - } - - if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) { - let obj = leftClickCallbackMap.get(pick.id.properties.id._value) - if (obj.that.picking) { - obj.callback( - movement, - pick.id.properties.id._value, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else if (leftClickCallbackMap.has(pick.id.id)) { - let obj = leftClickCallbackMap.get(pick.id.id) - if (obj.that.picking) { - obj.callback( - movement, - pick.id.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else if (entityId && leftClickCallbackMap.has(entityId)) { - let obj = leftClickCallbackMap.get(entityId) - if (obj.that.picking) { - obj.callback( - movement, - entityId, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else if (pick.primitive) { - if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) { - let obj = leftClickCallbackMap.get(pick.id) - obj.callback( - movement, - pick.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - else { - if (pick.primitive && pick.primitive.id) { - if (leftClickCallbackMap.has(pick.primitive.id)) { - let obj = leftClickCallbackMap.get(pick.primitive.id) - if (obj.that.picking) { - if (obj.that.type === 'bim') { - if (YJ.Global.getBimPickStatus(sdk)) { - obj.callback( - movement, - pick.primitive, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else { - obj.callback( - movement, - pick.primitive.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - } - } - if (pick.content && (!pick.primitive || !pick.primitive.id)) { - if (leftClickCallbackMap.has(pick.content.tileset.id)) { - let obj = leftClickCallbackMap.get(pick.content.tileset.id) - if (obj.that.picking) { - if (obj.that.type === 'bim') { - if (YJ.Global.getBimPickStatus(sdk)) { - obj.callback( - movement, - pick.content.tileset, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - else { - obj.callback( - movement, - pick.content.tileset.id, - cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) - } - } - } - } - } - } } } diff --git a/src/Global/global.js b/src/Global/global.js index 852544a..924c4eb 100644 --- a/src/Global/global.js +++ b/src/Global/global.js @@ -29,7 +29,7 @@ function getCurrentView(sdk) { // heading: viewer.camera.heading, // pitch: viewer.camera.pitch, // roll: viewer.camera.roll, - position: tools.cartesian3Towgs84(viewer.camera.position, viewer), + position: tools.cartesian3Towgs84(viewer.camera._positionWC, viewer), orientation: { heading: Cesium.Math.toDegrees(viewer.camera.heading), pitch: Cesium.Math.toDegrees(viewer.camera.pitch), diff --git a/src/Global/mouseRightMenu/index.js b/src/Global/mouseRightMenu/index.js index 8b9a223..e8da3cc 100644 --- a/src/Global/mouseRightMenu/index.js +++ b/src/Global/mouseRightMenu/index.js @@ -92,12 +92,12 @@ function MouseRightMenu(sdk, status, callBack) { entityId = entityId.parentId } let addedMenu = '' - let that = sdk.entityMap.get(entityId) + let that = sdk.entityMap.get(entityId+'') if (!that && entityId) { - let array = entityId.split('-') + let array = (entityId+'').split('-') array.splice(array.length - 1, 1) entityId = array.join('-') - that = sdk.entityMap.get(entityId) + that = sdk.entityMap.get(entityId+'') } if (that && that.picking) { diff --git a/src/Obj/Base/CurvelineObject/index.js b/src/Obj/Base/CurvelineObject/index.js index 8180261..2a8c9a6 100644 --- a/src/Obj/Base/CurvelineObject/index.js +++ b/src/Obj/Base/CurvelineObject/index.js @@ -348,9 +348,10 @@ class CurvelineObject extends Base { this._elms.lineWidth.forEach(item => { item.value = this.options.width }) - this.entity && - this.entity.polyline && - (this.entity.polyline.width = this.options.width) + if (this.entity && this.entity.polyline) { + this.entity.polyline.width = this.entity.polyline.width + v - this.entity.polyline.oriWidth + this.entity.polyline.oriWidth = this.options.width + } } get lineType() {