@vtx/cs-map 1.0.89 → 1.0.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/assets/excavate_bottom_min.png +0 -0
- package/lib/assets/excavate_kuangqu.png +0 -0
- package/lib/cesium-tiles-layer/demo/assets/baseMapImg-1.png +0 -0
- package/lib/cesium-tiles-layer/demo/assets/baseMapImg.png +0 -0
- package/lib/cesium-tiles-layer/demo/assets/round.png +0 -0
- package/lib/cesium-tiles-layer/demo/assets/water.png +0 -0
- package/lib/cesium-tiles-layer/demo/index.css +4 -0
- package/lib/cesium-tiles-layer/demo/index.less +4 -0
- package/lib/circle-fly/index.js +25 -15
- package/lib/circle-fly/index.js.map +1 -1
- package/lib/excavation-analysis/TilesetCut.js +203 -0
- package/lib/excavation-analysis/TilesetCut.js.map +1 -0
- package/lib/excavation-analysis/hooks/useDrawHandler.js +142 -0
- package/lib/excavation-analysis/hooks/useDrawHandler.js.map +1 -0
- package/lib/excavation-analysis/hooks/useTerrainClipPlan.js +292 -0
- package/lib/excavation-analysis/hooks/useTerrainClipPlan.js.map +1 -0
- package/lib/excavation-analysis/hooks/useTileSetCut.js +31 -0
- package/lib/excavation-analysis/hooks/useTileSetCut.js.map +1 -0
- package/lib/excavation-analysis/index.js +84 -0
- package/lib/excavation-analysis/index.js.map +1 -0
- package/lib/excavation-analysis/style/css.js +4 -0
- package/lib/excavation-analysis/style/css.js.map +1 -0
- package/lib/excavation-analysis/style/index.css +0 -0
- package/lib/excavation-analysis/style/index.js +4 -0
- package/lib/excavation-analysis/style/index.js.map +1 -0
- package/lib/excavation-analysis/style/index.less +0 -0
- package/lib/fly-line-layer/FlyLineLayer.js +12 -9
- package/lib/fly-line-layer/FlyLineLayer.js.map +1 -1
- package/lib/highlight-layer/HighlightLayer.js +1 -1
- package/lib/highlight-layer/HighlightLayer.js.map +1 -1
- package/lib/map/Popup.js +27 -15
- package/lib/map/Popup.js.map +1 -1
- package/lib/map/base/imagery/geoq/GeoQImageryProvider.js +4 -4
- package/lib/map/base/imagery/geoq/GeoQImageryProvider.js.map +1 -1
- package/lib/map/base/imagery/tdt/JiangSuTdtImageryProvider.js +48 -0
- package/lib/map/base/imagery/tdt/JiangSuTdtImageryProvider.js.map +1 -0
- package/lib/map/base/index.js +25 -2
- package/lib/map/base/index.js.map +1 -1
- package/lib/map/index.js +31 -22
- package/lib/map/index.js.map +1 -1
- package/lib/split-screen/index.js +102 -0
- package/lib/split-screen/index.js.map +1 -0
- package/lib/split-screen/style/css.js +2 -0
- package/lib/split-screen/style/css.js.map +1 -0
- package/lib/split-screen/style/index.js +2 -0
- package/lib/split-screen/style/index.js.map +1 -0
- package/lib/wall/WallGeometry.js +5 -3
- package/lib/wall/WallGeometry.js.map +1 -1
- package/lib/water-surface-layer/WaterSurfaceLayer.js +25 -8
- package/lib/water-surface-layer/WaterSurfaceLayer.js.map +1 -1
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
-moz-user-select: none;
|
|
37
37
|
-ms-user-select: none;
|
|
38
38
|
user-select: none;
|
|
39
|
+
pointer-events: none;
|
|
39
40
|
}
|
|
40
41
|
.company-title {
|
|
41
42
|
color: #ffffff;
|
|
@@ -43,6 +44,8 @@
|
|
|
43
44
|
background: linear-gradient(180deg, #4a6199 0%, rgba(16, 32, 65, 0.6) 52%, #4a6199 100%);
|
|
44
45
|
padding: 2px 4px;
|
|
45
46
|
margin-bottom: 10px;
|
|
47
|
+
white-space: nowrap;
|
|
48
|
+
pointer-events: auto;
|
|
46
49
|
}
|
|
47
50
|
.company-body {
|
|
48
51
|
width: 32px;
|
|
@@ -63,6 +66,7 @@
|
|
|
63
66
|
-webkit-animation: ripple 0.8s linear infinite;
|
|
64
67
|
animation: ripple 0.8s linear infinite;
|
|
65
68
|
margin-bottom: 4px;
|
|
69
|
+
pointer-events: auto;
|
|
66
70
|
}
|
|
67
71
|
.company-body-icon {
|
|
68
72
|
width: 18px;
|
|
@@ -26,12 +26,15 @@
|
|
|
26
26
|
align-items: center;
|
|
27
27
|
justify-content: center;
|
|
28
28
|
user-select: none;
|
|
29
|
+
pointer-events: none;
|
|
29
30
|
|
|
30
31
|
&-title {
|
|
31
32
|
color: #ffffff;
|
|
32
33
|
background: linear-gradient(180deg, #4a6199 0%, rgba(16, 32, 65, 0.6) 52%, #4a6199 100%);
|
|
33
34
|
padding: 2px 4px;
|
|
34
35
|
margin-bottom: 10px;
|
|
36
|
+
white-space: nowrap;
|
|
37
|
+
pointer-events: auto;
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
&-body {
|
|
@@ -45,6 +48,7 @@
|
|
|
45
48
|
justify-content: center;
|
|
46
49
|
animation: ripple .8s linear infinite;
|
|
47
50
|
margin-bottom: 4px;
|
|
51
|
+
pointer-events: auto;
|
|
48
52
|
|
|
49
53
|
&-icon {
|
|
50
54
|
width: 18px;
|
package/lib/circle-fly/index.js
CHANGED
|
@@ -9,6 +9,7 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
9
9
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
10
|
var _useProps2 = _interopRequireDefault(require("../use-props"));
|
|
11
11
|
var _cesium = require("cesium");
|
|
12
|
+
var _ahooks = require("ahooks");
|
|
12
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
14
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
14
15
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
@@ -24,7 +25,13 @@ var CircleFly = function CircleFly(props) {
|
|
|
24
25
|
var data = props.data,
|
|
25
26
|
height = props.height,
|
|
26
27
|
speed = props.speed,
|
|
27
|
-
angle = props.angle
|
|
28
|
+
angle = props.angle,
|
|
29
|
+
play = props.play;
|
|
30
|
+
var playRef = (0, _react.useRef)(play);
|
|
31
|
+
(0, _ahooks.useUpdateEffect)(function () {
|
|
32
|
+
map.clock.shouldAnimate = play;
|
|
33
|
+
playRef.current = play;
|
|
34
|
+
}, [play]);
|
|
28
35
|
(0, _react.useEffect)(function () {
|
|
29
36
|
var distance = height || 15000;
|
|
30
37
|
var seconds = speed || 15;
|
|
@@ -35,27 +42,29 @@ var CircleFly = function CircleFly(props) {
|
|
|
35
42
|
var pitch = _cesium.Math.toRadians(angle || -45);
|
|
36
43
|
var _angle = 360 / seconds;
|
|
37
44
|
var startTime = _cesium.JulianDate.fromDate(new Date());
|
|
38
|
-
var stopTime = _cesium.JulianDate.addSeconds(startTime,
|
|
45
|
+
var stopTime = _cesium.JulianDate.addSeconds(startTime, Infinity, new _cesium.JulianDate());
|
|
39
46
|
map.clock.startTime = startTime.clone(); // 开始时间
|
|
40
47
|
map.clock.stopTime = stopTime.clone(); // 结速时间
|
|
41
48
|
map.clock.currentTime = startTime.clone(); // 当前时间
|
|
42
49
|
map.clock.clockRange = _cesium.ClockRange.CLAMPED; // 行为方式
|
|
43
50
|
map.clock.clockStep = _cesium.ClockStep.SYSTEM_CLOCK; // 时钟设置为当前系统时间; 忽略所有其他设置。
|
|
44
|
-
map.clock.shouldAnimate =
|
|
51
|
+
map.clock.shouldAnimate = play;
|
|
45
52
|
var startHeading = map.camera.heading;
|
|
46
53
|
var timeExecution = function timeExecution() {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
if (playRef.current) {
|
|
55
|
+
var delTime = _cesium.JulianDate.secondsDifference(map.clock.currentTime, map.clock.startTime);
|
|
56
|
+
var heading = _cesium.Math.toRadians(delTime * _angle) + startHeading;
|
|
57
|
+
map.scene.camera.setView({
|
|
58
|
+
destination: position,
|
|
59
|
+
orientation: {
|
|
60
|
+
heading: heading,
|
|
61
|
+
pitch: pitch
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
map.scene.camera.moveBackward(distance);
|
|
65
|
+
if (_cesium.JulianDate.compare(map.clock.currentTime, map.clock.stopTime) >= 0) {
|
|
66
|
+
map.clock.onTick.removeEventListener(timeExecution);
|
|
54
67
|
}
|
|
55
|
-
});
|
|
56
|
-
map.scene.camera.moveBackward(distance);
|
|
57
|
-
if (_cesium.JulianDate.compare(map.clock.currentTime, map.clock.stopTime) >= 0) {
|
|
58
|
-
map.clock.onTick.removeEventListener(timeExecution);
|
|
59
68
|
}
|
|
60
69
|
};
|
|
61
70
|
map.scene.postRender.addEventListener(timeExecution);
|
|
@@ -69,7 +78,8 @@ CircleFly.propTypes = {
|
|
|
69
78
|
data: _propTypes["default"].array,
|
|
70
79
|
height: _propTypes["default"].number,
|
|
71
80
|
speed: _propTypes["default"].number,
|
|
72
|
-
angle: _propTypes["default"].number
|
|
81
|
+
angle: _propTypes["default"].number,
|
|
82
|
+
play: _propTypes["default"].bool
|
|
73
83
|
};
|
|
74
84
|
var _default = exports["default"] = CircleFly;
|
|
75
85
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_useProps2","_cesium","obj","__esModule","_getRequireWildcardCache","e","WeakMap","r","t","_typeof","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","Array","from","test","len","length","arr2","l","Symbol","iterator","f","next","done","push","value","isArray","CircleFly","props","_useProps","useProps","map","data","height","speed","angle","useEffect","distance","seconds","_data","lon","lat","position","Cartesian3","fromDegrees","pitch","CesiumMath","toRadians","_angle","startTime","JulianDate","fromDate","Date","stopTime","addSeconds","
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_useProps2","_cesium","_ahooks","obj","__esModule","_getRequireWildcardCache","e","WeakMap","r","t","_typeof","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","Array","from","test","len","length","arr2","l","Symbol","iterator","f","next","done","push","value","isArray","CircleFly","props","_useProps","useProps","map","data","height","speed","angle","play","playRef","useRef","useUpdateEffect","clock","shouldAnimate","current","useEffect","distance","seconds","_data","lon","lat","position","Cartesian3","fromDegrees","pitch","CesiumMath","toRadians","_angle","startTime","JulianDate","fromDate","Date","stopTime","addSeconds","Infinity","clone","currentTime","clockRange","ClockRange","CLAMPED","clockStep","ClockStep","SYSTEM_CLOCK","startHeading","camera","heading","timeExecution","delTime","secondsDifference","scene","setView","destination","orientation","moveBackward","compare","onTick","removeEventListener","postRender","addEventListener","createElement","Fragment","propTypes","PropTypes","array","number","bool","_default","exports"],"sources":["circle-fly/index.js"],"sourcesContent":["import React, {useEffect, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport useProps from '../use-props';\nimport {\n Cartesian3,\n Math as CesiumMath,\n JulianDate,\n ClockRange,\n ClockStep,\n} from 'cesium';\nimport { useUpdateEffect } from 'ahooks';\n\nconst CircleFly = (props) => {\n const {map} = useProps();\n\n const {data, height, speed, angle, play} = props;\n\n const playRef = useRef(play);\n useUpdateEffect(() => {\n map.clock.shouldAnimate = play\n playRef.current = play;\n }, [play]);\n\n useEffect(() => {\n const distance = height || 15000;\n const seconds = speed || 15;\n const [lon, lat] = data;\n\n const position = Cartesian3.fromDegrees(lon, lat, 0);\n\n const pitch = CesiumMath.toRadians(angle || -45);\n const _angle = 360 / seconds;\n\n const startTime = JulianDate.fromDate(new Date());\n const stopTime = JulianDate.addSeconds(startTime, Infinity, new JulianDate());\n map.clock.startTime = startTime.clone(); // 开始时间\n map.clock.stopTime = stopTime.clone(); // 结速时间\n map.clock.currentTime = startTime.clone(); // 当前时间\n map.clock.clockRange = ClockRange.CLAMPED; // 行为方式\n map.clock.clockStep = ClockStep.SYSTEM_CLOCK; // 时钟设置为当前系统时间; 忽略所有其他设置。\n map.clock.shouldAnimate = play;\n\n const startHeading = map.camera.heading;\n\n const timeExecution = () => {\n if (playRef.current) {\n const delTime = JulianDate.secondsDifference(map.clock.currentTime, map.clock.startTime)\n const heading = CesiumMath.toRadians(delTime * _angle) + startHeading\n map.scene.camera.setView({\n destination: position,\n orientation: {\n heading: heading,\n pitch: pitch\n }\n })\n map.scene.camera.moveBackward(distance);\n if (JulianDate.compare(map.clock.currentTime, map.clock.stopTime) >= 0) {\n map.clock.onTick.removeEventListener(timeExecution);\n }\n }\n }\n\n map.scene.postRender.addEventListener(timeExecution);\n\n return () => {\n map.scene.postRender.removeEventListener(timeExecution);\n }\n }, []);\n\n return (\n <></>\n )\n}\n\nCircleFly.propTypes = {\n data: PropTypes.array,\n height: PropTypes.number,\n speed: PropTypes.number,\n angle: PropTypes.number,\n play: PropTypes.bool,\n}\n\nexport default CircleFly;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _cesium = require("cesium");
|
|
8
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
9
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
10
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
11
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
12
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
13
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
14
|
+
// 三维模型裁剪
|
|
15
|
+
var TilesetCut = /*#__PURE__*/function () {
|
|
16
|
+
function TilesetCut(tileset, opt) {
|
|
17
|
+
_classCallCheck(this, TilesetCut);
|
|
18
|
+
if (!tileset) {
|
|
19
|
+
console.log("缺少模型");
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
this.tileset = tileset;
|
|
23
|
+
this.opt = opt || {};
|
|
24
|
+
/**
|
|
25
|
+
* @property {Boolean} iscutOutter 是否为外部裁剪,默认为内部裁剪
|
|
26
|
+
*/
|
|
27
|
+
this._iscutOutter = this.opt.iscutOutter; // 是否为外部裁剪 默认为内部裁剪
|
|
28
|
+
this.cutRegions = []; // 当前裁剪面数组对象
|
|
29
|
+
/* this.modelMatrix = new Matrix4(); // 世界坐标系--》模型坐标系
|
|
30
|
+
Matrix4.inverseTransformation(this.tileset.root.computedTransform, this.modelMatrix) */
|
|
31
|
+
// 建立模型中心点坐标系
|
|
32
|
+
var center = this.tileset.boundingSphere.center;
|
|
33
|
+
var enuMtx4 = _cesium.Transforms.eastNorthUpToFixedFrame(center);
|
|
34
|
+
this.modelMatrix = _cesium.Matrix4.inverse(enuMtx4, new _cesium.Matrix4());
|
|
35
|
+
this.canvas = undefined;
|
|
36
|
+
}
|
|
37
|
+
return _createClass(TilesetCut, [{
|
|
38
|
+
key: "iscutOutter",
|
|
39
|
+
get: function get() {
|
|
40
|
+
return this._iscutOutter;
|
|
41
|
+
},
|
|
42
|
+
set: function set(val) {
|
|
43
|
+
this._iscutOutter = val;
|
|
44
|
+
this.updateShader();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 添加裁剪面
|
|
49
|
+
* @param {Object} attr 参数
|
|
50
|
+
* @param {Cartesian3[]} attr.positions 压平面坐标
|
|
51
|
+
* @param {Number} attr.id 唯一标识
|
|
52
|
+
*/
|
|
53
|
+
}, {
|
|
54
|
+
key: "addRegion",
|
|
55
|
+
value: function addRegion(attr) {
|
|
56
|
+
var _ref = attr || {},
|
|
57
|
+
positions = _ref.positions,
|
|
58
|
+
id = _ref.id;
|
|
59
|
+
if (!id) id = new Date().getTime() + "" + Number(Math.random() * 1000).toFixed(0);
|
|
60
|
+
if (!positions || positions.length < 3) {
|
|
61
|
+
console.log("缺少裁剪面坐标");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
var index = this.cutRegions.findIndex(function (item) {
|
|
65
|
+
return item.id === id;
|
|
66
|
+
});
|
|
67
|
+
if (index == -1) {
|
|
68
|
+
this.cutRegions.push({
|
|
69
|
+
id: id,
|
|
70
|
+
positions: positions
|
|
71
|
+
});
|
|
72
|
+
} else {
|
|
73
|
+
this.cutRegions[index].positions = positions;
|
|
74
|
+
}
|
|
75
|
+
this.updateShader();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 移除裁剪面
|
|
79
|
+
* @param {String} id
|
|
80
|
+
*/
|
|
81
|
+
}, {
|
|
82
|
+
key: "removeRegionById",
|
|
83
|
+
value: function removeRegionById(id) {
|
|
84
|
+
if (id) {
|
|
85
|
+
// 表示移除所有的裁剪面
|
|
86
|
+
var index = this.cutRegions.findIndex(function (item) {
|
|
87
|
+
return item.id === id;
|
|
88
|
+
});
|
|
89
|
+
if (index != -1) this.cutRegions.splice(index, 1);
|
|
90
|
+
} else {
|
|
91
|
+
// 表示移除单个的裁剪面
|
|
92
|
+
this.cutRegions = [];
|
|
93
|
+
}
|
|
94
|
+
this.updateShader();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 销毁
|
|
99
|
+
*/
|
|
100
|
+
}, {
|
|
101
|
+
key: "destroy",
|
|
102
|
+
value: function destroy() {
|
|
103
|
+
this.tileset.customShader = undefined;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* 修改模型着色器
|
|
108
|
+
*/
|
|
109
|
+
}, {
|
|
110
|
+
key: "updateShader",
|
|
111
|
+
value: function updateShader() {
|
|
112
|
+
var _this = this;
|
|
113
|
+
// 定义着色器中裁剪函数
|
|
114
|
+
var fs_textureMapRect = "\n vec4 textureMapRect(vec4 rect, sampler2D map, vec2 xy) {\n // \u5224\u65AD\u5F53\u524D\u56FE\u5143\u5750\u6807\u548C\u591A\u8FB9\u5F62\u5173\u7CFB \u5982\u679C\u5728\u591A\u8FB9\u5F62\u5185 \u8FDB\u884C\u7EB9\u7D20\u62FE\u53D6\n if (xy.x >= rect.x && xy.x <= rect.z && xy.y >= rect.y && xy.y <= rect.w) {\n float w = rect.z - rect.x;\n float h = rect.w - rect.y;\n float s = (xy.x - rect.x) / w;\n float t = (xy.y - rect.y) / h;\n vec4 color = texture(map, vec2(s, 1.0 - t));\n return color;\n }\n return vec4(1.0);\n }\n ";
|
|
115
|
+
var allUniforms = {
|
|
116
|
+
u_inverseModel: {
|
|
117
|
+
type: _cesium.UniformType.MAT4,
|
|
118
|
+
value: this.modelMatrix.clone()
|
|
119
|
+
},
|
|
120
|
+
u_unionCutRegions: {
|
|
121
|
+
type: _cesium.UniformType.BOOL,
|
|
122
|
+
value: this._iscutOutter
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// 构建多区域着色器
|
|
127
|
+
var fs = "";
|
|
128
|
+
this.cutRegions.forEach(function (element) {
|
|
129
|
+
var uniforms = _this.createUniforms(element.positions, element.id);
|
|
130
|
+
allUniforms = (0, _cesium.combine)(allUniforms, uniforms);
|
|
131
|
+
fs += "\n vec4 color_".concat(element.id, " = textureMapRect(u_rect_").concat(element.id, ", u_map_").concat(element.id, ", xy);\n cutColor *= color_").concat(element.id, ";\n ");
|
|
132
|
+
});
|
|
133
|
+
fs += "\n if (u_unionCutRegions) {\n material.diffuse *= (vec3(1.0) - cutColor.rgb);\n } else {\n material.diffuse *= cutColor.rgb;\n }\n if (material.diffuse.r <= 0.0001 && material.diffuse.g <= 0.0001 && material.diffuse.b <= 0.0001) {\n discard;\n }\n ";
|
|
134
|
+
this.tileset.customShader = new _cesium.CustomShader({
|
|
135
|
+
uniforms: allUniforms,
|
|
136
|
+
fragmentShaderText: "\n ".concat(fs_textureMapRect, "\n void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {\n vec4 positionMC = u_inverseModel * vec4(fsInput.attributes.positionWC, 1.0);\n vec2 xy = positionMC.xy;\n vec4 cutColor = vec4(1.0);\n ").concat(fs, "\n }")
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* 根据坐标创建片元着色器
|
|
142
|
+
* @param {Cartesian3[]} positions
|
|
143
|
+
* @param {String} id
|
|
144
|
+
*/
|
|
145
|
+
}, {
|
|
146
|
+
key: "createUniforms",
|
|
147
|
+
value: function createUniforms(positions, id) {
|
|
148
|
+
var _this2 = this;
|
|
149
|
+
if (!positions || positions.length < 3) {
|
|
150
|
+
console.log("缺少裁剪面坐标");
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
id = id || Math.ceil(Math.random() * 100000) + '_' + Math.ceil(Math.random() * 100000);
|
|
154
|
+
// 根据世界坐标范围计算相对模型坐标范围
|
|
155
|
+
var xs = [],
|
|
156
|
+
ys = [],
|
|
157
|
+
zs = [];
|
|
158
|
+
// 计算模型坐标系下坐标
|
|
159
|
+
var modelPoints = positions.map(function (p) {
|
|
160
|
+
var point = _cesium.Matrix4.multiplyByPoint(_this2.modelMatrix, p, new _cesium.Cartesian3());
|
|
161
|
+
xs.push(point.x);
|
|
162
|
+
ys.push(point.y);
|
|
163
|
+
zs.push(point.z);
|
|
164
|
+
return point;
|
|
165
|
+
});
|
|
166
|
+
// 计算当前裁剪面边界范围(模型坐标系下)
|
|
167
|
+
var rect = new _cesium.Cartesian4(Math.min.apply(null, xs), Math.min.apply(null, ys), Math.max.apply(null, xs), Math.max.apply(null, ys));
|
|
168
|
+
var canvas = document.createElement('canvas');
|
|
169
|
+
canvas.width = 1024;
|
|
170
|
+
canvas.height = 1024;
|
|
171
|
+
var width = rect.z - rect.x;
|
|
172
|
+
var height = rect.w - rect.y;
|
|
173
|
+
var ctx = canvas.getContext('2d');
|
|
174
|
+
ctx.fillStyle = '#fff'; // 设置整体背景为白色
|
|
175
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
176
|
+
ctx.beginPath();
|
|
177
|
+
ctx.moveTo(canvas.width * (modelPoints[0].x - rect.x) / width, canvas.height * (modelPoints[0].y - rect.y) / height);
|
|
178
|
+
for (var i = 1; i < modelPoints.length; i++) {
|
|
179
|
+
ctx.lineTo(canvas.width * (modelPoints[i].x - rect.x) / width, canvas.height * (modelPoints[i].y - rect.y) / height);
|
|
180
|
+
}
|
|
181
|
+
ctx.closePath();
|
|
182
|
+
ctx.fillStyle = '#000'; // 根据填充的黑色来裁剪模型
|
|
183
|
+
ctx.fill();
|
|
184
|
+
this.canvas = canvas;
|
|
185
|
+
var uniforms = {};
|
|
186
|
+
uniforms["u_rect_".concat(id)] = {
|
|
187
|
+
type: _cesium.UniformType.VEC4,
|
|
188
|
+
value: rect
|
|
189
|
+
};
|
|
190
|
+
uniforms["u_map_".concat(id)] = {
|
|
191
|
+
type: _cesium.UniformType.SAMPLER_2D,
|
|
192
|
+
value: new _cesium.TextureUniform({
|
|
193
|
+
url: canvas.toDataURL()
|
|
194
|
+
}),
|
|
195
|
+
minificationFilter: _cesium.TextureMinificationFilter.LINEAR,
|
|
196
|
+
magnificationFilter: _cesium.TextureMagnificationFilter.LINEAR
|
|
197
|
+
};
|
|
198
|
+
return uniforms;
|
|
199
|
+
}
|
|
200
|
+
}]);
|
|
201
|
+
}();
|
|
202
|
+
var _default = exports["default"] = TilesetCut;
|
|
203
|
+
//# sourceMappingURL=TilesetCut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TilesetCut.js","names":["_cesium","require","_typeof","o","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","protoProps","staticProps","t","_toPrimitive","r","e","toPrimitive","call","String","Number","TilesetCut","tileset","opt","console","log","_iscutOutter","iscutOutter","cutRegions","center","boundingSphere","enuMtx4","Transforms","eastNorthUpToFixedFrame","modelMatrix","Matrix4","inverse","canvas","undefined","get","set","val","updateShader","value","addRegion","attr","_ref","positions","id","Date","getTime","Math","random","toFixed","index","findIndex","item","push","removeRegionById","splice","destroy","customShader","_this","fs_textureMapRect","allUniforms","u_inverseModel","type","UniformType","MAT4","clone","u_unionCutRegions","BOOL","fs","forEach","element","uniforms","createUniforms","combine","concat","CustomShader","fragmentShaderText","_this2","ceil","xs","ys","zs","modelPoints","map","p","point","multiplyByPoint","Cartesian3","x","y","z","rect","Cartesian4","min","apply","max","document","createElement","width","height","w","ctx","getContext","fillStyle","fillRect","beginPath","moveTo","lineTo","closePath","fill","VEC4","SAMPLER_2D","TextureUniform","url","toDataURL","minificationFilter","TextureMinificationFilter","LINEAR","magnificationFilter","TextureMagnificationFilter","_default","exports"],"sources":["excavation-analysis/TilesetCut.js"],"sourcesContent":["import {\n Matrix4,\n Transforms,\n Cartesian3,\n UniformType,\n combine,\n CustomShader,\n Cartesian4,\n TextureUniform,\n TextureMinificationFilter,\n TextureMagnificationFilter\n} from 'cesium';\n// 三维模型裁剪\nclass TilesetCut {\n constructor(tileset, opt) {\n if (!tileset) {\n console.log(\"缺少模型\");\n return;\n }\n this.tileset = tileset;\n this.opt = opt || {};\n /**\n * @property {Boolean} iscutOutter 是否为外部裁剪,默认为内部裁剪\n */\n this._iscutOutter = this.opt.iscutOutter; // 是否为外部裁剪 默认为内部裁剪\n this.cutRegions = []; // 当前裁剪面数组对象\n /* this.modelMatrix = new Matrix4(); // 世界坐标系--》模型坐标系\n Matrix4.inverseTransformation(this.tileset.root.computedTransform, this.modelMatrix) */\n // 建立模型中心点坐标系\n const center = this.tileset.boundingSphere.center;\n const enuMtx4 = Transforms.eastNorthUpToFixedFrame(center);\n this.modelMatrix = Matrix4.inverse(enuMtx4, new Matrix4());\n this.canvas = undefined;\n }\n\n get iscutOutter() {\n return this._iscutOutter\n }\n\n set iscutOutter(val) {\n this._iscutOutter = val;\n this.updateShader();\n }\n\n /**\n * 添加裁剪面\n * @param {Object} attr 参数\n * @param {Cartesian3[]} attr.positions 压平面坐标\n * @param {Number} attr.id 唯一标识\n */\n addRegion(attr) {\n let { positions, id } = attr || {};\n if (!id) id = (new Date()).getTime() + \"\" + Number(Math.random() * 1000).toFixed(0);\n if (!positions || positions.length < 3) {\n console.log(\"缺少裁剪面坐标\");\n return;\n }\n const index = this.cutRegions.findIndex(item => item.id === id)\n if (index == -1) {\n this.cutRegions.push({\n id: id,\n positions: positions\n })\n } else {\n this.cutRegions[index].positions = positions;\n }\n this.updateShader()\n }\n /**\n * 移除裁剪面\n * @param {String} id\n */\n removeRegionById(id) {\n if (id) { // 表示移除所有的裁剪面\n const index = this.cutRegions.findIndex(item => item.id === id)\n if (index != -1) this.cutRegions.splice(index, 1)\n } else { // 表示移除单个的裁剪面\n this.cutRegions = [];\n }\n this.updateShader();\n }\n\n /**\n * 销毁\n */\n destroy() {\n this.tileset.customShader = undefined;\n }\n\n /**\n * 修改模型着色器\n */\n updateShader() {\n // 定义着色器中裁剪函数\n const fs_textureMapRect = `\n vec4 textureMapRect(vec4 rect, sampler2D map, vec2 xy) {\n // 判断当前图元坐标和多边形关系 如果在多边形内 进行纹素拾取\n if (xy.x >= rect.x && xy.x <= rect.z && xy.y >= rect.y && xy.y <= rect.w) {\n float w = rect.z - rect.x;\n float h = rect.w - rect.y;\n float s = (xy.x - rect.x) / w;\n float t = (xy.y - rect.y) / h;\n vec4 color = texture(map, vec2(s, 1.0 - t));\n return color;\n }\n return vec4(1.0);\n }\n `;\n\n let allUniforms = {\n u_inverseModel: {\n type: UniformType.MAT4,\n value: this.modelMatrix.clone()\n },\n u_unionCutRegions: {\n type: UniformType.BOOL,\n value: this._iscutOutter\n }\n }\n\n // 构建多区域着色器\n let fs = ``;\n this.cutRegions.forEach(element => {\n const uniforms = this.createUniforms(element.positions, element.id)\n allUniforms = combine(allUniforms, uniforms)\n fs += `\n vec4 color_${element.id} = textureMapRect(u_rect_${element.id}, u_map_${element.id}, xy);\n cutColor *= color_${element.id};\n `\n })\n\n fs += `\n if (u_unionCutRegions) {\n material.diffuse *= (vec3(1.0) - cutColor.rgb);\n } else {\n material.diffuse *= cutColor.rgb;\n }\n if (material.diffuse.r <= 0.0001 && material.diffuse.g <= 0.0001 && material.diffuse.b <= 0.0001) {\n discard;\n }\n `;\n\n this.tileset.customShader = new CustomShader({\n uniforms: allUniforms,\n fragmentShaderText: `\n ${fs_textureMapRect}\n void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {\n vec4 positionMC = u_inverseModel * vec4(fsInput.attributes.positionWC, 1.0);\n vec2 xy = positionMC.xy;\n vec4 cutColor = vec4(1.0);\n ${fs}\n }`\n })\n\n }\n\n /**\n * 根据坐标创建片元着色器\n * @param {Cartesian3[]} positions\n * @param {String} id\n */\n createUniforms(positions, id) {\n if (!positions || positions.length < 3) {\n console.log(\"缺少裁剪面坐标\");\n return;\n }\n id = id || Math.ceil(Math.random() * 100000) + '_' + Math.ceil(Math.random() * 100000)\n // 根据世界坐标范围计算相对模型坐标范围\n const xs = [], ys = [], zs = []\n // 计算模型坐标系下坐标\n const modelPoints = positions.map(p => {\n const point = Matrix4.multiplyByPoint(this.modelMatrix, p, new Cartesian3());\n xs.push(point.x)\n ys.push(point.y)\n zs.push(point.z)\n return point\n })\n // 计算当前裁剪面边界范围(模型坐标系下)\n const rect = new Cartesian4(Math.min.apply(null, xs), Math.min.apply(null, ys), Math.max.apply(null, xs), Math.max.apply(null, ys))\n const canvas = document.createElement('canvas')\n canvas.width = 1024\n canvas.height = 1024\n const width = rect.z - rect.x\n const height = rect.w - rect.y\n const ctx = canvas.getContext('2d')\n ctx.fillStyle = '#fff' // 设置整体背景为白色\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n ctx.beginPath()\n\n ctx.moveTo(canvas.width * (modelPoints[0].x - rect.x) / width, canvas.height * (modelPoints[0].y - rect.y) / height)\n\n for (let i = 1; i < modelPoints.length; i++) {\n ctx.lineTo(canvas.width * (modelPoints[i].x - rect.x) / width, canvas.height * (modelPoints[i].y - rect.y) / height)\n }\n\n ctx.closePath()\n ctx.fillStyle = '#000' // 根据填充的黑色来裁剪模型\n ctx.fill()\n\n this.canvas = canvas;\n\n const uniforms = {}\n uniforms[`u_rect_${id}`] = {\n type: UniformType.VEC4,\n value: rect\n }\n uniforms[`u_map_${id}`] = {\n type: UniformType.SAMPLER_2D,\n value: new TextureUniform({\n url: canvas.toDataURL()\n }),\n minificationFilter: TextureMinificationFilter.LINEAR,\n magnificationFilter: TextureMagnificationFilter.LINEAR\n }\n\n return uniforms\n }\n\n}\n\nexport default TilesetCut\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _cesium = require("../../_util/cesium");
|
|
9
|
+
var _cesium2 = require("cesium");
|
|
10
|
+
var _TilesetCut = _interopRequireDefault(require("../TilesetCut"));
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
12
|
+
var DrawHandler = function DrawHandler(props) {
|
|
13
|
+
var viewer = props.viewer,
|
|
14
|
+
type = props.type,
|
|
15
|
+
sceneId = props.sceneId;
|
|
16
|
+
var viewerObj = (0, _react.useRef)();
|
|
17
|
+
var drawLayer = (0, _react.useRef)(null);
|
|
18
|
+
var listnerEvent = (0, _react.useRef)({
|
|
19
|
+
drawStart: [],
|
|
20
|
+
drawEnd: []
|
|
21
|
+
});
|
|
22
|
+
var cutToolRef = (0, _react.useRef)();
|
|
23
|
+
if (viewer) viewerObj.current = viewer;
|
|
24
|
+
|
|
25
|
+
// 初始化绘图控件
|
|
26
|
+
var initDrawHandler = function initDrawHandler(viewer) {
|
|
27
|
+
// 取消双击事件-追踪该位置
|
|
28
|
+
viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(_cesium2.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
|
|
29
|
+
drawLayer.current = new _cesium2.CustomDataSource('measureLayer');
|
|
30
|
+
viewer.dataSources.add(drawLayer.current);
|
|
31
|
+
};
|
|
32
|
+
var activate = function activate() {
|
|
33
|
+
if (type) {
|
|
34
|
+
draw(type);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// 绘制多边形
|
|
39
|
+
var drawPolygon = function drawPolygon(clampToGround) {
|
|
40
|
+
if (!viewer) return;
|
|
41
|
+
var handler = new _cesium2.ScreenSpaceEventHandler(viewer.scene.canvas);
|
|
42
|
+
var positions = [];
|
|
43
|
+
var polygon = new _cesium2.PolygonHierarchy();
|
|
44
|
+
var polyObj = null;
|
|
45
|
+
handler.setInputAction(function (ev) {
|
|
46
|
+
var cartesian = (0, _cesium.getCartesian3FromXY)(viewer, ev.position);
|
|
47
|
+
if (cartesian && cartesian.x) {
|
|
48
|
+
if (positions.length === 0) {
|
|
49
|
+
polygon.positions.push(cartesian.clone());
|
|
50
|
+
positions.push(cartesian.clone());
|
|
51
|
+
}
|
|
52
|
+
positions.push(cartesian.clone());
|
|
53
|
+
polygon.positions.push(cartesian.clone());
|
|
54
|
+
if (!polyObj) {
|
|
55
|
+
var _createPolygonEntity = createPolygonEntity(positions, polygon, clampToGround),
|
|
56
|
+
entity = _createPolygonEntity.entity;
|
|
57
|
+
polyObj = entity;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}, _cesium2.ScreenSpaceEventType.LEFT_CLICK);
|
|
61
|
+
handler.setInputAction(function (ev) {
|
|
62
|
+
var catesian = (0, _cesium.getCartesian3FromXY)(viewer, ev.endPosition);
|
|
63
|
+
if (positions.length >= 2) {
|
|
64
|
+
if (catesian && catesian.x) {
|
|
65
|
+
positions.pop();
|
|
66
|
+
positions.push(catesian);
|
|
67
|
+
polygon.positions.pop();
|
|
68
|
+
polygon.positions.push(catesian);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}, _cesium2.ScreenSpaceEventType.MOUSE_MOVE);
|
|
72
|
+
handler.setInputAction(function () {
|
|
73
|
+
handler.destroy();
|
|
74
|
+
positions.push(positions[0]);
|
|
75
|
+
// 执行绘制生命周期函数
|
|
76
|
+
if (listnerEvent.current.drawEnd.length) {
|
|
77
|
+
listnerEvent.current.drawEnd.forEach(function (fuc) {
|
|
78
|
+
fuc(positions);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}, _cesium2.ScreenSpaceEventType.RIGHT_CLICK);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// 创建多边形
|
|
85
|
+
var createPolygonEntity = function createPolygonEntity(positions, polygon, clampToGround) {
|
|
86
|
+
var _drawLayer$current;
|
|
87
|
+
var polygonEntity = new _cesium2.Entity({
|
|
88
|
+
polyline: {
|
|
89
|
+
positions: new _cesium2.CallbackProperty(function () {
|
|
90
|
+
return positions;
|
|
91
|
+
}, false),
|
|
92
|
+
width: 3,
|
|
93
|
+
material: new _cesium2.Color(0, 255, 255, 0.5),
|
|
94
|
+
clampToGround: clampToGround
|
|
95
|
+
},
|
|
96
|
+
polygon: {
|
|
97
|
+
hierarchy: new _cesium2.CallbackProperty(function () {
|
|
98
|
+
return polygon;
|
|
99
|
+
}, false),
|
|
100
|
+
material: _cesium2.Color.WHITE.withAlpha(0.1),
|
|
101
|
+
heightReference: _cesium2.HeightReference.CLAMP_TO_GROUND
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
var entity = (_drawLayer$current = drawLayer.current) === null || _drawLayer$current === void 0 ? void 0 : _drawLayer$current.entities.add(polygonEntity);
|
|
105
|
+
return {
|
|
106
|
+
polygonEntity: polygonEntity,
|
|
107
|
+
entity: entity
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
var draw = function draw(type) {
|
|
111
|
+
switch (type) {
|
|
112
|
+
case 'polygon':
|
|
113
|
+
drawPolygon(true);
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
var on = function on(type, callBack) {
|
|
118
|
+
listnerEvent.current[type].push(callBack);
|
|
119
|
+
};
|
|
120
|
+
var clear = function clear() {
|
|
121
|
+
if (drawLayer.current) {
|
|
122
|
+
drawLayer.current.entities.removeAll();
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
(0, _react.useEffect)(function () {
|
|
126
|
+
if (viewer && type) {
|
|
127
|
+
initDrawHandler(viewer, type);
|
|
128
|
+
} else {
|
|
129
|
+
console.warn('请使用 initDrawHandler 函数初始化绘图控件');
|
|
130
|
+
}
|
|
131
|
+
return function () {
|
|
132
|
+
clear();
|
|
133
|
+
};
|
|
134
|
+
}, []);
|
|
135
|
+
return {
|
|
136
|
+
activate: activate,
|
|
137
|
+
on: on,
|
|
138
|
+
clear: clear
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
var _default = exports["default"] = DrawHandler;
|
|
142
|
+
//# sourceMappingURL=useDrawHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDrawHandler.js","names":["_react","require","_cesium","_cesium2","_TilesetCut","_interopRequireDefault","obj","__esModule","DrawHandler","props","viewer","type","sceneId","viewerObj","useRef","drawLayer","listnerEvent","drawStart","drawEnd","cutToolRef","current","initDrawHandler","cesiumWidget","screenSpaceEventHandler","removeInputAction","ScreenSpaceEventType","LEFT_DOUBLE_CLICK","CustomDataSource","dataSources","add","activate","draw","drawPolygon","clampToGround","handler","ScreenSpaceEventHandler","scene","canvas","positions","polygon","PolygonHierarchy","polyObj","setInputAction","ev","cartesian","getCartesian3FromXY","position","x","length","push","clone","_createPolygonEntity","createPolygonEntity","entity","LEFT_CLICK","catesian","endPosition","pop","MOUSE_MOVE","destroy","forEach","fuc","RIGHT_CLICK","_drawLayer$current","polygonEntity","Entity","polyline","CallbackProperty","width","material","Color","hierarchy","WHITE","withAlpha","heightReference","HeightReference","CLAMP_TO_GROUND","entities","on","callBack","clear","removeAll","useEffect","console","warn","_default","exports"],"sources":["excavation-analysis/hooks/useDrawHandler.js"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { getCartesian3FromXY } from '../../_util/cesium';\nimport {\n ScreenSpaceEventType,\n CustomDataSource,\n ScreenSpaceEventHandler,\n PolygonHierarchy,\n Entity,\n CallbackProperty,\n Color,\n HeightReference\n} from 'cesium';\nimport TilesetCut from '../TilesetCut';\n\n\nconst DrawHandler = (props) => {\n const { viewer, type, sceneId } = props;\n const viewerObj = useRef()\n const drawLayer = useRef(null)\n const listnerEvent = useRef({\n drawStart: [],\n drawEnd: []\n })\n const cutToolRef = useRef();\n if (viewer) viewerObj.current = viewer\n\n // 初始化绘图控件\n const initDrawHandler = (viewer) => {\n // 取消双击事件-追踪该位置\n viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.LEFT_DOUBLE_CLICK)\n drawLayer.current = new CustomDataSource('measureLayer')\n viewer.dataSources.add(drawLayer.current)\n }\n\n const activate = () => {\n if (type) {\n draw(type)\n }\n }\n\n // 绘制多边形\n const drawPolygon = (clampToGround) => {\n if (!viewer) return\n const handler = new ScreenSpaceEventHandler(viewer.scene.canvas)\n const positions = []\n const polygon = new PolygonHierarchy()\n let polyObj = null\n\n handler.setInputAction((ev) => {\n const cartesian = getCartesian3FromXY(viewer, ev.position)\n if (cartesian && cartesian.x) {\n if (positions.length === 0) {\n polygon.positions.push(cartesian.clone())\n positions.push(cartesian.clone())\n }\n positions.push(cartesian.clone())\n polygon.positions.push(cartesian.clone())\n if(!polyObj) {\n const { entity } = createPolygonEntity(positions, polygon, clampToGround)\n polyObj = entity\n }\n }\n }, ScreenSpaceEventType.LEFT_CLICK)\n\n handler.setInputAction((ev) => {\n const catesian = getCartesian3FromXY(viewer, ev.endPosition)\n if (positions.length >= 2) {\n if (catesian && catesian.x) {\n positions.pop()\n positions.push(catesian)\n polygon.positions.pop()\n polygon.positions.push(catesian)\n }\n }\n }, ScreenSpaceEventType.MOUSE_MOVE)\n\n handler.setInputAction(() => {\n handler.destroy()\n positions.push(positions[0])\n // 执行绘制生命周期函数\n if (listnerEvent.current.drawEnd.length) {\n listnerEvent.current.drawEnd.forEach(fuc => {\n fuc(positions)\n })\n }\n }, ScreenSpaceEventType.RIGHT_CLICK)\n }\n\n // 创建多边形\n const createPolygonEntity = (positions, polygon, clampToGround) => {\n const polygonEntity = new Entity({\n polyline: {\n positions: new CallbackProperty(() => {\n return positions\n }, false),\n width: 3,\n material: new Color(0, 255, 255, 0.5),\n clampToGround: clampToGround\n },\n polygon: {\n hierarchy: new CallbackProperty(() => {\n return polygon\n }, false),\n material: Color.WHITE.withAlpha(0.1),\n heightReference: HeightReference.CLAMP_TO_GROUND\n }\n })\n const entity = drawLayer.current?.entities.add(polygonEntity)\n return {\n polygonEntity,\n entity\n }\n }\n\n const draw = (type) => {\n switch(type) {\n case 'polygon':\n drawPolygon(true)\n break\n }\n }\n\n const on = (type, callBack) => {\n listnerEvent.current[type].push(callBack)\n }\n\n const clear = () => {\n if (drawLayer.current) {\n drawLayer.current.entities.removeAll()\n }\n }\n\n useEffect(() => {\n if (viewer && type) {\n initDrawHandler(viewer, type)\n } else {\n console.warn('请使用 initDrawHandler 函数初始化绘图控件')\n }\n return () => {\n clear()\n }\n }, [])\n\n return { activate, on, clear }\n}\n\nexport default DrawHandler;\n"],"mappings":"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","ignoreList":[]}
|