@soonspacejs/plugin-drawing-topology 2.13.7 → 2.13.9

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/README.md CHANGED
@@ -1,15 +1,15 @@
1
- # @soonspacejs/plugin-drawing-topology
2
-
3
- > DrawTopologyPlugin plugin for SoonSpace.js
4
-
5
- Document: [http://www.xwbuilders.com:8800/plugin/draw-topology.html](http://www.xwbuilders.com:8800/plugin/draw-topology.html)
6
-
7
- ## 交互
8
-
9
- 鼠标左键单击添加节点
10
- 鼠标左键双击添加节点并结束绘制
11
-
12
- 回车键结束绘制
13
-
14
- 鼠标右键单击或 `delete` 删除上一个节点
1
+ # @soonspacejs/plugin-drawing-topology
2
+
3
+ > DrawTopologyPlugin plugin for SoonSpace.js
4
+
5
+ Document: [http://www.xwbuilders.com:8800/plugin/draw-topology.html](http://www.xwbuilders.com:8800/plugin/draw-topology.html)
6
+
7
+ ## 交互
8
+
9
+ 鼠标左键单击添加节点
10
+ 鼠标左键双击添加节点并结束绘制
11
+
12
+ 回车键结束绘制
13
+
14
+ 鼠标右键单击或 `delete` 删除上一个节点
15
15
  `esc` 清空节点并取消绘制
@@ -0,0 +1,34 @@
1
+ import { Object3D } from 'three';
2
+ import SoonSpace, { TopologyNodeInfo } from 'soonspacejs';
3
+ import type { Topology, TopologyInfo } from 'soonspacejs';
4
+ export interface StartOptions extends TopologyInfo {
5
+ onCancel?: () => void;
6
+ onAdd?: (node: TopologyNodeInfo, intersectObject: Object3D) => void;
7
+ onUndo?: (node: TopologyNodeInfo) => void;
8
+ onDone?: (nodes: TopologyNodeInfo[], topology: Topology | null) => void;
9
+ }
10
+ export default class DrawIngTopologyPlugin {
11
+ readonly ssp: SoonSpace;
12
+ readonly viewport: SoonSpace['viewport'];
13
+ drawing: boolean;
14
+ nodes: TopologyNodeInfo[];
15
+ topology: Topology | null;
16
+ private mouseDownNode;
17
+ private mouseDownObject;
18
+ private mouseMoveNode;
19
+ private options;
20
+ constructor(ssp: SoonSpace);
21
+ start(options: StartOptions): void;
22
+ undo(): void;
23
+ done(): void;
24
+ cancel(): void;
25
+ private stop;
26
+ private onMouseDowm;
27
+ private onMouseMove;
28
+ private onClick;
29
+ private onDblClick;
30
+ private onRightClick;
31
+ private onKeyUp;
32
+ private pushNode;
33
+ private renderTopology;
34
+ }
package/dist/index.esm.js CHANGED
@@ -1,152 +1 @@
1
- import SoonSpace from 'soonspacejs';
2
-
3
- const { randomString, } = SoonSpace.utils;
4
- class DrawIngTopologyPlugin {
5
- constructor(ssp) {
6
- this.ssp = ssp;
7
- // 绘制状态
8
- this.drawing = false;
9
- this.nodes = [];
10
- this.topology = null;
11
- this.mouseDownNode = null;
12
- this.mouseDownObject = null;
13
- this.mouseMoveNode = null;
14
- this.options = {
15
- id: 'drawing_topology',
16
- type: 'line',
17
- nodes: [],
18
- };
19
- this.viewport = ssp.viewport;
20
- this.onMouseDowm = this.onMouseDowm.bind(this);
21
- this.onMouseMove = this.onMouseMove.bind(this);
22
- this.onClick = this.onClick.bind(this);
23
- this.onDblClick = this.onDblClick.bind(this);
24
- this.onRightClick = this.onRightClick.bind(this);
25
- this.onKeyUp = this.onKeyUp.bind(this);
26
- }
27
- start(options) {
28
- this.options = options;
29
- this.drawing = true;
30
- this.ssp.signals.mouseDown.add(this.onMouseDowm);
31
- this.ssp.signals.mouseMove.add(this.onMouseMove);
32
- this.ssp.signals.click.add(this.onClick);
33
- this.ssp.signals.dblClick.add(this.onDblClick);
34
- this.ssp.signals.rightClick.add(this.onRightClick);
35
- this.ssp.signals.keyUp.add(this.onKeyUp);
36
- }
37
- undo() {
38
- var _a, _b;
39
- const poppedNode = this.nodes.pop();
40
- if (poppedNode) {
41
- this.renderTopology(this.nodes);
42
- (_b = (_a = this.options).onUndo) === null || _b === void 0 ? void 0 : _b.call(_a, poppedNode);
43
- }
44
- }
45
- done() {
46
- var _a, _b;
47
- this.renderTopology(this.nodes);
48
- (_b = (_a = this.options).onDone) === null || _b === void 0 ? void 0 : _b.call(_a, [...this.nodes], this.topology);
49
- this.stop();
50
- }
51
- cancel() {
52
- var _a, _b;
53
- if (this.topology)
54
- this.ssp.removeObject(this.topology);
55
- (_b = (_a = this.options).onCancel) === null || _b === void 0 ? void 0 : _b.call(_a);
56
- this.stop();
57
- }
58
- stop() {
59
- this.nodes = [];
60
- this.topology = null;
61
- this.mouseDownNode = null;
62
- this.mouseDownObject = null;
63
- this.mouseMoveNode = null;
64
- this.options = {
65
- id: 'drawing_topology',
66
- type: 'line',
67
- nodes: [],
68
- };
69
- this.drawing = false;
70
- this.ssp.signals.mouseDown.remove(this.onMouseDowm);
71
- this.ssp.signals.mouseMove.remove(this.onMouseMove);
72
- this.ssp.signals.click.remove(this.onClick);
73
- this.ssp.signals.dblClick.remove(this.onDblClick);
74
- this.ssp.signals.rightClick.remove(this.onRightClick);
75
- this.ssp.signals.keyUp.remove(this.onKeyUp);
76
- }
77
- onMouseDowm(e) {
78
- const [intersect] = this.ssp.viewport.getIntersects(e);
79
- if (intersect) {
80
- const { object, point, } = intersect;
81
- const rs = randomString();
82
- this.mouseDownNode = {
83
- id: `node${rs}`,
84
- name: `node${rs}`,
85
- position: point.setY(point.y + 0.01),
86
- graphs: [],
87
- };
88
- this.mouseDownObject = object;
89
- }
90
- }
91
- onMouseMove(e) {
92
- const [intersect] = this.ssp.viewport.getIntersects(e);
93
- if (intersect) {
94
- const rs = randomString();
95
- this.mouseMoveNode = {
96
- id: `node${rs}`,
97
- name: `node${rs}`,
98
- position: intersect.point.clone().setY(intersect.point.y),
99
- graphs: [],
100
- };
101
- this.renderTopology([...this.nodes, this.mouseMoveNode]);
102
- }
103
- }
104
- onClick() {
105
- this.pushNode();
106
- }
107
- onDblClick() {
108
- var _a, _b;
109
- this.pushNode();
110
- (_b = (_a = this.options).onDone) === null || _b === void 0 ? void 0 : _b.call(_a, [...this.nodes], this.topology);
111
- this.stop();
112
- }
113
- onRightClick() {
114
- this.undo();
115
- }
116
- onKeyUp(e) {
117
- switch (e.code) {
118
- case 'Backspace':
119
- this.undo();
120
- break;
121
- case 'Enter':
122
- this.done();
123
- break;
124
- case 'Escape':
125
- this.cancel();
126
- break;
127
- }
128
- }
129
- pushNode() {
130
- var _a, _b;
131
- if (this.mouseDownNode && this.mouseDownObject) {
132
- this.nodes.push(this.mouseDownNode);
133
- this.renderTopology(this.nodes);
134
- (_b = (_a = this.options).onAdd) === null || _b === void 0 ? void 0 : _b.call(_a, this.mouseDownNode, this.mouseDownObject);
135
- this.mouseDownNode = null;
136
- this.mouseDownObject = null;
137
- }
138
- }
139
- renderTopology(nodes) {
140
- if (this.topology) {
141
- this.ssp.resetTopologyNodes(this.topology, nodes);
142
- }
143
- else {
144
- this.topology = this.ssp.createTopology(Object.assign(Object.assign({}, this.options), {
145
- // 正在绘制中的路径不在导航计算范围内,所以类型使用 network,因为 line 会移动计算
146
- type: 'line', nodes }));
147
- }
148
- }
149
- }
150
-
151
- export { DrawIngTopologyPlugin as default };
152
- //# sourceMappingURL=index.esm.js.map
1
+ import s from"soonspacejs";const{randomString:o}=s.utils;class i{constructor(s){this.ssp=s,this.drawing=!1,this.nodes=[],this.topology=null,this.mouseDownNode=null,this.mouseDownObject=null,this.mouseMoveNode=null,this.options={id:"drawing_topology",type:"line",nodes:[]},this.viewport=s.viewport,this.onMouseDowm=this.onMouseDowm.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.onClick=this.onClick.bind(this),this.onDblClick=this.onDblClick.bind(this),this.onRightClick=this.onRightClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this)}start(s){this.options=s,this.drawing=!0,this.ssp.signals.mouseDown.add(this.onMouseDowm),this.ssp.signals.mouseMove.add(this.onMouseMove),this.ssp.signals.click.add(this.onClick),this.ssp.signals.dblClick.add(this.onDblClick),this.ssp.signals.rightClick.add(this.onRightClick),this.ssp.signals.keyUp.add(this.onKeyUp)}undo(){var s,o;const i=this.nodes.pop();i&&(this.renderTopology(this.nodes),null===(o=(s=this.options).onUndo)||void 0===o||o.call(s,i))}done(){var s,o;this.renderTopology(this.nodes),null===(o=(s=this.options).onDone)||void 0===o||o.call(s,[...this.nodes],this.topology),this.stop()}cancel(){var s,o;this.topology&&this.ssp.removeObject(this.topology),null===(o=(s=this.options).onCancel)||void 0===o||o.call(s),this.stop()}stop(){this.nodes=[],this.topology=null,this.mouseDownNode=null,this.mouseDownObject=null,this.mouseMoveNode=null,this.options={id:"drawing_topology",type:"line",nodes:[]},this.drawing=!1,this.ssp.signals.mouseDown.remove(this.onMouseDowm),this.ssp.signals.mouseMove.remove(this.onMouseMove),this.ssp.signals.click.remove(this.onClick),this.ssp.signals.dblClick.remove(this.onDblClick),this.ssp.signals.rightClick.remove(this.onRightClick),this.ssp.signals.keyUp.remove(this.onKeyUp)}onMouseDowm(s){const[i]=this.ssp.viewport.getIntersects(s);if(i){const{object:s,point:t}=i,e=o();this.mouseDownNode={id:`node${e}`,name:`node${e}`,position:t.setY(t.y+.01),graphs:[]},this.mouseDownObject=s}}onMouseMove(s){const[i]=this.ssp.viewport.getIntersects(s);if(i){const s=o();this.mouseMoveNode={id:`node${s}`,name:`node${s}`,position:i.point.clone().setY(i.point.y),graphs:[]},this.renderTopology([...this.nodes,this.mouseMoveNode])}}onClick(){this.pushNode()}onDblClick(){var s,o;this.pushNode(),null===(o=(s=this.options).onDone)||void 0===o||o.call(s,[...this.nodes],this.topology),this.stop()}onRightClick(){this.undo()}onKeyUp(s){switch(s.code){case"Backspace":this.undo();break;case"Enter":this.done();break;case"Escape":this.cancel()}}pushNode(){var s,o;this.mouseDownNode&&this.mouseDownObject&&(this.nodes.push(this.mouseDownNode),this.renderTopology(this.nodes),null===(o=(s=this.options).onAdd)||void 0===o||o.call(s,this.mouseDownNode,this.mouseDownObject),this.mouseDownNode=null,this.mouseDownObject=null)}renderTopology(s){this.topology?this.ssp.resetTopologyNodes(this.topology,s):this.topology=this.ssp.createTopology(Object.assign(Object.assign({},this.options),{type:"line",nodes:s}))}}export{i as default};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@soonspacejs/plugin-drawing-topology",
3
3
  "pluginName": "DrawingTopologyPlugin",
4
- "version": "2.13.7",
4
+ "version": "2.13.9",
5
5
  "description": "DrawingTopologyPlugin plugin for SoonSpace.js",
6
6
  "main": "dist/index.esm.js",
7
7
  "module": "dist/index.esm.js",
@@ -13,8 +13,8 @@
13
13
  ],
14
14
  "author": "xunwei",
15
15
  "license": "UNLICENSED",
16
- "gitHead": "550040550bf20ec0015982ff1159d0cfe9b35ed3",
16
+ "gitHead": "a5596909f48bd136905b85f239e13690f9f2c66e",
17
17
  "peerDependencies": {
18
- "soonspacejs": "2.13.7"
18
+ "soonspacejs": "2.13.9"
19
19
  }
20
20
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":["import { Object3D, } from 'three'\r\nimport SoonSpace, { TopologyNodeInfo, } from 'soonspacejs'\r\nimport type { Topology, TopologyInfo, } from 'soonspacejs'\r\n\r\nexport interface StartOptions extends TopologyInfo {\r\n onCancel?: () => void;\r\n onAdd?: ( node: TopologyNodeInfo, intersectObject: Object3D ) => void;\r\n onUndo?: ( node: TopologyNodeInfo ) => void;\r\n onDone?: ( nodes: TopologyNodeInfo[], topology: Topology | null ) => void;\r\n}\r\n\r\nconst { randomString, } = SoonSpace.utils\r\n\r\nexport default class DrawIngTopologyPlugin {\r\n\r\n readonly viewport: SoonSpace['viewport']\r\n\r\n // 绘制状态\r\n drawing = false\r\n\r\n nodes: TopologyNodeInfo[] = []\r\n topology: Topology | null = null\r\n\r\n private mouseDownNode: TopologyNodeInfo | null = null\r\n private mouseDownObject: Object3D | null = null\r\n private mouseMoveNode: TopologyNodeInfo | null = null\r\n \r\n private options: StartOptions = {\r\n id: 'drawing_topology',\r\n type: 'line',\r\n nodes: [],\r\n }\r\n\r\n constructor ( readonly ssp: SoonSpace ) {\r\n\r\n this.viewport = ssp.viewport\r\n\r\n this.onMouseDowm = this.onMouseDowm.bind( this )\r\n this.onMouseMove = this.onMouseMove.bind( this )\r\n this.onClick = this.onClick.bind( this )\r\n this.onDblClick = this.onDblClick.bind( this )\r\n this.onRightClick = this.onRightClick.bind( this )\r\n this.onKeyUp = this.onKeyUp.bind( this )\r\n \r\n }\r\n\r\n start ( options: StartOptions ) {\r\n\r\n this.options = options\r\n\r\n this.drawing = true\r\n\r\n this.ssp.signals.mouseDown.add( this.onMouseDowm )\r\n this.ssp.signals.mouseMove.add( this.onMouseMove )\r\n this.ssp.signals.click.add( this.onClick )\r\n this.ssp.signals.dblClick.add( this.onDblClick )\r\n this.ssp.signals.rightClick.add( this.onRightClick )\r\n this.ssp.signals.keyUp.add( this.onKeyUp )\r\n \r\n }\r\n\r\n undo () {\r\n\r\n const poppedNode = this.nodes.pop()\r\n\r\n if ( poppedNode ) {\r\n\r\n this.renderTopology( this.nodes )\r\n this.options.onUndo?.( poppedNode )\r\n \r\n }\r\n \r\n }\r\n\r\n done () {\r\n\r\n this.renderTopology( this.nodes )\r\n this.options.onDone?.( [ ...this.nodes ], this.topology )\r\n this.stop()\r\n \r\n }\r\n\r\n cancel () {\r\n\r\n if ( this.topology ) this.ssp.removeObject( this.topology )\r\n this.options.onCancel?.()\r\n this.stop()\r\n \r\n }\r\n\r\n private stop () {\r\n\r\n this.nodes = []\r\n this.topology = null\r\n\r\n this.mouseDownNode = null\r\n this.mouseDownObject = null\r\n this.mouseMoveNode = null\r\n\r\n this.options = {\r\n id: 'drawing_topology',\r\n type: 'line',\r\n nodes: [],\r\n }\r\n\r\n this.drawing = false\r\n\r\n this.ssp.signals.mouseDown.remove( this.onMouseDowm )\r\n this.ssp.signals.mouseMove.remove( this.onMouseMove )\r\n this.ssp.signals.click.remove( this.onClick )\r\n this.ssp.signals.dblClick.remove( this.onDblClick )\r\n this.ssp.signals.rightClick.remove( this.onRightClick )\r\n this.ssp.signals.keyUp.remove( this.onKeyUp )\r\n \r\n }\r\n\r\n private onMouseDowm ( e: MouseEvent ) {\r\n\r\n const [ intersect ] = this.ssp.viewport.getIntersects( e )\r\n \r\n if ( intersect ) {\r\n\r\n const { object, point, } = intersect\r\n\r\n const rs = randomString()\r\n\r\n this.mouseDownNode = {\r\n id: `node${rs}`,\r\n name: `node${rs}`,\r\n position: point.setY( point.y + 0.01 ),\r\n graphs: [],\r\n }\r\n this.mouseDownObject = object\r\n \r\n }\r\n\r\n }\r\n\r\n private onMouseMove ( e: MouseEvent ) {\r\n\r\n const [ intersect ] = this.ssp.viewport.getIntersects( e )\r\n\r\n if ( intersect ) {\r\n\r\n const rs = randomString()\r\n\r\n this.mouseMoveNode = {\r\n id: `node${rs}`,\r\n name: `node${rs}`,\r\n position: intersect.point.clone().setY( intersect.point.y ),\r\n graphs: [],\r\n }\r\n this.renderTopology( [ ...this.nodes, this.mouseMoveNode ] )\r\n \r\n }\r\n \r\n }\r\n\r\n private onClick ( ) {\r\n\r\n this.pushNode()\r\n \r\n }\r\n\r\n private onDblClick ( ) {\r\n\r\n this.pushNode()\r\n\r\n this.options.onDone?.( [ ...this.nodes ], this.topology )\r\n this.stop()\r\n \r\n }\r\n\r\n private onRightClick ( ) {\r\n\r\n this.undo()\r\n \r\n }\r\n\r\n private onKeyUp ( e: KeyboardEvent ) {\r\n\r\n switch ( e.code ) {\r\n\r\n case 'Backspace':\r\n this.undo()\r\n break\r\n case 'Enter':\r\n this.done()\r\n break\r\n case 'Escape':\r\n this.cancel()\r\n break\r\n \r\n }\r\n \r\n }\r\n\r\n private pushNode () {\r\n\r\n if ( this.mouseDownNode && this.mouseDownObject ) {\r\n\r\n this.nodes.push( this.mouseDownNode )\r\n this.renderTopology( this.nodes )\r\n this.options.onAdd?.( this.mouseDownNode, this.mouseDownObject )\r\n this.mouseDownNode = null\r\n this.mouseDownObject = null\r\n \r\n }\r\n \r\n }\r\n\r\n\r\n private renderTopology ( nodes: TopologyNodeInfo[] ) {\r\n\r\n if ( this.topology ) {\r\n\r\n this.ssp.resetTopologyNodes( this.topology, nodes )\r\n \r\n } else {\r\n\r\n this.topology = this.ssp.createTopology( {\r\n ...this.options,\r\n // 正在绘制中的路径不在导航计算范围内,所以类型使用 network,因为 line 会移动计算\r\n type: 'line',\r\n nodes,\r\n } )\r\n \r\n }\r\n\r\n }\r\n\r\n}\r\n"],"names":[],"mappings":"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"}