UNPKG

medsurf-draw

Version:

Draw annotations on jpg/zoomify images, based on PIXI.js

246 lines 11 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import * as PIXI from 'pixi.js-legacy'; import * as MedsurfDraw from '../../public-api'; import * as Models from '@ascii-dev-user/medsurf-lib/models'; import { ImageObjectType } from '@ascii-dev-user/medsurf-lib/models'; import { v4 as uuidv4 } from 'uuid'; import { BaseGenerator, BaseGeneratorModel } from '../../bases/generators/BaseGenerator'; import { debounce } from 'debounce'; var CopyLayerGroupMapping = (function () { function CopyLayerGroupMapping() { } return CopyLayerGroupMapping; }()); export { CopyLayerGroupMapping }; var CloneLayerGeneratorModel = (function (_super) { __extends(CloneLayerGeneratorModel, _super); function CloneLayerGeneratorModel() { return _super !== null && _super.apply(this, arguments) || this; } return CloneLayerGeneratorModel; }(BaseGeneratorModel)); export { CloneLayerGeneratorModel }; var CloneLayerGenerator = (function (_super) { __extends(CloneLayerGenerator, _super); function CloneLayerGenerator(model) { var _this = _super.call(this, model) || this; _this._generators = []; _this._debounceEndGeneratorMethod = debounce(_this.endClone.bind(_this), 20).bind(_this); _this.target.modeInteraction.setModeItem("cloning"); _this._cloneLayerGroup = _this.cloneLayerGroup(_this.data.cloneLayerGroup, _this.data.relativePoint); var globalPoint = _this.target.renderer.plugins.interaction.mouse.global; var hitTest = _this.target.renderer.plugins.interaction.hitTest(globalPoint, _this.target.parent); if (!hitTest) { _this.target.parent.once("pointerover", _this.start, _this); } else { var event_1 = new PIXI.InteractionEvent(); event_1.data = new PIXI.InteractionData(); event_1.data.global = globalPoint; _this.emit("debounceStart", event_1); } return _this; } CloneLayerGenerator.prototype.start = function (event) { this.target.parent.on("rightup", this.abortClone, this); for (var _i = 0, _a = this._generators; _i < _a.length; _i++) { var generator = _a[_i]; generator.emit("debounceStart", event); generator.once('endGenerator', this._debounceEndGeneratorMethod, this); } _super.prototype.start.call(this, event); }; CloneLayerGenerator.prototype.end = function () { this.target.parent.off("rightup", this.abortClone, this); for (var _i = 0, _a = this._generators; _i < _a.length; _i++) { var generator = _a[_i]; generator.emit("debounceEnd"); } _super.prototype.end.call(this); }; CloneLayerGenerator.prototype.destroy = function (options) { this.end(); }; CloneLayerGenerator.prototype.endGenerator = function () { this.cloneRelations(); _super.prototype.endGenerator.call(this); this.target.sortChildren(); this.target.modeInteraction.setMode(this.target.modeInteraction.defaultMode); }; CloneLayerGenerator.prototype.abortGenerator = function () { _super.prototype.abortGenerator.call(this); var imageObjects = this.target.getImageObjects(); imageObjects.filter(function (imageObject) { return imageObject.modeInteraction.lastMode.startsWith('clone') && imageObject.modeInteraction.lastMode.endsWith('_new'); }) .sort(function (a, b) { var aModel = a.model; var bModel = b.model; if (aModel.type === Models.ImageObjectType.LINE) { if (bModel.type === Models.ImageObjectType.LINE) { return 0; } else { return -1; } } else { if (bModel.type === Models.ImageObjectType.LINE) { return 1; } } return 0; }).forEach(function (imageObject) { imageObject.modeInteraction.setMode("delete_clone"); }); this.target.sortChildren(); this.target.modeInteraction.setMode(this.target.modeInteraction.defaultMode); }; CloneLayerGenerator.prototype.cloneLayerGroup = function (model, relativePoint) { if (relativePoint === void 0) { relativePoint = undefined; } var layer; var layerMapping = this.data.layerGroupMappings.find(function (mapping) { return mapping.old.id === model.id; }); if (layerMapping) { layer = layerMapping.new; } else { layer = this.createLayerGroupInstance(model, relativePoint); } return layer; }; CloneLayerGenerator.prototype.cloneLayerImageObject = function (layerImageObject, layerModel, relativePoint) { var _a; if (relativePoint === void 0) { relativePoint = undefined; } var imageObject; var imageObjectModel = this.data.imageObjects.find(function (imageObject) { return imageObject.id === layerImageObject.imageObject; }); if (imageObjectModel) { var generator = new MedsurfDraw.CloneItemGenerator({ imageObjects: this.data.imageObjects, layerGroup: layerModel, image: this.data.image, target: this.target, element: imageObjectModel, imageObjectMappings: this.data.imageObjectMappings, relativePoint: relativePoint, }); imageObject = generator.cloneElement; (_a = this.data.imageObjectMappings).push.apply(_a, generator.data.imageObjectMappings); relativePoint = generator.data.relativePoint; this._generators.push(generator); } else { throw 'Image object not created'; } var layerImageObjectModel = this.createLayerImageObjectModel(layerImageObject, layerModel, imageObject.name); if (!relativePoint) { relativePoint = { x: 0, y: 0 }; } return { element: layerImageObjectModel, relativePoint: relativePoint }; }; CloneLayerGenerator.prototype.cloneRelations = function () { var _this = this; this.data.imageObjectMappings.forEach(function (imageObjectMapping) { var oldItem = imageObjectMapping.old; var newItem = imageObjectMapping.new; switch (oldItem.type) { case ImageObjectType.POSITIONPOINT: (oldItem.selftestItems || []).forEach(function (item) { var reference = _this.data.imageObjectMappings.find(function (mapping) { return mapping.old.id === item; }); if (reference && reference.new) { newItem.selftestItems.push(reference.new.id); } }); break; case ImageObjectType.FILLCOLLECTION: (oldItem.interactiveItems || []).forEach(function (item) { var reference = _this.data.imageObjectMappings.find(function (mapping) { return mapping.old.id === item; }); if (reference && reference.new) { newItem.interactiveItems.push(reference.new.id); } }); break; } }); }; CloneLayerGenerator.prototype.createLayerGroupInstance = function (model, relativePoint) { if (relativePoint === void 0) { relativePoint = undefined; } var layerModel = this.createLayerGroupModel(model); var tmpLayerGroupContents = []; Object.assign(tmpLayerGroupContents, model.groupContents || []); var layerGroupContents = []; for (var _i = 0, tmpLayerGroupContents_1 = tmpLayerGroupContents; _i < tmpLayerGroupContents_1.length; _i++) { var layerGroupContent = tmpLayerGroupContents_1[_i]; var layerGroupContentModel = this.createLayerGroupContentModel(layerGroupContent); layerGroupContents.push(layerGroupContentModel); } layerModel.groupContents = layerGroupContents; var tmpLayerImageObjects = []; Object.assign(tmpLayerImageObjects, model.layerImageObjects || []); for (var _a = 0, tmpLayerImageObjects_1 = tmpLayerImageObjects; _a < tmpLayerImageObjects_1.length; _a++) { var layerImageObject = tmpLayerImageObjects_1[_a]; var data = this.cloneLayerImageObject(layerImageObject, layerModel, relativePoint); layerImageObject = data.element; relativePoint = data.relativePoint; } this.data.layerGroupMappings.push({ new: layerModel, old: model }); this.target.layerGroups.push(layerModel); return layerModel; }; CloneLayerGenerator.prototype.createLayerGroupModel = function (model) { return { dirty: true, id: uuidv4(), image: model.image, name: model.name, order: model.order, groupContents: [], layerImageObjects: [], }; }; CloneLayerGenerator.prototype.createLayerGroupContentModel = function (model) { return { dirty: true, id: uuidv4(), order: model.order, content: model.content, }; }; CloneLayerGenerator.prototype.createLayerImageObjectModel = function (model, layerGroup, imageObject) { return { dirty: true, id: uuidv4(), layerGroup: layerGroup, order: model.order, imageObject: imageObject, }; }; CloneLayerGenerator.prototype.endClone = function (event) { event.stopPropagation(); this.emit("endGenerator"); this.end(); }; CloneLayerGenerator.prototype.abortClone = function (event) { event.stopPropagation(); this.emit("abortGenerator"); this.destroy(); }; return CloneLayerGenerator; }(BaseGenerator)); export { CloneLayerGenerator }; //# sourceMappingURL=CloneLayerGenerator.js.map