kfb-view 3.3.5 → 3.3.6

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/src/tool/Image.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import {Brush} from './Brush';
2
- import {getDistance, getRectPoints} from '../util/calculate';
2
+ import {pointsToRegion} from '../util/calculate';
3
3
  import {EventEmitter} from '../util/event-emitter';
4
4
 
5
5
  const et = new EventEmitter();
@@ -22,41 +22,22 @@ class Image extends Brush {
22
22
  * @param {number} points[].x - 绘制的点x坐标
23
23
  * @param {number} points[].y - 绘制的点y坐标
24
24
  * @param {number=} scale
25
- * @param {number=} angle
26
25
  */
27
- draw(points, scale = 1, angle = 0) {
28
- if (points.length === 2) {
29
- points = getRectPoints(points);
30
- }
31
- const width = getDistance(points[1], points[0]);
32
- const height = getDistance(points[2], points[0]);
33
- const region = {
34
- ...points[0],
35
- width,
36
- height,
37
- };
26
+ draw(points, scale = 1) {
27
+ const region = pointsToRegion(points);
38
28
  if (this.options.imgLoadSuccess) {
39
- this.drawImage(this.options.img, region, angle);
29
+ this.drawImage(this.options.img, region);
40
30
  } else if (this.options.img) {
41
31
  const img = this.options.img;
42
32
  et.$once('load', () => {
43
- this.drawImage(img, region, angle);
33
+ this.drawImage(img, region);
44
34
  }, true, img);
45
35
  }
46
36
  }
47
37
 
48
- drawImage(img, region, angle = 0) {
38
+ drawImage(img, region) {
49
39
  const ctx = this.canvas.getContext('2d');
50
- ctx.beginPath();
51
- ctx.save();
52
- ctx.translate(region.x, region.y);
53
- if (angle < 0) {
54
- angle += 360;
55
- }
56
- const _rotation = angle % 360;
57
- ctx.rotate(_rotation * Math.PI / 180);
58
- ctx.drawImage(img, 0, 0, region.width, region.height);
59
- ctx.restore();
40
+ ctx.drawImage(img, region.x, region.y, region.width, region.height);
60
41
  }
61
42
  }
62
43
 
package/src/view.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import openSeadragon from './plugin/openseadragon/openseadragon';
2
+ import * as zr from './plugin/zrender/zrender';
2
3
  import './util/canvas';
3
4
  import {EventEmitter} from './util/event-emitter';
4
5
  import {$, dataType, deepClone} from './util';
5
- import {pointsToRegion, regionToPoint} from './util/calculate';
6
+ import {pointsToRegion} from './util/calculate';
6
7
  import * as COMPONENTS from './const/component';
7
8
  import * as EVENTS from './const/event';
8
9
  import * as Components from './components';
@@ -113,6 +114,9 @@ export default class KfbView extends EventEmitter {
113
114
  width,
114
115
  height,
115
116
  };
117
+ // 必须初始化 openSeaDragon navigator
118
+ // 根据配置 启用不同模块功能: 标注模式,阅片模式,辅助工具集
119
+ // 阅片模式 支持轻量级标注
116
120
  this.mitt = {
117
121
  $on: this.$on,
118
122
  $emit: this.$emit,
@@ -126,6 +130,9 @@ export default class KfbView extends EventEmitter {
126
130
  initEvent(this);
127
131
  this.initLabelList(config.labelList || []);
128
132
  this.resizeViewContainer(this.$options);
133
+ if (config.showZrender) {
134
+ initZrender(this);
135
+ }
129
136
  }
130
137
 
131
138
  /**
@@ -133,17 +140,11 @@ export default class KfbView extends EventEmitter {
133
140
  * @param {Array} list
134
141
  */
135
142
  initLabelList(list) {
136
- this.labelList = list.map((item) => {
137
- if (!item.points?.length) {
138
- const {startPoint, endPoint} = regionToPoint(item.region);
139
- item.points = [startPoint, endPoint];
140
- }
141
- return new LabelModel({
142
- ...item,
143
- region: item.region || pointsToRegion(item.points),
144
- __data__: deepClone(item),
145
- });
146
- });
143
+ this.labelList = list.map((item) => new LabelModel({
144
+ ...item,
145
+ region: item.region || pointsToRegion(item.points),
146
+ __data__: deepClone(item),
147
+ }));
147
148
  this.board?.setLabelList?.(this.labelList);
148
149
  this.shape?.setLabelList?.(this.labelList);
149
150
  this.area?.setLabelList?.(this.labelList);
@@ -151,17 +152,11 @@ export default class KfbView extends EventEmitter {
151
152
 
152
153
  appendLabelList(list) {
153
154
  this.labelList = [
154
- ...this.labelList, ...list.map((item) => {
155
- if (!item.points?.length) {
156
- const {startPoint, endPoint} = regionToPoint(item.region);
157
- item.points = [startPoint, endPoint];
158
- }
159
- return new LabelModel({
160
- ...item,
161
- region: item.region || pointsToRegion(item.points),
162
- __data__: deepClone(item),
163
- });
164
- })];
155
+ ...this.labelList, ...list.map((item) => new LabelModel({
156
+ ...item,
157
+ region: item.region || pointsToRegion(item.points),
158
+ __data__: deepClone(item),
159
+ }))];
165
160
  this.board?.setLabelList?.(this.labelList);
166
161
  this.shape?.setLabelList?.(this.labelList);
167
162
  this.area?.setLabelList?.(this.labelList);
@@ -289,6 +284,23 @@ function initNavigator(kv) {
289
284
  }
290
285
  }
291
286
 
287
+ // zrender的重绘 要在openSeaDragon触发渲染时间中去实时执行
288
+ function initZrender(kv) {
289
+ const element = document.createElement('div');
290
+ element.setAttribute('id', 'openseadragon-zrender');
291
+ element.style.cssText += 'position:absolute;bottom: 0;left:0;width:100%;height:100%;z-index:0';
292
+ kv.viewer.canvas.appendChild(element);
293
+ kv.zViewer = zr.init(element, {renderer: 'canvas'});
294
+ kv.zApi = zr;
295
+ kv.openSeadragon = openSeadragon;
296
+ kv.viewer.addHandler('open', () => {
297
+ kv.$emit(EVENTS.EVENT_INIT_COMPLETE);
298
+ });
299
+ kv.viewer.addHandler('update-viewport', ()=>{
300
+ kv.$emit(EVENTS.EVENT_UPDATE_ZRENDER);
301
+ });
302
+ }
303
+
292
304
  function createCanvas(kv) {
293
305
  const config = kv.$options;
294
306
  const canvas = document.createElement('canvas');
@@ -527,7 +539,6 @@ KfbView.marks = {};
527
539
  MARKS.forEach((key) => {
528
540
  KfbView.marks[key.toLocaleUpperCase()] = key;
529
541
  });
530
-
531
542
  KfbView.events = {
532
543
  ...EVENTS,
533
544
  };