aldehyde 0.2.486 → 0.2.487

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 (35) hide show
  1. package/lib/controls/entry-control.d.ts +1 -0
  2. package/lib/controls/entry-control.d.ts.map +1 -1
  3. package/lib/controls/entry-control.js +2 -0
  4. package/lib/controls/entry-control.js.map +1 -1
  5. package/lib/draw-canvas-edit/components/asset-bar/index.d.ts.map +1 -1
  6. package/lib/draw-canvas-edit/components/asset-bar/index.js +26 -7
  7. package/lib/draw-canvas-edit/components/asset-bar/index.js.map +1 -1
  8. package/lib/draw-canvas-edit/components/asset-bar/index.less +1 -1
  9. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.d.ts.map +1 -1
  10. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.js +9 -5
  11. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.js.map +1 -1
  12. package/lib/draw-canvas-edit/components/render/index.d.ts.map +1 -1
  13. package/lib/draw-canvas-edit/components/render/index.js +1 -1
  14. package/lib/draw-canvas-edit/components/render/index.js.map +1 -1
  15. package/lib/module/dtmpl-edit-card.d.ts +1 -1
  16. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  17. package/lib/module/dtmpl-edit-card.js +40 -7
  18. package/lib/module/dtmpl-edit-card.js.map +1 -1
  19. package/lib/module/dtmpl-edit-page.d.ts +1 -1
  20. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  21. package/lib/module/dtmpl-edit-page.js +40 -7
  22. package/lib/module/dtmpl-edit-page.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/aldehyde/controls/entry-control.tsx +3 -0
  25. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.less +1 -1
  26. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.tsx +19 -6
  27. package/src/aldehyde/draw-canvas-edit/components/render/draws/graph-draw.ts +249 -249
  28. package/src/aldehyde/draw-canvas-edit/components/render/draws/link-draw.ts +1414 -1414
  29. package/src/aldehyde/draw-canvas-edit/components/render/draws/preview-draw.ts +273 -273
  30. package/src/aldehyde/draw-canvas-edit/components/render/draws/ref-line-draw.ts +70 -70
  31. package/src/aldehyde/draw-canvas-edit/components/render/draws/ruler-draw.ts +165 -165
  32. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-outside-handlers.ts +4 -0
  33. package/src/aldehyde/draw-canvas-edit/components/render/index.ts +0 -1
  34. package/src/aldehyde/module/dtmpl-edit-card.tsx +37 -7
  35. package/src/aldehyde/module/dtmpl-edit-page.tsx +38 -8
@@ -1,273 +1,273 @@
1
- import Konva from 'konva';
2
- import { BaseDraw, Draw, Render, MouseButton } from '../types';
3
- import { LinkDraw } from '../draws';
4
-
5
- // 编辑页预览框
6
-
7
- export interface PreviewDrawOption {
8
- size: number
9
- }
10
-
11
- export class PreviewDraw extends BaseDraw implements Draw {
12
- option: PreviewDrawOption;
13
-
14
- state: { [index: string]: any } = {
15
- moving: false // 正在预览框内部拖动
16
- }
17
-
18
- constructor(render: Render, layer: Konva.Layer, option: PreviewDrawOption) {
19
- super(render, layer);
20
- this.option = option;
21
- }
22
-
23
- override draw() {
24
- this.clear();
25
- const stageState = this.render.getStageState();
26
- const { pageWidth, pageHeight, background, backgroundImg } = this.render.getPageSettings(); // 画布尺寸
27
- const previewMargin = 20; // 预览框的外边距
28
- // 预览框 group
29
- const group = new Konva.Group({
30
- name: 'preview',
31
- scale: {
32
- x: this.render.toStageValue(this.option.size),
33
- y: this.render.toStageValue(this.option.size)
34
- },
35
- width: stageState.width,
36
- height: stageState.height
37
- });
38
- const main = this.render.stage.find('#main')[0] as Konva.Layer;
39
- const cover = this.render.stage.find('#cover')[0] as Konva.Layer;
40
- // 提取节点
41
- const nodes = [
42
- ...main.getChildren((node) => !this.render.ignore(node)),
43
- // 补充连线
44
- ...cover.getChildren((node) => node.name() === LinkDraw.name)
45
- ]
46
- // 计算节点占用的区域
47
- let minX = 0;
48
- let maxX = group.width();
49
- let minY = 0;
50
- let maxY = group.height();
51
-
52
- for (const node of nodes) {
53
- const { x, y, width, height } = ((rect) => ({
54
- x: this.render.toStageValue(rect.x - stageState.x),
55
- y: this.render.toStageValue(rect.y - stageState.y),
56
- width: this.render.toStageValue(rect.width),
57
- height: this.render.toStageValue(rect.height)
58
- }))(node.getClientRect());
59
- if (x < minX) {
60
- minX = x;
61
- }
62
- if (x + width > maxX) {
63
- maxX = x + width;
64
- }
65
- if (y < minY) {
66
- minY = y;
67
- }
68
- if (y + height > maxY) {
69
- maxY = y + height;
70
- }
71
- }
72
-
73
- // 根据占用的区域调整预览框的大小
74
- group.setAttrs({
75
- x: this.render.toStageValue(
76
- -stageState.x +
77
- this.render.rulerSize +
78
- stageState.width -
79
- maxX * this.option.size -
80
- previewMargin
81
- ),
82
- y: this.render.toStageValue(
83
- -stageState.y +
84
- this.render.rulerSize +
85
- stageState.height -
86
- maxY * this.option.size -
87
- previewMargin
88
- ),
89
- width: maxX - minX,
90
- height: maxY - minY
91
- });
92
-
93
- // 预览框背景
94
- const bg = new Konva.Rect({
95
- name: this.constructor.name,
96
- x: minX,
97
- y: minY,
98
- width: group.width(),
99
- height: group.height(),
100
- stroke: '#666',
101
- strokeWidth: this.render.toStageValue(1),
102
- });
103
-
104
- // 根据预览框内部拖动,同步画布的移动
105
- const move = () => {
106
- this.state.moving = true;
107
- const pos = this.render.stage.getPointerPosition();
108
- if (pos) {
109
- const pWidth = group.width() * this.option.size;
110
- const pHeight = group.height() * this.option.size;
111
- const pOffsetX = pWidth - (stageState.width - pos.x - previewMargin);
112
- const pOffsetY = pHeight - (stageState.height - pos.y - previewMargin);
113
- const offsetX = pOffsetX / this.option.size;
114
- const offsetY = pOffsetY / this.option.size;
115
- // 点击预览框,点击位置作为画布中心
116
- this.render.positionTool.updateCenter(
117
- offsetX - this.render.rulerSize / this.option.size,
118
- offsetY - this.render.rulerSize / this.option.size
119
- );
120
- }
121
- }
122
- // 预览框内拖动事件处理
123
- bg.on('mousedown', (e) => {
124
- if (e.evt.button === MouseButton.左键) {
125
- move();
126
- }
127
- e.evt.preventDefault();
128
- });
129
- bg.on('mousemove', (e) => {
130
- if (this.state.moving) {
131
- move();
132
- }
133
- e.evt.preventDefault();
134
- })
135
- bg.on('mouseup', () => {
136
- this.state.moving = false;
137
- })
138
- group.add(bg);
139
- // 预览框 画布
140
- const canvas = new Konva.Rect({
141
- name: this.constructor.name,
142
- x: 0,
143
- y: 0,
144
- width: this.render.toStageValue(pageWidth * stageState.scale),
145
- height: this.render.toStageValue(pageHeight * stageState.scale),
146
- stroke: 'rgba(255,0,0,0.2)',
147
- strokeWidth: 1 / this.option.size,
148
- listening: false,
149
- fill: !background ? "#ffffff" : background
150
- });
151
-
152
- group.add(canvas);
153
-
154
- // // 处理背景图(异步)
155
- // if (backgroundImg?.src) {
156
- // const img = new Image();
157
- // img.crossOrigin = 'anonymous'; // 如果图片在 CDN 上,必须加上此属性防止跨域问题
158
- // img.src = backgroundImg.src;
159
- // img.onload = () => {
160
- // canvas.fill(null);
161
- // canvas.fillPatternImage(img);
162
- // canvas.fillPatternRepeat('no-repeat');
163
- // // 让图片自适应填满矩形(等比缩放裁剪效果)
164
- // const scaleX = pageWidth / img.width;
165
- // const scaleY = pageHeight / img.height;
166
- // canvas.fillPatternScaleX(scaleX);
167
- // canvas.fillPatternScaleY(scaleY);
168
- // };
169
- // }
170
-
171
- // 复制提取的节点,用作预览
172
- for (const node of nodes) {
173
- const copy = node.clone();
174
- // 消除连接线选中状态
175
- copy.find('.link-line').forEach((link: Konva.Line) => {
176
- const dash = link.dash();
177
- if (dash && dash.length === 2 && dash.every((o) => o === 1)) {
178
- link.dash([]);
179
- }
180
- });
181
- // 不显示 调整点
182
- copy.find('.link-point').map((o: Konva.Shape) => o.destroy());
183
- copy.find('.link-manual-point').map((o: Konva.Shape) => o.destroy());
184
- // 不可交互
185
- copy.listening(false);
186
- // 设置名称用于 ignore
187
- copy.name(this.constructor.name);
188
- group.add(copy);
189
- }
190
- // 放大的时候,显示当前可视区域提示框
191
- if (stageState.scale > 1) {
192
- // 画布可视区域起点坐标(左上)
193
- let x1 = this.render.toStageValue(-stageState.x + this.render.rulerSize);
194
- let y1 = this.render.toStageValue(-stageState.y + this.render.rulerSize);
195
- // 限制可视区域提示框不能超出预览区域
196
- x1 = x1 > minX ? x1 : minX;
197
- x1 = x1 < maxX ? x1 : maxX;
198
- y1 = y1 > minY ? y1 : minY;
199
- y1 = y1 < maxY ? y1 : maxY;
200
- // 画布可视区域起点坐标(右下)
201
- let x2 =
202
- this.render.toStageValue(-stageState.x + this.render.rulerSize) +
203
- this.render.toStageValue(stageState.width);
204
- let y2 =
205
- this.render.toStageValue(-stageState.y + this.render.rulerSize) +
206
- this.render.toStageValue(stageState.height);
207
- // 限制可视区域提示框不能超出预览区域
208
- x2 = x2 > minX ? x2 : minX;
209
- x2 = x2 < maxX ? x2 : maxX;
210
- y2 = y2 > minY ? y2 : minY;
211
- y2 = y2 < maxY ? y2 : maxY;
212
- // 可视区域提示框 连线坐标序列
213
- let points: Array<[x: number, y: number]> = [];
214
-
215
- // 可视区域提示框“超出”预览区域影响的“边”不做绘制
216
- // "超出"(上面实际处理:把超过的坐标设置为上/下线,判断方式如[以正则表达式表示]:(x|y)(1|2) === (min|max)(X|Y))
217
- // 简单直接穷举 9 种情况:
218
- // 不超出
219
- // 上超出 下超出
220
- // 左超出 右超出
221
- // 左上超出 右上超出
222
- // 左下超出 右下超出
223
-
224
- // 不超出,绘制完整矩形
225
- if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
226
- points = [[x1, y1], [x2, y1], [x2, y2], [x1, y2], [x1, y1]];
227
- }
228
- // 上超出,不绘制“上边”
229
- if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
230
- points = [[x2, y1], [x2, y2], [x1, y2], [x1, y1]];
231
- }
232
- // 下超出,不绘制“下边”
233
- if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
234
- points = [[x1, y2], [x1, y1], [x2, y1], [x2, y2]];
235
- }
236
- // 左超出,不绘制“左边”
237
- if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
238
- points = [[x1, y1], [x2, y1], [x2, y2], [x1, y2]];
239
- }
240
- // 右超出,不绘制“右边”
241
- if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
242
- points = [[x2, y1], [x1, y1], [x1, y2], [x2, y2]];
243
- }
244
- // 左上超出,不绘制“上边”、“左边”
245
- if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
246
- points = [[x2, y1], [x2, y2], [x1, y2]];
247
- }
248
- // 右上超出,不绘制“上边”、“右边”
249
- if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
250
- points = [[x2, y2], [x1, y2], [x1, y1]];
251
- }
252
- // 左下超出,不绘制“下边”、“左边”
253
- if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
254
- points = [[x1, y1], [x2, y1], [x2, y2]];
255
- }
256
- // 右下超出,不绘制“下边”、“右边”
257
- if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
258
- points = [[x2, y1], [x1, y1], [x1, y2]];
259
- }
260
- // 可视区域提示框
261
- group.add(
262
- new Konva.Line({
263
- name: this.constructor.name,
264
- points: points.flat(),
265
- stroke: 'blue',
266
- strokeWidth: 1 / this.option.size,
267
- listening: false
268
- })
269
- );
270
- }
271
- this.group.add(group);
272
- }
273
- }
1
+ import Konva from 'konva';
2
+ import { BaseDraw, Draw, Render, MouseButton } from '../types';
3
+ import { LinkDraw } from '../draws';
4
+
5
+ // 编辑页预览框
6
+
7
+ export interface PreviewDrawOption {
8
+ size: number
9
+ }
10
+
11
+ export class PreviewDraw extends BaseDraw implements Draw {
12
+ option: PreviewDrawOption;
13
+
14
+ state: { [index: string]: any } = {
15
+ moving: false // 正在预览框内部拖动
16
+ }
17
+
18
+ constructor(render: Render, layer: Konva.Layer, option: PreviewDrawOption) {
19
+ super(render, layer);
20
+ this.option = option;
21
+ }
22
+
23
+ override draw() {
24
+ this.clear();
25
+ const stageState = this.render.getStageState();
26
+ const { pageWidth, pageHeight, background, backgroundImg } = this.render.getPageSettings(); // 画布尺寸
27
+ const previewMargin = 20; // 预览框的外边距
28
+ // 预览框 group
29
+ const group = new Konva.Group({
30
+ name: 'preview',
31
+ scale: {
32
+ x: this.render.toStageValue(this.option.size),
33
+ y: this.render.toStageValue(this.option.size)
34
+ },
35
+ width: stageState.width,
36
+ height: stageState.height
37
+ });
38
+ const main = this.render.stage.find('#main')[0] as Konva.Layer;
39
+ const cover = this.render.stage.find('#cover')[0] as Konva.Layer;
40
+ // 提取节点
41
+ const nodes = [
42
+ ...main.getChildren((node) => !this.render.ignore(node)),
43
+ // 补充连线
44
+ ...cover.getChildren((node) => node.name() === LinkDraw.name)
45
+ ]
46
+ // 计算节点占用的区域
47
+ let minX = 0;
48
+ let maxX = group.width();
49
+ let minY = 0;
50
+ let maxY = group.height();
51
+
52
+ for (const node of nodes) {
53
+ const { x, y, width, height } = ((rect) => ({
54
+ x: this.render.toStageValue(rect.x - stageState.x),
55
+ y: this.render.toStageValue(rect.y - stageState.y),
56
+ width: this.render.toStageValue(rect.width),
57
+ height: this.render.toStageValue(rect.height)
58
+ }))(node.getClientRect());
59
+ if (x < minX) {
60
+ minX = x;
61
+ }
62
+ if (x + width > maxX) {
63
+ maxX = x + width;
64
+ }
65
+ if (y < minY) {
66
+ minY = y;
67
+ }
68
+ if (y + height > maxY) {
69
+ maxY = y + height;
70
+ }
71
+ }
72
+
73
+ // 根据占用的区域调整预览框的大小
74
+ group.setAttrs({
75
+ x: this.render.toStageValue(
76
+ -stageState.x +
77
+ this.render.rulerSize +
78
+ stageState.width -
79
+ maxX * this.option.size -
80
+ previewMargin
81
+ ),
82
+ y: this.render.toStageValue(
83
+ -stageState.y +
84
+ this.render.rulerSize +
85
+ stageState.height -
86
+ maxY * this.option.size -
87
+ previewMargin
88
+ ),
89
+ width: maxX - minX,
90
+ height: maxY - minY
91
+ });
92
+
93
+ // 预览框背景
94
+ const bg = new Konva.Rect({
95
+ name: this.constructor.name,
96
+ x: minX,
97
+ y: minY,
98
+ width: group.width(),
99
+ height: group.height(),
100
+ stroke: '#666',
101
+ strokeWidth: this.render.toStageValue(1),
102
+ });
103
+
104
+ // 根据预览框内部拖动,同步画布的移动
105
+ const move = () => {
106
+ this.state.moving = true;
107
+ const pos = this.render.stage.getPointerPosition();
108
+ if (pos) {
109
+ const pWidth = group.width() * this.option.size;
110
+ const pHeight = group.height() * this.option.size;
111
+ const pOffsetX = pWidth - (stageState.width - pos.x - previewMargin);
112
+ const pOffsetY = pHeight - (stageState.height - pos.y - previewMargin);
113
+ const offsetX = pOffsetX / this.option.size;
114
+ const offsetY = pOffsetY / this.option.size;
115
+ // 点击预览框,点击位置作为画布中心
116
+ this.render.positionTool.updateCenter(
117
+ offsetX - this.render.rulerSize / this.option.size,
118
+ offsetY - this.render.rulerSize / this.option.size
119
+ );
120
+ }
121
+ }
122
+ // 预览框内拖动事件处理
123
+ bg.on('mousedown', (e) => {
124
+ if (e.evt.button === MouseButton.左键) {
125
+ move();
126
+ }
127
+ e.evt.preventDefault();
128
+ });
129
+ bg.on('mousemove', (e) => {
130
+ if (this.state.moving) {
131
+ move();
132
+ }
133
+ e.evt.preventDefault();
134
+ })
135
+ bg.on('mouseup', () => {
136
+ this.state.moving = false;
137
+ })
138
+ group.add(bg);
139
+ // 预览框 画布
140
+ const canvas = new Konva.Rect({
141
+ name: this.constructor.name,
142
+ x: 0,
143
+ y: 0,
144
+ width: this.render.toStageValue(pageWidth * stageState.scale),
145
+ height: this.render.toStageValue(pageHeight * stageState.scale),
146
+ stroke: 'rgba(255,0,0,0.2)',
147
+ strokeWidth: 1 / this.option.size,
148
+ listening: false,
149
+ fill: !background ? "#ffffff" : background
150
+ });
151
+
152
+ group.add(canvas);
153
+
154
+ // // 处理背景图(异步)
155
+ // if (backgroundImg?.src) {
156
+ // const img = new Image();
157
+ // img.crossOrigin = 'anonymous'; // 如果图片在 CDN 上,必须加上此属性防止跨域问题
158
+ // img.src = backgroundImg.src;
159
+ // img.onload = () => {
160
+ // canvas.fill(null);
161
+ // canvas.fillPatternImage(img);
162
+ // canvas.fillPatternRepeat('no-repeat');
163
+ // // 让图片自适应填满矩形(等比缩放裁剪效果)
164
+ // const scaleX = pageWidth / img.width;
165
+ // const scaleY = pageHeight / img.height;
166
+ // canvas.fillPatternScaleX(scaleX);
167
+ // canvas.fillPatternScaleY(scaleY);
168
+ // };
169
+ // }
170
+
171
+ // 复制提取的节点,用作预览
172
+ for (const node of nodes) {
173
+ const copy = node.clone();
174
+ // 消除连接线选中状态
175
+ copy.find('.link-line').forEach((link: Konva.Line) => {
176
+ const dash = link.dash();
177
+ if (dash && dash.length === 2 && dash.every((o) => o === 1)) {
178
+ link.dash([]);
179
+ }
180
+ });
181
+ // 不显示 调整点
182
+ copy.find('.link-point').map((o: Konva.Shape) => o.destroy());
183
+ copy.find('.link-manual-point').map((o: Konva.Shape) => o.destroy());
184
+ // 不可交互
185
+ copy.listening(false);
186
+ // 设置名称用于 ignore
187
+ copy.name(this.constructor.name);
188
+ group.add(copy);
189
+ }
190
+ // 放大的时候,显示当前可视区域提示框
191
+ if (stageState.scale > 1) {
192
+ // 画布可视区域起点坐标(左上)
193
+ let x1 = this.render.toStageValue(-stageState.x + this.render.rulerSize);
194
+ let y1 = this.render.toStageValue(-stageState.y + this.render.rulerSize);
195
+ // 限制可视区域提示框不能超出预览区域
196
+ x1 = x1 > minX ? x1 : minX;
197
+ x1 = x1 < maxX ? x1 : maxX;
198
+ y1 = y1 > minY ? y1 : minY;
199
+ y1 = y1 < maxY ? y1 : maxY;
200
+ // 画布可视区域起点坐标(右下)
201
+ let x2 =
202
+ this.render.toStageValue(-stageState.x + this.render.rulerSize) +
203
+ this.render.toStageValue(stageState.width);
204
+ let y2 =
205
+ this.render.toStageValue(-stageState.y + this.render.rulerSize) +
206
+ this.render.toStageValue(stageState.height);
207
+ // 限制可视区域提示框不能超出预览区域
208
+ x2 = x2 > minX ? x2 : minX;
209
+ x2 = x2 < maxX ? x2 : maxX;
210
+ y2 = y2 > minY ? y2 : minY;
211
+ y2 = y2 < maxY ? y2 : maxY;
212
+ // 可视区域提示框 连线坐标序列
213
+ let points: Array<[x: number, y: number]> = [];
214
+
215
+ // 可视区域提示框“超出”预览区域影响的“边”不做绘制
216
+ // "超出"(上面实际处理:把超过的坐标设置为上/下线,判断方式如[以正则表达式表示]:(x|y)(1|2) === (min|max)(X|Y))
217
+ // 简单直接穷举 9 种情况:
218
+ // 不超出
219
+ // 上超出 下超出
220
+ // 左超出 右超出
221
+ // 左上超出 右上超出
222
+ // 左下超出 右下超出
223
+
224
+ // 不超出,绘制完整矩形
225
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
226
+ points = [[x1, y1], [x2, y1], [x2, y2], [x1, y2], [x1, y1]];
227
+ }
228
+ // 上超出,不绘制“上边”
229
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
230
+ points = [[x2, y1], [x2, y2], [x1, y2], [x1, y1]];
231
+ }
232
+ // 下超出,不绘制“下边”
233
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
234
+ points = [[x1, y2], [x1, y1], [x2, y1], [x2, y2]];
235
+ }
236
+ // 左超出,不绘制“左边”
237
+ if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
238
+ points = [[x1, y1], [x2, y1], [x2, y2], [x1, y2]];
239
+ }
240
+ // 右超出,不绘制“右边”
241
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
242
+ points = [[x2, y1], [x1, y1], [x1, y2], [x2, y2]];
243
+ }
244
+ // 左上超出,不绘制“上边”、“左边”
245
+ if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
246
+ points = [[x2, y1], [x2, y2], [x1, y2]];
247
+ }
248
+ // 右上超出,不绘制“上边”、“右边”
249
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
250
+ points = [[x2, y2], [x1, y2], [x1, y1]];
251
+ }
252
+ // 左下超出,不绘制“下边”、“左边”
253
+ if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
254
+ points = [[x1, y1], [x2, y1], [x2, y2]];
255
+ }
256
+ // 右下超出,不绘制“下边”、“右边”
257
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
258
+ points = [[x2, y1], [x1, y1], [x1, y2]];
259
+ }
260
+ // 可视区域提示框
261
+ group.add(
262
+ new Konva.Line({
263
+ name: this.constructor.name,
264
+ points: points.flat(),
265
+ stroke: 'blue',
266
+ strokeWidth: 1 / this.option.size,
267
+ listening: false
268
+ })
269
+ );
270
+ }
271
+ this.group.add(group);
272
+ }
273
+ }