model-action 1.0.23 → 2.0.0

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.
Files changed (66) hide show
  1. package/dist/index.d.ts +8 -4
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +8 -4
  4. package/dist/index.js.map +1 -0
  5. package/dist/modules/Action.d.ts +5 -14
  6. package/dist/modules/Action.d.ts.map +1 -0
  7. package/dist/modules/Action.js +1 -10
  8. package/dist/modules/Action.js.map +1 -0
  9. package/dist/modules/Building.d.ts +28 -0
  10. package/dist/modules/Building.d.ts.map +1 -0
  11. package/dist/modules/Building.js +70 -0
  12. package/dist/modules/Building.js.map +1 -0
  13. package/dist/modules/Camera.d.ts +37 -0
  14. package/dist/modules/Camera.d.ts.map +1 -0
  15. package/dist/modules/Camera.js +110 -0
  16. package/dist/modules/Camera.js.map +1 -0
  17. package/dist/modules/Environment.d.ts +22 -0
  18. package/dist/modules/Environment.d.ts.map +1 -0
  19. package/dist/modules/Environment.js +53 -0
  20. package/dist/modules/Environment.js.map +1 -0
  21. package/dist/modules/Focus.d.ts +12 -0
  22. package/dist/modules/Focus.d.ts.map +1 -0
  23. package/dist/modules/Focus.js +22 -0
  24. package/dist/modules/Focus.js.map +1 -0
  25. package/dist/modules/Poi.d.ts +45 -62
  26. package/dist/modules/Poi.d.ts.map +1 -0
  27. package/dist/modules/Poi.js +117 -88
  28. package/dist/modules/Poi.js.map +1 -0
  29. package/dist/modules/Routing.d.ts +23 -31
  30. package/dist/modules/Routing.d.ts.map +1 -0
  31. package/dist/modules/Routing.js +62 -63
  32. package/dist/modules/Routing.js.map +1 -0
  33. package/dist/modules/Scene.d.ts +12 -15
  34. package/dist/modules/Scene.d.ts.map +1 -0
  35. package/dist/modules/Scene.js +26 -15
  36. package/dist/modules/Scene.js.map +1 -0
  37. package/dist/modules/Status.d.ts +59 -0
  38. package/dist/modules/Status.d.ts.map +1 -0
  39. package/dist/modules/Status.js +91 -0
  40. package/dist/modules/Status.js.map +1 -0
  41. package/dist/modules/Track.d.ts +65 -22
  42. package/dist/modules/Track.d.ts.map +1 -0
  43. package/dist/modules/Track.js +128 -20
  44. package/dist/modules/Track.js.map +1 -0
  45. package/dist/modules/VideoFusion.d.ts +1 -0
  46. package/dist/modules/VideoFusion.d.ts.map +1 -0
  47. package/dist/modules/VideoFusion.js +1 -0
  48. package/dist/modules/VideoFusion.js.map +1 -0
  49. package/dist/modules/Window.d.ts +1 -0
  50. package/dist/modules/Window.d.ts.map +1 -0
  51. package/dist/modules/Window.js +1 -0
  52. package/dist/modules/Window.js.map +1 -0
  53. package/package.json +1 -1
  54. package/src/index.ts +7 -4
  55. package/src/modules/Action.ts +4 -25
  56. package/src/modules/Building.ts +103 -0
  57. package/src/modules/Camera.ts +175 -0
  58. package/src/modules/Environment.ts +81 -0
  59. package/src/modules/Focus.ts +33 -0
  60. package/src/modules/Poi.ts +194 -117
  61. package/src/modules/Routing.ts +96 -85
  62. package/src/modules/Scene.ts +43 -21
  63. package/src/modules/Status.ts +150 -0
  64. package/src/modules/Track.ts +259 -30
  65. package/src/modules/VideoFusion.ts +0 -122
  66. package/src/modules/Window.ts +0 -40
@@ -0,0 +1,91 @@
1
+ /**
2
+ * 状态操作方法
3
+ */
4
+ import { Action } from "./Action";
5
+ export class StatusAction extends Action {
6
+ /**
7
+ * 切换指定ID的模型、POI等的状态
8
+ * @param infos 状态信息数组,包含id和state
9
+ * @param options 可选参数
10
+ * @param options.isLocation 是否定位到第一个ID对应的设备,默认false
11
+ * @param options.type 变换状态的类型,如"POI"
12
+ */
13
+ static statusChange(infos, options) {
14
+ const data = {
15
+ infos
16
+ };
17
+ // 如果提供了 isLocation,则添加(默认false,所以只有为true时才添加)
18
+ if ((options === null || options === void 0 ? void 0 : options.isLocation) !== undefined) {
19
+ data.isLocation = options.isLocation;
20
+ }
21
+ // 如果提供了 type,则添加
22
+ if (options === null || options === void 0 ? void 0 : options.type) {
23
+ data.type = options.type;
24
+ }
25
+ const param = {
26
+ cmd: "status",
27
+ data
28
+ };
29
+ // 生成描述信息
30
+ let msg = '切换状态';
31
+ if (options === null || options === void 0 ? void 0 : options.type) {
32
+ msg = `切换${options.type}状态`;
33
+ }
34
+ if (infos.length === 1) {
35
+ msg += ` - ID: ${infos[0].id}, 状态: ${infos[0].state}`;
36
+ }
37
+ else {
38
+ msg += ` - 共${infos.length}个设备`;
39
+ }
40
+ // 使用类型断言调用sendParam,因为StatusType不严格符合SendParam(缺少action字段)
41
+ this.sendParam(param, msg);
42
+ }
43
+ /**
44
+ * 设置设备为正常状态
45
+ * @param id 设备ID
46
+ * @param options 可选参数
47
+ */
48
+ static setNormal(id, options) {
49
+ this.statusChange([{ id, state: 'normal' }], options);
50
+ }
51
+ /**
52
+ * 设置设备为报警状态
53
+ * @param id 设备ID
54
+ * @param options 可选参数
55
+ */
56
+ static setAlarm(id, options) {
57
+ this.statusChange([{ id, state: 'alarm' }], options);
58
+ }
59
+ /**
60
+ * 设置设备颜色
61
+ * @param id 设备ID
62
+ * @param color 颜色值,格式如 "FFFFFF" 或 "93050C"(不需要#前缀)
63
+ * @param options 可选参数
64
+ */
65
+ static setColor(id, color, options) {
66
+ // 移除可能的#前缀
67
+ const colorValue = color.startsWith('#') ? color.slice(1) : color;
68
+ this.statusChange([{ id, state: `color=${colorValue}` }], options);
69
+ }
70
+ /**
71
+ * 批量设置多个设备的状态
72
+ * @param statusMap 状态映射,key为设备ID,value为状态值(normal | alarm | color值)
73
+ * @param options 可选参数
74
+ */
75
+ static batchSetStatus(statusMap, options) {
76
+ const infos = [];
77
+ for (const id in statusMap) {
78
+ if (statusMap.hasOwnProperty(id)) {
79
+ const state = statusMap[id];
80
+ // 如果state是颜色值(6位十六进制),自动添加color=前缀
81
+ let finalState = state;
82
+ if (/^[0-9A-Fa-f]{6}$/.test(state) && !state.startsWith('color=')) {
83
+ finalState = `color=${state}`;
84
+ }
85
+ infos.push({ id, state: finalState });
86
+ }
87
+ }
88
+ this.statusChange(infos, options);
89
+ }
90
+ }
91
+ //# sourceMappingURL=Status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Status.js","sourceRoot":"","sources":["../../src/modules/Status.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,76 @@
1
1
  /**
2
2
  * 轨迹方法
3
3
  */
4
- import { Action, IdList, LocationList, SendParam } from "./Action";
5
- type TrackActionType = 'getRoadNet' | 'remove' | 'add';
6
- type TrackType = {
7
- action: TrackActionType;
8
- pathId?: string;
9
- rnId?: string;
10
- roadNet?: string;
11
- type?: string;
12
- data?: LocationList | IdList;
13
- } & SendParam;
4
+ import { Action } from "./Action";
5
+ export type PathModuleType = 'Edit' | 'PathTracer';
6
+ export type RolerType = 'Person' | 'Camera' | 'UAV';
7
+ export type PathDrawBaseType = 'BaseOnRoadNet' | 'BaseOnPathEditInfo';
8
+ export type PathStyleType = 'Arrow' | string;
9
+ export interface RolerMoveParam {
10
+ rolerMoveAlongPath?: boolean;
11
+ rolerType?: RolerType;
12
+ viewFollow?: boolean;
13
+ moveSpeed?: number;
14
+ pauseAtPoint?: boolean;
15
+ }
16
+ export interface PathStyle {
17
+ color: string;
18
+ styleType: PathStyleType;
19
+ width: number;
20
+ }
21
+ export interface PathPoint {
22
+ id: string;
23
+ }
24
+ export interface PathEditParam {
25
+ searchRangeAtPathPoint?: number;
26
+ searchDeviceType?: string;
27
+ }
14
28
  export declare class TrackAction extends Action {
15
29
  /**
16
- * 清除轨迹
17
- * @param {*} pathId 自定义轨迹ID
30
+ * 请求三维绘制路径
31
+ * @param pathId 自定义轨迹ID,后面删除的时候用,如果之前有编辑路径,这里就使用编辑路径的时候传入的路径 pathId
32
+ * @param pathDrawBaseType 绘制方式:BaseOnRoadNet 基于路网,使用C++寻路;BaseOnPathEditInfo 基于编辑路径生成的点画路径,不基于路网
33
+ * @param points 路径点数组
34
+ * @param roadNetId 路网的ID,pathDrawBaseType = BaseOnRoadNet的时候,需要传值,如果场景就一个路网,也可以不用传
35
+ * @param rolerMoveParam 沿路径移动的信息
36
+ * @param pathStyle 路径样式
37
+ */
38
+ static trackAdd(pathId: string, pathDrawBaseType: PathDrawBaseType, points: PathPoint[], roadNetId?: string, rolerMoveParam?: RolerMoveParam, pathStyle?: PathStyle): void;
39
+ /**
40
+ * 显隐销毁路径
41
+ * @param action 操作类型:show 显示 | hide 隐藏 | remove 删除
42
+ * @param pathId 自定义轨迹ID,同前面,自定义的ID
43
+ * @param module 显隐、删除哪一部分:Edit 编辑的部分 | PathTracer 根据设备点动态生成的路径部分,如果不传,则整个显隐或者删除
44
+ */
45
+ static trackShowHideRemove(action: 'show' | 'hide' | 'remove', pathId: string, module?: PathModuleType): void;
46
+ /**
47
+ * 移动中更新移动参数
48
+ * @param pathId 自定义轨迹ID
49
+ * @param rolerMoveParam 沿路径移动的参数
50
+ */
51
+ static trackUpdateMovingParam(pathId: string, rolerMoveParam: RolerMoveParam): void;
52
+ /**
53
+ * 在生成的路径上面移动 - 开始移动
54
+ * @param action 操作类型:start 开始移动
55
+ * @param pathId 自定义轨迹ID
56
+ * @param rolerMoveParam 沿路径移动的参数
57
+ */
58
+ static trackMove(action: 'start', pathId: string, rolerMoveParam: RolerMoveParam): void;
59
+ /**
60
+ * 在生成的路径上面移动 - 停止或重启
61
+ * @param action 操作类型:stop 停止移动 | restart 重启移动
18
62
  */
19
- static trackRemove(pathId?: TrackType['pathId']): void;
63
+ static trackMove(action: 'stop' | 'restart'): void;
20
64
  /**
21
- * 获取三维路网坐标
22
- * @param {*} data
23
- * @param {*} rnId 路网ID
65
+ * 开启路径编辑
66
+ * @param pathId 自定义轨迹ID,前端配置界面提供数据,为空或者不传,UE自动生成一个
67
+ * @param pathName 路径名称,前端配置界面提供数据,非必须
68
+ * @param pathEditParam 路径编辑参数,前端配置界面提供数据
24
69
  */
25
- static trackGetRoadNet(data: TrackType['data'], rnId?: TrackType['rnId']): void;
70
+ static trackBeginEdit(pathId?: string, pathName?: string, pathEditParam?: PathEditParam): void;
26
71
  /**
27
- * 请求三维绘制路网
28
- * @param {*} data
29
- * @param {*} pathId 自定义轨迹ID
72
+ * 停止路径编辑
30
73
  */
31
- static trackPath(data: TrackType['data'], pathId?: TrackType['pathId']): void;
74
+ static trackEndEdit(): void;
32
75
  }
33
- export {};
76
+ //# sourceMappingURL=Track.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Track.d.ts","sourceRoot":"","sources":["../../src/modules/Track.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAa,MAAM,UAAU,CAAC;AAM7C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,YAAY,CAAA;AAGlD,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAA;AAGnD,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,oBAAoB,CAAA;AAGrE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAA;AAG5C,MAAM,WAAW,cAAc;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAGD,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,aAAa;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAqBD,qBAAa,WAAY,SAAQ,MAAM;IACnC;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,CACX,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,SAAS,EAAE,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,cAAc,EAC/B,SAAS,CAAC,EAAE,SAAS;IA+BzB;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CACtB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,EAClC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,cAAc;IA6B3B;;;;OAIG;IACH,MAAM,CAAC,sBAAsB,CACzB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc;IAmBlC;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI;IACvF;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IA2ClD;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CACjB,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,aAAa;IAiCjC;;OAEG;IACH,MAAM,CAAC,YAAY;CAatB"}
@@ -4,44 +4,152 @@
4
4
  import { Action } from "./Action";
5
5
  export class TrackAction extends Action {
6
6
  /**
7
- * 清除轨迹
8
- * @param {*} pathId 自定义轨迹ID
7
+ * 请求三维绘制路径
8
+ * @param pathId 自定义轨迹ID,后面删除的时候用,如果之前有编辑路径,这里就使用编辑路径的时候传入的路径 pathId
9
+ * @param pathDrawBaseType 绘制方式:BaseOnRoadNet 基于路网,使用C++寻路;BaseOnPathEditInfo 基于编辑路径生成的点画路径,不基于路网
10
+ * @param points 路径点数组
11
+ * @param roadNetId 路网的ID,pathDrawBaseType = BaseOnRoadNet的时候,需要传值,如果场景就一个路网,也可以不用传
12
+ * @param rolerMoveParam 沿路径移动的信息
13
+ * @param pathStyle 路径样式
9
14
  */
10
- static trackRemove(pathId = "CameraTrack") {
15
+ static trackAdd(pathId, pathDrawBaseType, points, roadNetId, rolerMoveParam, pathStyle) {
16
+ const data = {
17
+ action: "add",
18
+ pathId,
19
+ pathDrawBaseType,
20
+ points,
21
+ };
22
+ // 如果绘制方式是基于路网,且提供了路网ID,则添加
23
+ if (pathDrawBaseType === 'BaseOnRoadNet' && roadNetId) {
24
+ data.roadNetId = roadNetId;
25
+ }
26
+ // 如果提供了沿路径移动参数,则添加
27
+ if (rolerMoveParam) {
28
+ data.rolerMoveParam = rolerMoveParam;
29
+ }
30
+ // 如果提供了路径样式,则添加
31
+ if (pathStyle) {
32
+ data.pathStyle = pathStyle;
33
+ }
11
34
  const param = {
12
35
  cmd: "path",
13
- action: "remove",
36
+ data
37
+ };
38
+ this.sendParam(param, '请求三维绘制路径');
39
+ }
40
+ /**
41
+ * 显隐销毁路径
42
+ * @param action 操作类型:show 显示 | hide 隐藏 | remove 删除
43
+ * @param pathId 自定义轨迹ID,同前面,自定义的ID
44
+ * @param module 显隐、删除哪一部分:Edit 编辑的部分 | PathTracer 根据设备点动态生成的路径部分,如果不传,则整个显隐或者删除
45
+ */
46
+ static trackShowHideRemove(action, pathId, module) {
47
+ const data = {
48
+ action,
14
49
  pathId
15
50
  };
16
- this.sendParam(param, '删除指定轨迹线');
51
+ // 如果提供了模块类型,则添加
52
+ if (module) {
53
+ data.module = module;
54
+ }
55
+ const param = {
56
+ cmd: "path",
57
+ data
58
+ };
59
+ const actionMap = {
60
+ show: '显示路径',
61
+ hide: '隐藏路径',
62
+ remove: '删除路径'
63
+ };
64
+ this.sendParam(param, actionMap[action]);
17
65
  }
18
66
  /**
19
- * 获取三维路网坐标
20
- * @param {*} data
21
- * @param {*} rnId 路网ID
67
+ * 移动中更新移动参数
68
+ * @param pathId 自定义轨迹ID
69
+ * @param rolerMoveParam 沿路径移动的参数
22
70
  */
23
- static trackGetRoadNet(data, rnId = 'RN-1') {
71
+ static trackUpdateMovingParam(pathId, rolerMoveParam) {
72
+ const data = {
73
+ action: 'updateMovingParam',
74
+ pathId,
75
+ rolerMoveParam
76
+ };
24
77
  const param = {
25
78
  cmd: "path",
26
- action: "getRoadNet",
27
- rnId,
28
79
  data
29
80
  };
30
- this.sendParam(param, '获取三维路网坐标');
81
+ this.sendParam(param, '更新移动参数');
31
82
  }
32
83
  /**
33
- * 请求三维绘制路网
34
- * @param {*} data
35
- * @param {*} pathId 自定义轨迹ID
84
+ * 在生成的路径上面移动
85
+ * @param action 操作类型:start 开始移动 | stop 停止移动 | restart 重启移动
86
+ * @param pathId 自定义轨迹ID(仅 start 时需要)
87
+ * @param rolerMoveParam 沿路径移动的参数(仅 start 时需要)
36
88
  */
37
- static trackPath(data, pathId = "CameraTrack") {
89
+ static trackMove(action, pathId, rolerMoveParam) {
90
+ const data = {
91
+ action
92
+ };
93
+ // start 操作需要 pathId 和 rolerMoveParam
94
+ if (action === 'start') {
95
+ if (!pathId || !rolerMoveParam) {
96
+ throw new Error('start 操作需要提供 pathId 和 rolerMoveParam');
97
+ }
98
+ data.pathId = pathId;
99
+ data.rolerMoveParam = rolerMoveParam;
100
+ }
101
+ // stop 和 restart 不需要 pathId 和 rolerMoveParam
38
102
  const param = {
39
103
  cmd: "path",
40
- action: "add",
41
- pathId,
42
- type: "BaseOnRoadNet",
43
104
  data
44
105
  };
45
- this.sendParam(param, '请求三维绘制路径');
106
+ const actionMap = {
107
+ start: '开始移动',
108
+ stop: '停止移动',
109
+ restart: '重启移动'
110
+ };
111
+ this.sendParam(param, actionMap[action]);
112
+ }
113
+ /**
114
+ * 开启路径编辑
115
+ * @param pathId 自定义轨迹ID,前端配置界面提供数据,为空或者不传,UE自动生成一个
116
+ * @param pathName 路径名称,前端配置界面提供数据,非必须
117
+ * @param pathEditParam 路径编辑参数,前端配置界面提供数据
118
+ */
119
+ static trackBeginEdit(pathId, pathName, pathEditParam) {
120
+ const data = {
121
+ action: 'beginEdit'
122
+ };
123
+ // 如果提供了 pathId,则添加
124
+ if (pathId) {
125
+ data.pathId = pathId;
126
+ }
127
+ // 如果提供了 pathName,则添加
128
+ if (pathName) {
129
+ data.pathName = pathName;
130
+ }
131
+ // 如果提供了 pathEditParam,则添加
132
+ if (pathEditParam) {
133
+ data.pathEditParam = pathEditParam;
134
+ }
135
+ const param = {
136
+ cmd: "path",
137
+ data
138
+ };
139
+ this.sendParam(param, '开启路径编辑');
140
+ }
141
+ /**
142
+ * 停止路径编辑
143
+ */
144
+ static trackEndEdit() {
145
+ const data = {
146
+ action: 'endEdit'
147
+ };
148
+ const param = {
149
+ cmd: "path",
150
+ data
151
+ };
152
+ this.sendParam(param, '停止路径编辑');
46
153
  }
47
154
  }
155
+ //# sourceMappingURL=Track.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Track.js","sourceRoot":"","sources":["../../src/modules/Track.ts"],"names":[],"mappings":"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"}
@@ -60,3 +60,4 @@ export declare class VideoFusionAction extends Action {
60
60
  static videoFusionList(): void;
61
61
  }
62
62
  export {};
63
+ //# sourceMappingURL=VideoFusion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoFusion.d.ts","sourceRoot":"","sources":["../../src/modules/VideoFusion.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAgB,SAAS,EAAE,MAAM,UAAU,CAAC;AAEnE,KAAK,qBAAqB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAA;AACjG,KAAK,eAAe,GAAG;IACnB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACnC,GAAG,SAAS,CAAA;AAGb,qBAAa,iBAAkB,SAAQ,MAAM;IACzC;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,GAAE,eAAe,CAAC,MAAM,CAAU,EAAE,OAAO,GAAE,eAAe,CAAC,SAAS,CAAS;IAYtK;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC;IAU9E;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,UAAU,GAAE,OAAe,EAAE,QAAQ,GAAE,OAAe,EAAE,SAAS,GAAE,OAAO,GAAG,QAAkB;IAYpJ;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,UAAU,GAAE,OAAe,EAAE,QAAQ,GAAE,OAAe,EAAE,SAAS,GAAE,OAAO,GAAG,QAAkB;IAYnJ;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC;IASzD;;OAEG;IACH,MAAM,CAAC,eAAe;CAOzB"}
@@ -95,3 +95,4 @@ export class VideoFusionAction extends Action {
95
95
  this.sendParam(param, '获取视频融合点位列表');
96
96
  }
97
97
  }
98
+ //# sourceMappingURL=VideoFusion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoFusion.js","sourceRoot":"","sources":["../../src/modules/VideoFusion.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAmC,MAAM,UAAU,CAAC;AAmBnE,MAAM,OAAO,iBAAkB,SAAQ,MAAM;IACzC;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,KAA+B,EAAE,EAAyB,EAAE,OAAgC,MAAM,EAAE,UAAsC,KAAK;QAClK,MAAM,KAAK,GAAoB;YAC3B,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,MAAM;YACd,KAAK;YACL,EAAE;YACF,IAAI;YACJ,OAAO;SACV,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACpC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,EAAyB,EAAE,GAA2B;QAC1E,MAAM,KAAK,GAAoB;YAC3B,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,OAAO;YACf,EAAE;YACF,GAAG;SACN,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,CAAA;IAC7C,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAA2B,EAAE,aAAsB,KAAK,EAAE,WAAoB,KAAK,EAAE,YAAgC,OAAO;QAChJ,MAAM,KAAK,GAAoB;YAC3B,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,OAAO;YACf,UAAU;YACV,SAAS;YACT,QAAQ;YACR,GAAG;SACN,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,CAAC,GAA2B,EAAE,aAAsB,KAAK,EAAE,WAAoB,KAAK,EAAE,YAAgC,OAAO;QAC/I,MAAM,KAAK,GAAoB;YAC3B,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,MAAM;YACd,UAAU;YACV,SAAS;YACT,QAAQ;YACR,GAAG;SACN,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAA+B;QACrD,MAAM,KAAK,GAAoB;YAC3B,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,SAAS;YACjB,KAAK;SACR,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe;QAClB,MAAM,KAAK,GAAG;YACV,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,KAAK;SAChB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IACvC,CAAC;CACJ"}
@@ -15,3 +15,4 @@ export declare class WindowAction extends Action {
15
15
  */
16
16
  static closeOut(attendId: string): void;
17
17
  }
18
+ //# sourceMappingURL=Window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Window.d.ts","sourceRoot":"","sources":["../../src/modules/Window.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAG,MAAM,UAAU,CAAC;AAEnC,qBAAa,YAAa,SAAQ,MAAM;IACpC;;;QAGI;IACJ,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM;IAY/B;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM;CAWnC"}
@@ -35,3 +35,4 @@ export class WindowAction extends Action {
35
35
  this.sendParam(param, '关闭外部弹窗');
36
36
  }
37
37
  }
38
+ //# sourceMappingURL=Window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Window.js","sourceRoot":"","sources":["../../src/modules/Window.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,OAAO,EAAE,MAAM,GAAG,MAAM,UAAU,CAAC;AAEnC,MAAM,OAAO,YAAa,SAAQ,MAAM;IACpC;;;QAGI;IACJ,MAAM,CAAC,OAAO,CAAC,QAAgB;QAC3B,MAAM,KAAK,GAAQ;YACf,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE;gBACF,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU;gBAChB,QAAQ;aACX;SACJ,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,QAAgB;QAC5B,MAAM,KAAK,GAAQ;YACf,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE;gBACF,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,UAAU;gBAChB,QAAQ;aACX;SACJ,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "model-action",
3
- "version": "1.0.23",
3
+ "version": "2.0.0",
4
4
  "description": "与三维交互api",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  export { Action } from './modules/Action'
2
- export { VideoFusionAction } from "./modules/VideoFusion";
3
- export { PoiAction } from './modules/Poi'
4
2
  export { TrackAction } from './modules/Track'
3
+ export { PoiAction } from './modules/Poi'
4
+ export { BuildingAction } from './modules/Building'
5
+ export { EnvironmentAction } from './modules/Environment'
6
+ export { RoutingAction } from './modules/Routing'
7
+ export { StatusAction } from './modules/Status'
8
+ export { CameraAction } from './modules/Camera'
9
+ export { FocusAction } from './modules/Focus'
5
10
  export { SceneAction } from './modules/Scene'
6
- export { WindowAction } from './modules/Window'
7
- export { RoutingAction } from './modules/Routing';
@@ -2,34 +2,13 @@ export type RequiredSome<T, K extends keyof T> = Required<Pick<T, K>> & Omit<T,
2
2
 
3
3
  export interface SendParam {
4
4
  cmd: string,
5
- action?: string,
5
+ data: {
6
+ action: string,
7
+ [key: string]: any,
8
+ },
6
9
  }
7
10
 
8
-
9
- interface IdItem {
10
- id: string;
11
- }
12
-
13
- export type IdList = IdItem[];
14
-
15
- export type LocationItem = `X=${number},Y=${number},Z=${number}`
16
-
17
- export type LocationList = Array<{
18
- location: LocationItem
19
- }>
20
-
21
11
  export class Action {
22
- /**
23
- * 视角初始化
24
- */
25
- static cameraInit() {
26
- const param: SendParam = {
27
- cmd: "cameraView",
28
- action: "default",
29
- };
30
- this.sendParam(param, '视角初始化')
31
- }
32
-
33
12
  /**
34
13
  * 发送到model
35
14
  * @param {SendParam} param 发送的参数
@@ -0,0 +1,103 @@
1
+ /**
2
+ * 建筑楼操作方法
3
+ */
4
+ import { Action, SendParam } from "./Action";
5
+
6
+ type BuildingActionType = 'layer' | 'top' | 'HL' | 'Blur'
7
+
8
+ type BuildingType = SendParam & {
9
+ cmd: "building";
10
+ data: {
11
+ action: BuildingActionType;
12
+ buildingId: string;
13
+ floor?: string;
14
+ [key: string]: any;
15
+ };
16
+ }
17
+
18
+ export class BuildingAction extends Action {
19
+ /**
20
+ * 建筑分层
21
+ * @param buildingId 楼的唯一标识
22
+ * @param floor 第几层,-1 表示负一楼,0 表示退出分层
23
+ */
24
+ static buildingLayer(buildingId: string, floor: string) {
25
+ const data: {
26
+ action: 'layer';
27
+ buildingId: string;
28
+ floor: string;
29
+ } = {
30
+ action: 'layer',
31
+ buildingId,
32
+ floor
33
+ };
34
+
35
+ const param: BuildingType = {
36
+ cmd: "building",
37
+ data
38
+ };
39
+
40
+ const floorDesc = floor === '0' ? '退出分层' : floor === '-1' ? '负一楼' : `第${floor}层`;
41
+ this.sendParam(param, `建筑分层 - ${floorDesc}`)
42
+ }
43
+
44
+ /**
45
+ * 掀顶
46
+ * @param buildingId 楼的唯一标识
47
+ */
48
+ static buildingTop(buildingId: string) {
49
+ const data: {
50
+ action: 'top';
51
+ buildingId: string;
52
+ } = {
53
+ action: 'top',
54
+ buildingId
55
+ };
56
+
57
+ const param: BuildingType = {
58
+ cmd: "building",
59
+ data
60
+ };
61
+ this.sendParam(param, '掀顶')
62
+ }
63
+
64
+ /**
65
+ * 高亮楼层
66
+ * @param buildingId 楼的唯一标识
67
+ */
68
+ static buildingHighlight(buildingId: string) {
69
+ const data: {
70
+ action: 'HL';
71
+ buildingId: string;
72
+ } = {
73
+ action: 'HL',
74
+ buildingId
75
+ };
76
+
77
+ const param: BuildingType = {
78
+ cmd: "building",
79
+ data
80
+ };
81
+ this.sendParam(param, '高亮楼层')
82
+ }
83
+
84
+ /**
85
+ * 虚化楼
86
+ * @param buildingId 楼的唯一标识
87
+ */
88
+ static buildingBlur(buildingId: string) {
89
+ const data: {
90
+ action: 'Blur';
91
+ buildingId: string;
92
+ } = {
93
+ action: 'Blur',
94
+ buildingId
95
+ };
96
+
97
+ const param: BuildingType = {
98
+ cmd: "building",
99
+ data
100
+ };
101
+ this.sendParam(param, '虚化楼')
102
+ }
103
+ }