UNPKG

mskalign-canvas

Version:

一个用于图片标注的javascript库,基于canvas,简单轻量,支持矩形、多边形、点、折线、圆形。

15 lines (13 loc) 104 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).MskalignCanvas=e()}(this,(function(){"use strict"; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */var t=function(e,i){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},t(e,i)};function e(e,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}var i=function(){return i=Object.assign||function(t){for(var e,i=1,n=arguments.length;i<n;i++)for(var a in e=arguments[i])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t},i.apply(this,arguments)};function n(t){var e="function"==typeof Symbol&&Symbol.iterator,i=e&&t[e],n=0;if(i)return i.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function a(t,e){var i="function"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,a,o=i.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)s.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(i=o.return)&&i.call(o)}finally{if(a)throw a.error}}return s}function o(t,e){for(var i=0,n=e.length,a=t.length;i<n;i++,a++)t[a]=e[i];return t}function s(){for(var t=[],e="0123456789abcdef",i=0;i<36;i++){var n=Math.floor(16*Math.random());t[i]=e.slice(n,n+1)}t[14]="4";var a=3&t[19]|8;return t[19]=e.slice(a,a+1),t[8]=t[13]=t[18]=t[23]="-",t.join("")}function r(t,e,i){for(var n=!1,a=i.length,o=0,s=a-1;o<a;s=o++){var r=i[o][0],h=i[o][1],c=i[s][0],l=i[s][1];h>e!=l>e&&t<(c-r)*(e-h)/(l-h)+r&&(n=!n)}return n}function h(t,e,i,n){var s=t.slice(0,e),r=new Array(i-e+1).fill(n),h=t.slice(i+1);return o(o(o([],a(s)),a(r)),a(h))}var c=function(){function t(t,e){this.coor=[],this.components=[],this.isComponent=!1,this.isDisableDelByKey=!1,this.relativeInfo=[],this.relativePoints=[],this.relativeAuxLineIds=[],this.hide=!1,this.hideInSnapshot=!1,this.disable=!1,this.isEdit=!1,this.direction=0,this.pixelSpacing=0,this.apex=null,this.vertebra=null,this.isCtrlShape=!1,this.active=!1,this.activeComponent=!1,this.creating=!1,this.dragging=!1,this.draggingType="",this.dragAxle="",this.isDash=!1,this.uuid="",this.label="",this.labelValue="",this.labelRadius=20,this.angle=null,this.distance=0,this.mark="",this.remark="",this.dragPointAxle="",this.index=e,this.initialVal=t.initialVal?i({},t.initialVal):i({},t),this.uuid=t.uuid||s(),Object.assign(this,t)}return t.prototype.generateCtrlPointId=function(t){return"".concat(this.uuid,"_ctrl_").concat(t)},Object.defineProperty(t.prototype,"ctrlPoints",{get:function(){return[]},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"ctrlPointsWithId",{get:function(){var t=this;return this.ctrlPoints.map((function(e,i){return{id:t.generateCtrlPointId(i),coor:e,shapeId:t.uuid,pointIndex:i}}))},enumerable:!1,configurable:!0}),t.prototype.getCtrlPointById=function(t){return this.ctrlPointsWithId.find((function(e){return e.id===t}))||null},t.prototype.getCtrlPointCoorById=function(t){var e=this.getCtrlPointById(t);return e?e.coor:null},t.prototype.getLinkageRelations=function(){return[]},t.prototype.setLinkageRelations=function(t){},t}(),l="rgba(255, 0, 0, 1)",u="#d46a66",p="#33CC33",d={Rect:1,Polygon:2,Dot:3,Line:4,Circle:5,Angle:6,Arrow:7,Ellipse:8,Checkerboard:9,Curve:10,SpineCurve:11,SimpleAngle:12,CompositeGraph:100},f=[1,2,4,5,6,7,8,9,10,11,12,100],g=[2,4,6,7,9,12],v=[2,4,9],y=[2,4,6,7,9,10,11,12],m=[4,6,7,10,12],S=i({AuxiliaryLine:-1,AuxiliaryDot:-2,AuxiliaryCurve:-3},d),I="ctrlPoint",b="shape",C=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="Rect",n.type=d.Rect,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){var t=a(this.coor,2),e=a(t[0],2),i=e[0],n=e[1],o=a(t[1],2),s=o[0],r=o[1];return this.disable||this.hideCtrlDots?[]:[[i,n],[i+(s-i)/2,n],[s,n],[s,n+(r-n)/2],[s,r],[i+(s-i)/2,r],[i,r],[i,n+(r-n)/2]]},enumerable:!1,configurable:!0}),i}(c),x=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="Polygon",n.type=d.Polygon,n.maxPoints=0,n.maxPoints=e.maxPoints||0,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){return this.disable||this.hideCtrlDots?[]:this.coor.length>2?this.coor:[]},enumerable:!1,configurable:!0}),i}(c),M=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="Dot",n.type=d.Dot,n.outDashDistance=0,n.outDashDistance=e.outDashDistance||0,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){return this.disable||this.hideCtrlDots?[]:this.coor&&this.coor.length?this.coor:[]},enumerable:!1,configurable:!0}),i}(c),P=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="Line",n.type=d.Line,n.isClose=!1,n.maxPoints=0,n.disableDotLength=0,n.disableStartIndex=0,n.dashIndex=0,n.dashStartIndex=0,n.relevantUUIdList=[],n.attribute="",n.attribute=e.attribute||"",n.maxPoints=e.maxPoints||0,n.dashIndex=e.dashIndex||0,n.dashStartIndex=e.dashStartIndex||0,n.disableStartIndex=e.disableStartIndex||0,n.disableDotLength=e.disableDotLength||0,n.relevantUUIdList=e.relevantUUIdList||[],n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){if(this.disable||!this.coor)return[];var t=this.coor;return this.disableDotLength?h(t,this.disableStartIndex,this.disableDotLength,[]):t.length>1?t:[]},enumerable:!1,configurable:!0}),i}(c),T=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="Circle",n.type=d.Circle,n.radius=0,n.radius=e.radius||n.radius,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){if(this.disable||this.hideCtrlDots)return[];var t=a(this.coor[0],2),e=t[0],i=t[1];return[[e,i-this.radius],[e+this.radius,i],[e,i+this.radius],[e-this.radius,i]]},enumerable:!1,configurable:!0}),i}(c),E=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="Angle",n.type=d.Angle,n.flexiblePointIndex=-1,n.isHideLinkLine=!1,n.forceAngel=!1,n.secondLineLength=1e6,n.angle=0,n.forceAngel=e.forceAngel||!1,n.angle=e.angle||0,n.isHideLinkLine=e.isHideLinkLine||!1,n.flexiblePointIndex=e.flexiblePointIndex>=0?e.flexiblePointIndex:-1,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){return this.disable||this.hideCtrlDots?[]:this.coor.length<=4?this.coor:[]},enumerable:!1,configurable:!0}),i}(c),w=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="SimpleAngle",n.type=d.SimpleAngle,n.isHideLinkCurve=!1,n.angle=0,n.angle=e.angle||0,n.isHideLinkCurve=e.isHideLinkCurve||!1,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){return this.disable||this.hideCtrlDots?[]:this.coor.length<=3?this.coor:[]},enumerable:!1,configurable:!0}),i}(c),R=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="Arrow",n.type=d.Arrow,n.maxPoints=2,n.disableDotLength=0,n.disableStartIndex=0,n.dashIndex=0,n.dashStartIndex=0,n.attribute="",n.attribute=e.attribute||"",n.dashIndex=e.dashIndex||0,n.dashStartIndex=e.dashStartIndex||0,n.disableStartIndex=e.disableStartIndex||0,n.disableDotLength=e.disableDotLength||0,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){if(this.disable||!this.coor)return[];var t=this.coor;return this.disableDotLength?h(t,this.disableStartIndex,this.disableDotLength,[]):t.length>1?t:[]},enumerable:!1,configurable:!0}),i}(c);function A(t){return[d.Curve,d.SpineCurve].includes(t)}function D(t,e,i,n){var a=1*(t[1]-e[1])/(t[0]-e[0]);if(isNaN(a)||a===1/0||a===-1/0||0===a)return function(t,e,i,n){var a=t[1]-e[1],o=t[0]-e[0],s=[0,0];return 0===a?(s[1]=e[1]-n,s[0]=i[0]):0===o&&(s[0]=e[0]-n,s[1]=i[1]),s}(t,e,i,n);var o=t[1]-a*t[0],s=i[0]+a*i[1],r=[0,0];r[0]=1*(s-a*o)/(a*a+1),r[1]=a*r[0]+o;var h=t[0]-e[0],c=e[1]-t[1],l=Math.atan(c/h)*(180/Math.PI);return[r[0]-n*Math.sin(l/180*Math.PI),r[1]-n*Math.cos(l/180*Math.PI)]}function k(t,e){void 0===e&&(e=1);var i=a(t,2),n=i[0],o=i[1],s=a(n,2),r=s[0],h=s[1],c=a(o,2);return[(r+c[0])/2*e,(h+c[1])/2*e]}function L(t,e,i,n){var o=e.offsetX,s=e.offsetY,r=i.w,h=i.h,c=[],l=[],u=!1,p=t.dragAxle,f=t.coor,g="x"===p||""===p,v="y"===p||""===p;if([3,5].includes(t.type)){var y=a(n[0].points[0],2),m=y[0],S=y[1],I=a(f[0],2),b=I[0],C=I[1],x=v?s-S:C;((R=g?o-m:b)<0||R>r||x<0||x>h)&&(u=!0),c=[[R,x]]}else if(100===t.type){l=t.components;for(var M=(null==t?void 0:t.sharePoints)||[],P=function(e){var i=t.components[e];if(i.activeComponent){var c=L(i,{offsetX:o,offsetY:s},{w:r,h:h},[n[e]]);i.coor=c.coor,l[e]=i,c.outOfBounds&&(u=!0)}else l[e]=i;var p=M.filter((function(t){return i.activeComponent&&t.uuid===i.uuid})),d=[0,1];p&&p.length&&p.forEach((function(t){var e=t.targetShapeIndex,i=t.targetShapePointIndex,c=t.currentShape,p=t.targetShapePointAxle,f=d.includes(p)?p:-1,g=c.dragAxle,v="x"===g||""===g,y="y"===g||""===g;0===f&&(v=!0,y=!1),1===f&&(y=!0,v=!1);var m=l[e].coor[i],S=a(n[e].points[i],2),I=S[0],b=S[1],C=v?o-I:m[0],x=y?s-b:m[1];(C<0||C>r||x<0||x>h)&&(u=!0),l[e].coor[i]=[C,x]}))},T=0;T<t.components.length;T++)P(T)}else for(T=0;T<f.length;T++){var E=n[0];if(t&&E&&E.uuid===t.uuid&&E.points&&E.points.length){var w=a(f[T],2),R=b=w[0];x=C=w[1];try{R=g?o-E.points[T][0]:b,x=v?s-E.points[T][1]:C}catch(t){u=!0}(R<0||R>r||x<0||x>h)&&(u=!0,t.type===d.Angle&&t.forceAngel&&(u=!1)),c.push([R,x])}}return{coor:c,components:l,outOfBounds:u}}var H=function(t,e,i,n){var o=n.originX,s=n.originY,r=n.scale,h=n.creating,c=a(t,2),l=c[0],u=c[1],p=a(e,2),d=p[0],f=p[1];if(i<=0)return!1;if(h)return Math.pow(d-l,2)+Math.pow(f-u,2)<=Math.pow(i,2);var g=(l-o)/r-d,v=(u-s)/r-f;return g*g+v*v<=i*i};function G(t,e,i){return i.map((function(i){return function(t,e,i){var n=a(i,2),o=n[0],s=n[1],r=a(t,2),h=r[0],c=r[1],l=e,u=Math.cos(l),p=Math.sin(l);return[u*(o-h)+p*(s-c)+h,u*(s-c)-p*(o-h)+c]}(t,e,i)}))}var _=function(t){return Math.abs(t)>=360?t%360:Math.abs(t)<360?t:0},W=function(t){function i(e,i){var n=t.call(this,e,i)||this;n.name="Ellipse",n.type=d.Ellipse,n.rotation=0,n.radiusX=0,n.radiusY=0,n._ctrlPoints=[],n.rotation=e.rotation||n.rotation,n.radiusX=e.radiusX||n.radiusX,n.radiusY=e.radiusY||n.radiusY;var o=a(n.coor[0],2),s=o[0],r=o[1];return n._ctrlPoints=G([s,r],n.rotation,[[s+n.radiusX,r],[s-n.radiusX,r],[s,r+n.radiusY],[s,r-n.radiusY]]),n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){return this.disable||this.hideCtrlDots?[]:this._ctrlPoints},enumerable:!1,configurable:!0}),i.prototype.updateCtrlPoints=function(){var t=a(this.coor[0],2),e=t[0],i=t[1];this._ctrlPoints=G([e,i],this.rotation,[[e+this.radiusX,i],[e-this.radiusX,i],[e,i+this.radiusY],[e,i-this.radiusY]])},i}(c),O=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="Checkerboard",n.type=d.Checkerboard,n.isClose=!1,n.forceAngel=!0,n.maxPoints=2,n.disableDotLength=0,n.disableStartIndex=0,n.dashIndex=0,n.dashStartIndex=0,n.attribute="",n.forceAngel=e.forceAngel||!0,n.attribute=e.attribute||"",n.maxPoints=e.maxPoints||2,n.dashIndex=e.dashIndex||0,n.dashStartIndex=e.dashStartIndex||0,n.disableStartIndex=e.disableStartIndex||0,n.disableDotLength=e.disableDotLength||0,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){if(this.disable||!this.coor)return[];var t=this.coor;return this.disableDotLength?h(t,this.disableStartIndex,this.disableDotLength,[]):t.length>1?t:[]},enumerable:!1,configurable:!0}),i}(c),N=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="Curve",n.type=d.Curve,n.isReverse=!0,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){return this.disable||this.hideCtrlDots?[]:this.coor.length>2?this.coor:[]},enumerable:!1,configurable:!0}),i}(c),Y=function(){function t(t,e,i,n){void 0===n&&(n=!1),this.originalX=t,this.originalY=e,this.x=t,this.y=e,this.index=i,this.isEndPoint=n,this.velocity={x:0,y:0},this.isHovered=!1,this.isDragged=!1,this.influenceState="normal"}return t.prototype.reset=function(){this.x=this.originalX,this.y=this.originalY,this.velocity={x:0,y:0},this.isHovered=!1,this.isDragged=!1,this.influenceState="normal"},t.prototype.distanceTo=function(t,e){return Math.sqrt(Math.pow(this.x-t,2)+Math.pow(this.y-e,2))},t.prototype.getRadius=function(){return 5},t}(),X=function(){function t(){this.minAngle=.3*Math.PI,this.maxCurvature=.12}return t.prototype.calculateAngle=function(t,e,i){var n=e.x-t.x,a=e.y-t.y,o=i.x-e.x,s=i.y-e.y,r=n*o+a*s,h=Math.sqrt(n*n+a*a),c=Math.sqrt(o*o+s*s);if(0===h||0===c)return Math.PI;var l=r/(h*c);return Math.acos(Math.max(-1,Math.min(1,l)))},t.prototype.applyConstraints=function(t,e){for(var i=1;i<t.length-1;i++)if(!t[i].isEndPoint){var n=t[i-1],a=t[i],o=t[i+1];if(this.calculateAngle(n,a,o)<this.minAngle){var s=(n.x+o.x)/2,r=(n.y+o.y)/2;a.x+=.2*(s-a.x),a.y+=.2*(r-a.y)}if(i>1){var h=Math.sqrt(Math.pow(t[i-1].x-t[i-2].x,2)+Math.pow(t[i-1].y-t[i-2].y,2)),c=Math.sqrt(Math.pow(a.x-n.x,2)+Math.pow(a.y-n.y,2))/h;if(c>1.3||c<.7){var l=h*Math.max(.7,Math.min(1.3,c)),u={x:a.x-n.x,y:a.y-n.y},p=Math.sqrt(u.x*u.x+u.y*u.y);p>0&&(u.x/=p,u.y/=p,a.x=n.x+u.x*l,a.y=n.y+u.y*l)}}}for(var d=0;d<2;d++)for(i=2;i<t.length-2;i++){var f=.2*e,g=(t[i-1].x+t[i].x+t[i+1].x)/3,v=(t[i-1].y+t[i].y+t[i+1].y)/3;t[i].x+=(g-t[i].x)*f,t[i].y+=(v-t[i].y)*f}},t.prototype.applyInfluence=function(t,e,i,n){for(var a=n.influence,o=n.influenceRange,s=0;s<t.length;s++)if(s!==e&&!t[s].isEndPoint){var r=Math.abs(s-e),h=0;if(r<=o)h=1===r?.8:.8*(1-(r-1)/(o-1)),h*=Math.min(a,1.5),t[s].influenceState="influenced";else{var c=r-o,l=t.length-o;h=.02*Math.max(0,1-c/l)*Math.exp(.3*-r),h*=Math.min(.3*a,.5),t[s].influenceState=h>.001?"lightlyFollowing":"normal"}var u=i.x*h,p=i.y*h;if(t[s].x+=u,t[s].y+=p,r<=2&&r<=o&&s>1&&s<t.length-2){var d=t[s-1],f=t[s+1],g=(d.x+f.x)/2,v=(d.y+f.y)/2;t[s].x+=.08*(g-t[s].x),t[s].y+=.08*(v-t[s].y)}var y=0;r<=o?y=.001:h>.001&&(y=5e-4),y>0&&(t[s].x+=(t[s].originalX-t[s].x)*y,t[s].y+=(t[s].originalY-t[s].y)*y)}},t}(),B=function(t){function a(e,n){var a=t.call(this,e,n)||this;return a.name="SpineCurve",a.type=d.SpineCurve,a.spinePoints=[],a.physics=new X,a.config=i({influence:e.influence||1.5,curveDegree:e.curveDegree||2,smoothness:e.smoothness||.3,influenceRange:e.influenceRange||4},e),a.initializePoints(),a}return e(a,t),a.prototype.initializePoints=function(){var t=this;this.spinePoints=[],this.coor&&this.coor.length>0&&this.coor.forEach((function(e,i){var n=0===i||i===t.coor.length-1;t.spinePoints.push(new Y(e[0],e[1],i,n))}))},Object.defineProperty(a.prototype,"ctrlPoints",{get:function(){return this.disable||this.hideCtrlDots?[]:this.spinePoints.map((function(t){return[t.x,t.y]}))},enumerable:!1,configurable:!0}),a.prototype.updateSpinePoint=function(t,e,i){if(!(t<0||t>=this.spinePoints.length)){var n=this.spinePoints[t],a={x:e-n.x,y:i-n.y};return n.x=e,n.y=i,n.isEndPoint||this.physics.applyInfluence(this.spinePoints,t,a,this.config),this.physics.applyConstraints(this.spinePoints,this.config.smoothness),this.coor=this.spinePoints.map((function(t){return[t.x,t.y]})),this.coor}},a.prototype.createNurbsCurve=function(){try{if(this.spinePoints.length<4)return null;if("undefined"!=typeof window&&window.verb){var t=this.spinePoints.map((function(t){return[t.x,t.y,0]})),e=Math.min(Math.max(this.config.curveDegree,3),this.spinePoints.length-1);return window.verb.geom.NurbsCurve.byPoints(t,e)}return null}catch(t){return console.warn("创建NURBS曲线失败:",t),null}},a.prototype.getCurvePoints=function(t){if(void 0===t&&(t=50),this.spinePoints.length<2)return[];var e=this.createNurbsCurve();if(e&&e.tessellate)try{var i=Math.max(.1,2-2*this.config.smoothness);return e.tessellate(i).map((function(t){return[t[0],t[1]]}))}catch(t){console.warn("NURBS曲线细分失败:",t)}return this.getCatmullRomPoints(t)},a.prototype.getResampledPoints=function(){var t,e,i=this.getCurvePoints(50);if(i.length<2)return[];for(var a=[1,1.1,1.2,1.3,1.4,1.45,1.455,1.5,1.55,1.555,1.6,1.65,1.655,1.7,1.75,1.755,1.8],o=a.reduce((function(t,e){return t+e}),0),s=a.map((function(t){return t/o})),r=[],h=1;h<i.length;h++){var c=i[h][0]-i[h-1][0],l=i[h][1]-i[h-1][1];r.push(Math.sqrt(c*c+l*l))}var u=[0];for(h=0;h<r.length;h++)u.push(u[h]+r[h]);var p=u[u.length-1],d=[],f=0;for(h=0;h<16;h++)f+=s[h],d.push(f*p);var g=function(t){for(var e=0,i=u.length-1;e<=i;){var n=Math.floor((e+i)/2);if(u[n]===t)return n;u[n]<t?e=n+1:i=n-1}return Math.max(0,i)},v=[];try{for(var y=n(d),m=y.next();!m.done;m=y.next()){var S=m.value,I=g(S);if(!(0===I||I>=i.length)){var b=(S-u[I-1])/(u[I]-u[I-1]),C=[Math.round((1-b)*i[I-1][0]+b*i[I][0]),Math.round((1-b)*i[I-1][1]+b*i[I][1])];v.push(C)}}}catch(e){t={error:e}}finally{try{m&&!m.done&&(e=y.return)&&e.call(y)}finally{if(t)throw t.error}}return v.unshift(this.coor[0]),v.push(this.coor[this.coor.length-1]),v},a.prototype.getCatmullRomPoints=function(t){if(this.spinePoints.length<2)return[];for(var e=[],i=this.spinePoints.length,n=0;n<i-1;n++)for(var a=this.spinePoints[Math.max(0,n-1)],o=this.spinePoints[n],s=this.spinePoints[n+1],r=this.spinePoints[Math.min(i-1,n+2)],h=0;h<1;h+=1/t){var c=h*h,l=c*h,u=.5*(2*o.x+(-a.x+s.x)*h+(2*a.x-5*o.x+4*s.x-r.x)*c+(-a.x+3*o.x-3*s.x+r.x)*l),p=.5*(2*o.y+(-a.y+s.y)*h+(2*a.y-5*o.y+4*s.y-r.y)*c+(-a.y+3*o.y-3*s.y+r.y)*l);e.push([u,p])}return e},a.prototype.reset=function(){this.spinePoints.forEach((function(t){t.reset()})),this.coor=this.spinePoints.map((function(t){return[t.x,t.y]}))},a.prototype.updateConfig=function(t){this.config=i(i({},this.config),t)},a.prototype.getPointState=function(t){return t<0||t>=this.spinePoints.length?null:this.spinePoints[t]},a.prototype.setPointState=function(t,e){t<0||t>=this.spinePoints.length||Object.assign(this.spinePoints[t],e)},a.prototype.syncFromCoor=function(){var t=this;this.coor.length!==this.spinePoints.length?this.initializePoints():this.spinePoints.forEach((function(e,i){t.coor[i]&&(e.x=t.coor[i][0],e.y=t.coor[i][1])}))},a.prototype.syncToCoor=function(){this.coor=this.spinePoints.map((function(t){return[t.x,t.y]}))},a.prototype.exportState=function(){return{coor:this.coor,spinePoints:this.spinePoints.map((function(t){return{x:t.x,y:t.y,originalX:t.originalX,originalY:t.originalY,isEndPoint:t.isEndPoint,influenceState:t.influenceState}})),config:i({},this.config)}},a.prototype.importState=function(t){var e=this;t.coor&&(this.coor=t.coor,this.syncFromCoor()),t.spinePoints&&t.spinePoints.forEach((function(t,i){i<e.spinePoints.length&&Object.assign(e.spinePoints[i],t)})),t.config&&this.updateConfig(t.config)},a}(c),F=function(t){function i(e,i){var n=t.call(this,e,i)||this;return n.name="CompositeGraph",n.type=d.CompositeGraph,n}return e(i,t),Object.defineProperty(i.prototype,"ctrlPoints",{get:function(){return this.components.length?this.components.map((function(t){return t.disable||t.hideCtrlDots?[]:5===t.type?[t.ctrlPoints[1]]:t.ctrlPoints})).flat():[]},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"ctrlPointsWithId",{get:function(){var t=this;if(!this.components.length)return[];var e=[],i=0;return this.components.forEach((function(n){if(!n.disable&&!n.hideCtrlDots)if(5===n.type){var a=n.ctrlPoints;a.length>1&&(e.push({id:t.generateCtrlPointId(i),coor:a[1],shapeId:n.uuid,pointIndex:1}),i++)}else{n.ctrlPoints.forEach((function(a,o){e.push({id:t.generateCtrlPointId(i),coor:a,shapeId:n.uuid,pointIndex:o}),i++}))}})),e},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"sharePoints",{get:function(){var t=this;return(this.relativeInfo.map((function(e){return e.map((function(e){try{var i=e.split("-").map((function(t){return 1*t}));if(i&&i.length>=3){var n=t.components[i[0]];return{uuid:n.uuid,currentShape:n,targetShapeIndex:i[1],targetShapePointIndex:i[2],targetShapePointAxle:i[3]}}return{}}catch(t){return console.error(t),{}}}))}))||[]).flat()},enumerable:!1,configurable:!0}),i}(c),U="2.28.3",j=function(){function t(){this._eventTree={}}return t.prototype.on=function(t,e){var i=this._eventTree[t];Array.isArray(i)?i.push(e):this._eventTree[t]=[e]},t.prototype.emit=function(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];var n=this._eventTree[t];Array.isArray(n)&&n.forEach((function(t){return t.apply(void 0,o([],a(e)))}))},t.prototype.off=function(t,e){var i=this._eventTree[t],n=i.find((function(t){return t===e}));Array.isArray(i)&&n&&i.splice(n,1)},t}();function V(t){return"object"==typeof t&&null!==t}var q={sagittalVerticalAxis:["distance"]};function z(t){return"function"==typeof t}var K=["active","activeComponent","index","hide","isCtrlShape","isComponent","isDash","dragging","draggingType","disable","angle","distance","label","labelCoor","labelValue","labelRadius","strokeStyle","flexiblePointIndex","isDisableDelByKey","initialVal","relativeInfo","relativePoints","_ctrlPoints","relativeAuxLineIds","relevantUUIdList","forceAngel"],J=["apex","coor","direction","mark"];function Z(t,e){var i,o;if(t===e)return{equal:!0};if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return{equal:!1};for(var s=0;s<t.length;s++){if(!(f=Z(t[s],e[s])).equal)return f}return{equal:!0}}if(V(t)&&V(e)){var r=Object.entries(t),h=!0;try{for(var c=n(r),l=c.next();!l.done;l=c.next()){var u=a(l.value,2),p=u[0],d=u[1];if(!z(d)&&!z(e[p])&&!(K.includes(p)||Object.keys(q).includes(t.dataType)&&q[t.dataType].includes(p))){var f;if(!(f=Z(d,e[p])).equal&&f.changedKeyValues)return localStorage.getItem("debugMode")&&console.log(2222222,"有变化!",p,d,e[p]),f;if(!f.equal&&(h=!1,J.includes(p)))return{equal:!1,changedKeyValues:{uuid:t.uuid,key:p,value1:d,value2:e[p]}}}}}catch(t){i={error:t}}finally{try{l&&!l.done&&(o=c.return)&&o.call(c)}finally{if(i)throw i.error}}return{equal:h}}return{equal:!1}}var $={isNumber:function(t){return"number"==typeof t&&!Number.isNaN(t)&&t!==1/0&&t!==-1/0},isPositiveInt:function(t){return/^\d+$/.test(t)},isNotZeroNumber:function(t){return $.isNumber(t)&&0!=+t},notEmpty:function(t){return!$.isVoid(t)},isFalsy:function(t){return 0!==t&&!t},isVoid:function(t){return null==t||""===t},add:function(t,e){var i,n;try{i=t.toString().split(".")[1].length}catch(t){i=0}try{n=e.toString().split(".")[1].length}catch(t){n=0}var a=Math.abs(i-n),o=Math.pow(10,Math.max(i,n));if(a>0){var s=Math.pow(10,a);i>n?(t=Number(t.toString().replace(".","")),e=Number(e.toString().replace(".",""))*s):(t=Number(t.toString().replace(".",""))*s,e=Number(e.toString().replace(".","")))}else t=Number(t.toString().replace(".","")),e=Number(e.toString().replace(".",""));return(t+e)/o},subtract:function(t,e){var i,n;try{i=t.toString().split(".")[1].length}catch(t){i=0}try{n=e.toString().split(".")[1].length}catch(t){n=0}var a=Math.pow(10,Math.max(i,n));return((t*a-e*a)/a).toFixed(i>=n?i:n)},multiply:function(t,e){var i=0,n=t.toString(),a=e.toString();try{i+=n.split(".")[1].length}catch(t){}try{i+=a.split(".")[1].length}catch(t){}return Number(n.replace(".",""))*Number(a.replace(".",""))/Math.pow(10,i)},getDecimalPointPosition:function(t){try{return(t=t.toString()).split(".")[1].length}catch(t){return 0}},getDecimalPointWithDigits:function(t,e,i,n){void 0===e&&(e=2),void 0===i&&(i=!1),t=t.toString();var a=$.getDecimalPointPosition(t)||e;a>0&&(t=i?Number(t).toFixed(e):t.substring(0,t.length-a));return t},divide:function(t,e){var i=t.toString(),n=e.toString(),a=(i.split(".")[1]||"").length,o=(n.split(".")[1]||"").length;if(a===o)return Number(i.replace(".",""))/Number(n.replace(".",""));var s=o>a,r=Math.abs(a-o),h=0;if(s)for(;r>h;)i+="0",h++;else for(;r>h;)n+="0",h++;return Number(i.replace(".",""))/Number(n.replace(".",""))},translatePercentage:function(t){return(100*t).toFixed(2)+"%"},round:function(t,e,i){void 0===e&&(e=2),void 0===i&&(i=!1);var n=Number(t);if(isNaN(n))return NaN;var a=(n=Math.round(t*Math.pow(10,e))/Math.pow(10,e)).toString();if(i){var o=a.indexOf(".");for(o<0&&(o=a.length,a+=".");a.length<=o+e;)a+="0"}return a}},Q=function(t,e){for(var i=t.length,n=new Array(i-1),a=new Array(i-1),o=new Array(i),s=new Array(i),r=new Array(i),h=new Array(i),c=new Array(i-1),l=new Array(i-1),u=0;u<i-1;u++)n[u]=t[u+1]-t[u],0===n[u]&&(t[u+1]-=1e-6,n[u]=t[u+1]-t[u],console.warn("相邻 x 值相同,无法进行三次样条插值, 增加微小扰动以便于拟合"));for(u=1;u<i-1;u++)a[u]=3/n[u]*(e[u+1]-e[u])-3/n[u-1]*(e[u]-e[u-1]);o[0]=1,s[0]=0,r[0]=0;for(u=1;u<i-1;u++)o[u]=2*(t[u+1]-t[u-1])-n[u-1]*s[u-1],s[u]=n[u]/o[u],r[u]=(a[u]-n[u-1]*r[u-1])/o[u];o[i-1]=1,r[i-1]=0,h[i-1]=0;for(var p=i-2;p>=0;p--)h[p]=r[p]-s[p]*h[p+1];for(u=0;u<i-1;u++)l[u]=(h[u+1]-h[u])/(3*n[u]),c[u]=(e[u+1]-e[u])/n[u]-n[u]*(h[u+1]+2*h[u])/3;return{x:t,y:e,b:c,c:h,d:l}},tt=function(t,e){for(var i=t.x,n=t.y,a=t.b,o=t.c,s=t.d,r=[],h=0;h<i.length-1;h++)for(var c=(i[h+1]-i[h])/e,l=0;l<e;l++){var u=i[h]+l*c,p=u-i[h],d=n[h]+a[h]*p+o[h]*p*p+s[h]*p*p*p;r.push([u,d])}return r.push([i[i.length-1],n[n.length-1]]),r},et=["baseGraph","compositeGraph"];return function(t){function h(e,i){var n=t.call(this)||this;n.imageUrl="",n.version=U,n.lock=!1,n.readonly=!1,n.actionType="",n.mouseAction="",n.disableWheel=!1,n.enableKeyMove=!1,n.isMouseInImage=!1,n.backgroundFitMode="contain",n.transformConfig={horizontalScale:1,rotate:0},n.debugMode=!1,n.disableSort=!1,n.MIN_WIDTH=10,n.MIN_HEIGHT=10,n.MIN_RADIUS=5,n.INTERPOLATION_POINTS=10,n.pixelSpacing=0,n.strokeStyle=p,n.fillStyle="rgba(0, 0, 255,0.1)",n.activeSecondaryStrokeStyle=u,n.activeStrokeStyle=l,n.activeFillStyle="rgba(255, 0, 0, 0.1)",n.ctrlFillStyle="#fff",n.hideLabel=!1,n.isUsePrimitiveMathRound=!1,n.labelFillStyle="transparent",n.fontSize=12,n.labelFont="".concat(n.fontSize,"px sans-serif"),n.labelTextFillStyle=n.strokeStyle,n.labelMaxLen=100,n.WIDTH=0,n.HEIGHT=0,n.dataset=[],n.activeShapeList=[],n.buffer=null,n.luminance=0,n.luminanceStep=5,n.oldLuminanceType=!1,n.hitIndex=-1,n.rememberOrigin=[0,0],n.fixedPointList=[],n.dataType="",n.ctrlHoverRadius=10,n.drawCtrlOuterDash=!0,n.dashLineConfig=[2,4],n.ctrlRadius=1.5,n.lineWidth=1.5,n.lineRoughnessMode="normal",n.modeConfigs={thin:{ctrlRadius:1,lineWidth:1,dashLineConfig:[2,4]},normal:{ctrlRadius:1.5,lineWidth:1.5,dashLineConfig:[2,4]},bold:{ctrlRadius:3,lineWidth:3,dashLineConfig:[3,6]}},n.createType=0,n.createOptions={},n.ctrlIndex=-1,n.ctrlComponentIndex=-1,n.activeCtrlPointId="",n.linkageRelations=[],n.linkageGroups=[],n.image=new Image,n.IMAGE_WIDTH=0,n.IMAGE_ORIGIN_HEIGHT=0,n.IMAGE_HEIGHT=0,n.originX=0,n.originY=0,n.isRightMouseDown=!1,n.rightMouseDownTimer=null,n.RIGHT_MOUSE_HOLD_THRESHOLD=200,n.isRightMouseHold=!1,n.rightMouseDownTime=0,n.scaleStep=0,n.limitMaxScaleStep=30,n.limitMinScaleStep=-100,n.stepRate=.04,n.maxScaleRate=3,n.minScaleRate=.5,n.scaleRate=1,n.scrollZoom=!0,n.allShapeTypes=Object.values(d),n.ctrlShapeTypes=f,n.lineLikeTypes=y,n.dblTouch=300,n.dblTouchStore=0,n.alpha=!0,n.curveCtrlHoverIndex=new Map,n.curveCtrlActiveIndex=new Map,n.scaleTouchStore=0,n.isTouch2=!1,n.isMobile=!1,n.imageReady=!1,n.initialPinchDistance=null,n.initialScale=null,n.labelUp=!1,n.labelValueVisible=!1,n.labelCoor=[],n.labelRadius=20,n.auxiliaryLineList=[],n.auxiliaryPointList=[],n.auxiliaryCurveList=[],n.offscreenCanvas=null,n.offscreenCtx=null,n.isMagnifierVisible=n.isMobile,n.magnifierConfig={scale:1,clientX:0,offsetX:0,offsetY:0,width:150,height:150},n.oldData={dataset:[]},n.isMiddleMouseDown=!1,n.lastMouseX=0,n.lastMouseY=0,n.ARROW_MOVE_STEP=10,n.handleContextmenu=n.handleContextmenu.bind(n),n.handleMousewheel=n.handleMousewheel.bind(n),n.handleMouseDown=n.handleMouseDown.bind(n),n.handleMouseMove=n.handleMouseMove.bind(n),n.handelMouseUp=n.handelMouseUp.bind(n),n.handelDblclick=n.handelDblclick.bind(n),n.handelKeyup=n.handelKeyup.bind(n),n.detectTouchSupport();var a="string"==typeof e?document.querySelector(e):e;return a instanceof HTMLCanvasElement?(n.canvas=a,n.offScreen=document.createElement("canvas"),n.debugMode=!!localStorage.getItem("debugMode"),n.initSetting(i),n.initEvents()):console.error("HTMLCanvasElement is required!"),n}return e(h,t),Object.defineProperty(h.prototype,"canMoveImage",{get:function(){return!this.lock&&this.isMouseInImage&&["","move"].includes(this.actionType)},enumerable:!1,configurable:!0}),Object.defineProperty(h.prototype,"canZoomImage",{get:function(){return!this.lock&&this.isMouseInImage&&["","zoom"].includes(this.actionType)},enumerable:!1,configurable:!0}),Object.defineProperty(h.prototype,"activeShape",{get:function(){return this.dataset.find((function(t){return t.active}))||{}},enumerable:!1,configurable:!0}),Object.defineProperty(h.prototype,"activeComponentShape",{get:function(){return this.activeShape.components.find((function(t){return t.active&&t.activeComponent}))||{}},enumerable:!1,configurable:!0}),Object.defineProperty(h.prototype,"scale",{get:function(){return this.IMAGE_ORIGIN_WIDTH&&this.IMAGE_WIDTH?$.divide(this.IMAGE_WIDTH,this.IMAGE_ORIGIN_WIDTH):1},enumerable:!1,configurable:!0}),Object.defineProperty(h.prototype,"imageMin",{get:function(){return Math.min(this.IMAGE_WIDTH,this.IMAGE_HEIGHT)},enumerable:!1,configurable:!0}),Object.defineProperty(h.prototype,"imageOriginMax",{get:function(){return Math.max(this.IMAGE_ORIGIN_WIDTH,this.IMAGE_ORIGIN_HEIGHT)},enumerable:!1,configurable:!0}),h.prototype.mathRound=function(t){return this.isUsePrimitiveMathRound?Math.round(t):t},h.prototype.changeDataByUid=function(t,e){void 0===e&&(e=!0);var i=t.uuid,n=t.key,a=t.value;this.dataset.forEach((function(t){t.uuid===i&&(t.active=!0,t.activeComponent=!1,n&&t[n]!==a&&(t[n]=a))})),e&&this.cancelActive()},h.prototype.changeDataByDataType=function(t,e){void 0===e&&(e=!0);var i=t.dataType,n=t.newData;n&&n.pixelSpacing&&this.setPixelSpacing(n.pixelSpacing,!1),this.dataset=this.dataset.map((function(t){return t.dataType===i&&(t.active=!0,t.activeComponent=!1,n&&Object.keys(n).forEach((function(e){t[e]=n[e]}))),t})),e&&this.cancelActive()},h.prototype.setMode=function(t,e){switch(t){case"lock":this.lock=!!e;break;case"readonly":this.readonly=!!e;break;case"moveOnly":this.readonly=!!e,this.actionType="move";break;case"zoomOnly":this.readonly=!!e,this.actionType="zoom";break;default:this.readonly=!1,this.lock=!1,this.actionType=""}},h.prototype.getMode=function(){return this.lock?"lock":this.readonly&&"move"===this.actionType?"moveOnly":this.readonly&&"zoom"===this.actionType?"zoomOnly":this.readonly?"readonly":""},h.prototype.update=function(){var t=this;this.emit("updating",this.dataset);var e=this.modeConfigs[this.lineRoughnessMode];this.ctrlRadius=e.ctrlRadius,this.lineWidth=e.lineWidth,this.dashLineConfig=e.dashLineConfig,window.cancelAnimationFrame(this.timer),this.timer=window.requestAnimationFrame((function(){t.ctx.save(),t.ctx.clearRect(0,0,t.WIDTH,t.HEIGHT),t.ctx.translate(t.originX,t.originY),t.IMAGE_WIDTH&&t.IMAGE_HEIGHT&&t.ctx.drawImage(t.buffer,0,0,t.IMAGE_WIDTH,t.IMAGE_HEIGHT),t.activeShapeList=[],t.drawAuxiliaryPoints(t.ctx),t.drawAuxiliaryLines(t.ctx),t.drawAuxiliaryCurves(t.ctx);var e=t.dataset;e.forEach((function(e){if(e.getCoor&&"function"==typeof e.getCoor&&(e.coor=e.getCoor(t.dataset,e)||[]),e.getAngle&&"function"==typeof e.getAngle){var i=e.getAngle(t.dataset,e)||{angle:0,direction:0,needDirection:!1},n=i.angle,a=i.direction,o=i.needDirection;e.angle=n,o&&(e.direction=a)}if(e.getDistance&&"function"==typeof e.getDistance&&(e.distance=e.getDistance(t.dataset,e)||0),100!==e.type){if(e.getLabelAndCoor&&"function"==typeof e.getLabelAndCoor){var s=e.getLabelAndCoor(t.dataset,e),r=s.label,h=s.labelCoor,c=s.labelValue;r&&(e.label=r),h&&(e.labelCoor=h),c&&(e.labelValue=c)}}else e.components.length&&e.components.forEach((function(i){if(i.getLabelAndCoor&&"function"==typeof i.getLabelAndCoor){var n=i.getLabelAndCoor(t.dataset,i,e),a=n.label,o=n.labelCoor,s=n.labelValue;a&&(i.label=a),o&&(i.labelCoor=o),s&&(i.labelValue=s)}}))})),t.drawShape(e,t.ctx),t.activeShapeList.length>0&&t.activeShapeList.forEach((function(e){e.type>0&&t.pureDraw(e,t.ctx),e.type===S.AuxiliaryLine&&t.drawAuxiliaryLine(e,t.ctx),e.type===S.AuxiliaryDot&&t.drawDot(e,t.ctx),e.type===S.AuxiliaryCurve&&t.drawAuxiliaryCurve(e,t.ctx)})),t.ctrlShapeTypes.includes(t.activeShape.type)&&!t.activeShape.hide&&t.drawCtrlList(t.activeShape),t.ctx.restore();var i=Z(t.oldData,{dataset:t.dataset}).equal;if(t.emit("isEdited",!i),t.activeShape&&t.activeShape.type&&"mouseMove"===t.mouseAction){var n="";t.activeShape.creating&&(n="createShape"),t.activeShape.dragging&&(n="moveShape"),n&&t.emit("updatedWithType",{type:n,dataset:t.dataset,activeShape:t.activeShape})}t.emit("updated",t.dataset)}))},h.prototype.setLineRoughness=function(t){this.lineRoughnessMode!==t&&["thin","normal","bold"].includes(t)&&("thin"===t?this.lineWidth=1:"normal"===t?this.lineWidth=2:"bold"===t&&(this.lineWidth=3),this.lineRoughnessMode=t,this.update())},h.prototype.setFixedPoint=function(t){this.fixedPointList=t.map((function(t){return{coor:t,uuid:s()}}))},h.prototype.setPixelSpacing=function(t,e){void 0===e&&(e=!0),this.pixelSpacing=t,this.emit("onPixelSpacingChange",t),this.dataset.forEach((function(e){e.type===d.CompositeGraph?(e.pixelSpacing=t,e.components.forEach((function(e){e.pixelSpacing=t}))):e.pixelSpacing=t})),e&&this.update()},h.prototype.pureUpdateImage=function(t){var e=this;void 0===t&&(t=this.ctx),window.cancelAnimationFrame(this.timer2),this.timer2=window.requestAnimationFrame((function(){t.save(),t.clearRect(0,0,e.WIDTH,e.HEIGHT),t.translate(e.originX,e.originY),e.IMAGE_WIDTH&&e.IMAGE_HEIGHT&&t.drawImage(e.buffer,0,0,e.IMAGE_WIDTH,e.IMAGE_HEIGHT),e.activeShapeList=[],e.drawAuxiliaryPoints(t),e.drawAuxiliaryLines(t),e.drawAuxiliaryCurves(t);var i=e.dataset;i.forEach((function(t){if(t.getCoor&&"function"==typeof t.getCoor&&(t.coor=t.getCoor(e.dataset,t)||[]),t.getAngle&&"function"==typeof t.getAngle){var i=t.getAngle(e.dataset,t)||{angle:0,direction:0,needDirection:!1},n=i.angle,a=i.direction,o=i.needDirection;t.angle=n,o&&(t.direction=a)}if(t.getDistance&&"function"==typeof t.getDistance&&(t.distance=t.getDistance(e.dataset,t)||0),100!==t.type){if(t.getLabelAndCoor&&"function"==typeof t.getLabelAndCoor){var s=t.getLabelAndCoor(e.dataset,t),r=s.label,h=s.labelCoor,c=s.labelValue;r&&(t.label=r),h&&(t.labelCoor=h),c&&(t.labelValue=c)}}else t.components.length&&t.components.forEach((function(i){if(i.getLabelAndCoor&&"function"==typeof i.getLabelAndCoor){var n=i.getLabelAndCoor(e.dataset,i,t),a=n.label,o=n.labelCoor,s=n.labelValue;a&&(i.label=a),o&&(i.labelCoor=o),s&&(i.labelValue=s)}}))})),e.drawShape(i,t),e.activeShapeList.length>0&&e.activeShapeList.forEach((function(i){i.type>0&&e.pureDraw(i,t),i.type===S.AuxiliaryLine&&e.drawAuxiliaryLine(i,t),i.type===S.AuxiliaryDot&&e.drawDot(i,t),i.type===S.AuxiliaryCurve&&e.drawAuxiliaryCurve(i,t)})),e.ctrlShapeTypes.includes(e.activeShape.type)&&!e.activeShape.hide&&e.drawCtrlList(e.activeShape),t.restore()}))},h.prototype.createMagnifier=function(){if(this.isMagnifierVisible){this.magnifierCanvas=this.magnifierCanvas||document.createElement("canvas"),this.magnifierCtx=this.magnifierCanvas&&this.magnifierCanvas.getContext("2d",{willReadFrequently:!0});var t=this.magnifierConfig,e=t.width,i=t.height,n=t.offsetX,a=t.offsetY,o=t.clientX,s=t.clientY;if(this.magnifierCanvas.style.position="fixed",this.magnifierCanvas.style.pointerEvents="none",this.magnifierCanvas.style.zIndex="10000",this.magnifierCanvas.style.border="1px solid black",this.magnifierCanvas.style.width="".concat(e,"px"),this.magnifierCanvas.style.height="".concat(i,"px"),this.canvas){var r=this.canvas.getBoundingClientRect(),h=r.x,c=r.y,l=r.width;this.magnifierCanvas.style.left="".concat(h+l-e-n,"px"),this.magnifierCanvas.style.top="".concat(c+a,"px")}else this.magnifierCanvas.style.left="".concat(o,"px"),this.magnifierCanvas.style.top="".concat(s,"px");document.body.appendChild(this.magnifierCanvas)}},h.prototype.updateMagnifier=function(t,e){if(this.isMagnifierVisible&&this.magnifierCanvas&&this.magnifierCtx){var i=this.magnifierConfig,n=i.width,a=i.height,o=window.devicePixelRatio||1;this.magnifierCanvas.width=n,this.magnifierCanvas.height=a,this.magnifierCtx.clearRect(0,0,n,a);var s=Math.max(1,this.magnifierConfig.scale||1),r=n/s,h=a/s,c=t*o-r/2,l=e*o-h/2;this.magnifierCtx.imageSmoothingEnabled=!0,this.magnifierCtx.drawImage(this.canvas,c,l,r,h,0,0,n,a),this.magnifierCtx.strokeStyle="rgba(0, 0, 0, 0.5)",this.magnifierCtx.lineWidth=2,this.magnifierCtx.strokeRect(0,0,n,a)}},h.prototype.setMagnifierScale=function(t){this.magnifierConfig&&(this.magnifierConfig.scale=Math.max(1,Number(t)||1))},h.prototype.destroyMagnifier=function(){this.magnifierCanvas&&(this.magnifierCanvas.remove(),this.magnifierCanvas=null,this.magnifierCtx=null)},h.prototype.getImageDataFromCanvas=function(t,e){var i=a(e,4),n=i[0],o=i[1],s=i[2],r=i[3];return t.getContext("2d",{willReadFrequently:!0}).getImageData(n,o,s,r)},h.prototype.cancelActive=function(){this.remember=[],this.activeCtrlPointId="",this.dataset.forEach((function(t){t.active=!1,t.dragging=!1,t.draggingType="",t.activeComponent=!1,t.type===d.CompositeGraph&&t.components.forEach((function(t){t.active=!1,t.dragging=!1,t.draggingType="",t.activeComponent=!1}))})),this.emit("select",null),this.update()},h.prototype.viewAllShape=function(){this.dataset.forEach((function(t){t.hide=t.hideInSnapshot||!1,t.type===d.CompositeGraph&&t.components.forEach((function(e){e.hide=t.hideInSnapshot||!1}))})),this.auxiliaryLineList.forEach((function(t){t.hide=t.hideInSnapshot||!1})),this.auxiliaryPointList.forEach((function(t){t.hide=t.hideInSnapshot||!1}))},h.prototype.getSnapshot=function(t){var e=this;void 0===t&&(t=1),this.fitBackgroundImage(),this.viewAllShape(),this.cancelActive(),t*=window.devicePixelRatio||1,this.offscreenCanvas=document.createElement("canvas");var i=a([this.IMAGE_WIDTH*t,this.IMAGE_HEIGHT*t],2),n=i[0],o=i[1];return this.offscreenCanvas.width=n,this.offscreenCanvas.height=o,this.offscreenCtx=this.offscreenCanvas&&this.offscreenCanvas.getContext("2d",{willReadFrequently:!0}),this.offscreenCtx.drawImage(this.image,0,0,n,o),this.offscreenCtx.scale(t,t),this.drawShape(this.dataset,this.offscreenCtx),this.drawAuxiliaryPoints(this.offscreenCtx),this.drawAuxiliaryLines(this.offscreenCtx),this.drawAuxiliaryCurves(this.offscreenCtx),new Promise((function(t){e.on("updated",(function(){e.offscreenCanvas&&t(e.offscreenCanvas.toDataURL("image/png"))}))}))},h.prototype.getEventCoordinates=function(t){if(t.touches&&t.touches.length>0){var e=t.touches[0],i=t.target.getBoundingClientRect();return{x:e.clientX-i.left,y:e.clientY-i.top}}return{x:t.offsetX,y:t.offsetY}},h.prototype.mergeEvent=function(t){var e=0,n=0,a=0,o=0;if(t.touches){var s=this.getEventCoordinates(t);if(e=Math.round(s.x),n=Math.round(s.y),2===t.touches.length){this.isTouch2=!0;var r=t.touches[0],h=t.touches[1],c=t.target.getBoundingClientRect(),l=(r.clientX+h.clientX)/2-c.left,u=(r.clientY+h.clientY)/2-c.top;a=Math.round(l),o=Math.round(u)}else 1===t.touches.length&&(this.isTouch2=!1,a=e,o=n)}else if(t instanceof MouseEvent){a=e=(s=this.getEventCoordinates(t)).x,o=n=s.y}return i(i({},t),{mouseX:e,mouseY:n,mouseCX:a,mouseCY:o})},h.prototype.handleContextmenu=function(t){t.preventDefault(),this.evt=t},h.prototype.handleMousewheel=function(t){if(!this.disableWheel&&(t.stopPropagation(),t.preventDefault(),this.evt=t,!this.lock&&this.scrollZoom)){var e=this.mergeEvent(t),i=e.mouseX,n=e.mouseY;this.mouse=[i,n],this.mousePoint=[t.x,t.y],this.setScale(t.deltaY<0,!0)}},h.prototype.handleMouseDown=function(t){var e=this;if(t.stopPropagation(),t.touches&&t.preventDefault(),this.logIfTouch("pointer down",{type:t.type,touches:t.touches?t.touches.length:0}),this.evt=t,!this.lock){if(this.mouseAction="mouseDown",t instanceof MouseEvent&&2===t.button&&(this.isRightMouseDown=!0,this.isRightMouseHold=!1,this.rightMouseDownTime=Date.now(),this.rightMouseDownTimer=setTimeout((function(){e.isRightMouseDown&&(e.isRightMouseHold=!0,e.emit("rightMouseHold",t))}),this.RIGHT_MOUSE_HOLD_THRESHOLD)),t instanceof MouseEvent&&1===t.button)return this.isMiddleMouseDown=!0,this.lastMouseX=t.clientX,void(this.lastMouseY=t.clientY);var i=this.mergeEvent(t),n=i.mouseX,o=i.mouseY,s=i.mouseCX,r=i.mouseCY,h=this.mathRound(n/this.scale),c=this.mathRound(o/this.scale);if(this.mouse=this.isMobile&&t.touches&&2===t.touches.length?[s,r]:[n,o],this.mousePoint=[t.x,t.y],this.rememberOrigin=[n-this.originX,o-this.originY],this.isMouseInImage=this.isInImage(t),t instanceof MouseEvent&&2===t.buttons)return this.activeShape&&this.activeShape.type&&(this.lineLikeTypes.includes(this.activeShape.type)&&this.activeShape.creating&&(this.activeShape.coor.length&&this.activeShape.coor.pop(),0===this.activeShape.coor.length&&this.dataset.pop()),this.activeShape.creating||this.cancelActive()),void this.update();if(t instanceof MouseEvent&&1===t.buttons||this.isMobile&&t.touches&&1===t.touches.length){var l=this.activeShape.ctrlPoints||[];if(this.ctrlIndex=-1,this.ctrlComponentIndex=-1,this.curveCtrlActiveIndex.clear(),this.curveCtrlHoverIndex.clear(),this.dataset.forEach((function(t){if(A(t.type)&&t.ctrlPoints){var i=!1;t.ctrlPoints.forEach((function(n,a){!i&&H(e.mouse,n,e.ctrlHoverRadius/e.scale,{creating:t.creating,originX:e.originX,originY:e.originY,scale:e.scale})&&(e.curveCtrlActiveIndex.set(t.uuid,a),i=!0)}))}})),0===this.createType)if(this.activeShape&&this.activeShape.components&&this.activeShape.components.length)for(var u=function(t){var i=p.activeShape.components[t];i.activeComponent=!1,i.ctrlPoints.some((function(n,a){if(H(e.mouse,n,e.ctrlHoverRadius/e.scale,{creating:e.activeShape.creating,originX:e.originX,originY:e.originY,scale:e.scale}))return e.ctrlIndex=a,i.draggingType=I,e.ctrlComponentIndex=t,e.activeCtrlPointId=i.generateCtrlPointId(a),i.active=!0,i.activeComponent=!0,!0}))},p=this,f=0;f<this.activeShape.components.length;f++)u(f);else this.ctrlIndex=l.findIndex((function(t){return H(e.mouse,t,e.ctrlHoverRadius/e.scale,{creating:e.activeShape.creating,originX:e.originX,originY:e.originY,scale:e.scale})})),this.ctrlIndex>-1&&(this.activeShape.draggingType=I,this.activeCtrlPointId=this.activeShape.generateCtrlPointId(this.ctrlIndex));if(this.ctrlIndex>-1&&!this.activeShape.creating){if(this.activeShape.draggingType=I,this.emit("ctrlPointSelected",{ctrlPointId:this.activeCtrlPointId,shape:this.activeShape,ctrlIndex:this.ctrlIndex,ctrlComponentIndex:this.ctrlComponentIndex}),this.activeShape.readonly)return void this.emit("notify",{type:"readonly",message:"该图形已锁定,无法进行编辑",shape:this.activeShape});if(this.ctrlComponentIndex>-1){var g=a(this.activeComponentShape.ctrlPoints[this.ctrlIndex],2),v=g[0],y=g[1];this.remember=[{uuid:this.activeShape.type===d.CompositeGraph?this.activeComponentShape.uuid:this.activeShape.uuid,points:[[h-v,c-y]]}]}else{var m=a(l[this.ctrlIndex],2);v=m[0],y=m[1];this.remember=[{uuid:this.activeShape.type===d.CompositeGraph?this.activeComponentShape.uuid:this.activeShape.uuid,points:[[h-v,c-y]]}]}}else if(this.isInBackground(t)){if(this.activeShape.creating&&!this.readonly){var S=this.mathRound(h-this.originX/this.scale),b=this.mathRound(c-this.originY/this.scale);if(this.activeShape.coor.push([S,b]),this.lineLikeTypes.includes(this.activeShape.type)){var C=!1;if(this.activeShape.type===d.Polygon&&this.activeShape.coor.length>2){var x=a(this.activeShape.coor[0],2),M=(v=x[0],y=x[1],a(this.activeShape.coor[this.activeShape.coor.length-1],2)),P=M[0],T=M[1],E=H([h-v,c-y],[h-P,c-T],2*this.MIN_RADIUS,{creating:this.activeShape.creating,originX:this.originX,originY:this.originY,scale:this.scale});if(E&&0===this.activeShape.maxPoints&&(C=E,this.activeShape.coor.pop()),this.activeShape.maxPoints>0)this.activeShape.coor.some((function(t,i){return i!==e.activeShape.coor.length-1&&H([h-t[0],c-t[1]],[h-P,c-T],e.MIN_RADIUS/e.scale,{creating:e.activeShape.creating,originX:e.originX,originY:e.originY,scale:e.scale})}))&&(C=!1,this.activeShape.coor.pop()),this.activeShape.coor.length>=this.activeShape.maxPoints&&(C=!0)}if(this.activeShape.type===d.Angle&&4===this.activeShape.coor.length&&(C=!0),[d.Line,d.Arrow].includes(this.activeShape.type)&&this.activeShape.coor.length===this.activeShape.maxPoints&&(C=!0),this.activeShape.type===d.Angle&&3===this.activeShape.coor.length&&this.activeShape.forceAngel&&(C=!0),this.activeShape.type===d.Checkerboard&&2===this.activeShape.coor.length&&this.activeShape.forceAngel&&(C=!0),this.activeShape.type===d.SimpleAngle&&3===this.activeShape.coor.length&&(C=!0),C)return this.activeShape.creating=!1,this.emit("add",{shape:this.activeShape,endPoint:this.getActiveShapeLastPointInScreen(t)}),void this.update()}}else this.createType>0&&!this.readonly?this.createShapes(h,c,t):this.handleClickOnShapeOrNot(h,c);this.update()}else this.isInBackground(t)||this.handleClickOnShapeOrNot(h,c)}}},h.prototype.handleClickOnShapeOrNot=function(t,e){var i=this.onHitShape(this.mouse,this.dataset),n=i.hitIndex,a=i.hitShape,o=i.hitType,s=i.hitComponentIndex,r=i.hitComponentShape,h=i.hitComponentType,c=i.shape;this.hitIndex=n,this.debugMode&&console.log("点击结果",{hitIndex:n,hitShape:a,hitType:o,hitComponentIndex:s,hitComponentShape:r,hitComponentType:h}),this.lock||this.readonly||(n>-1&&c&&c.readonly?this.emit("notify",{type:"readonly",message:"该图形已锁定,无法进行编辑",shape:c}):n>-1&&et.includes(o)?(a.dragging=!0,a.draggingType=b,this.remember=[],this.dataset.forEach((function(t,e){e===n?(t.active=!0,t.draggingType=b,t.components.length&&t.components.forEach((function(t,e){t.active=!0,s!==e&&!r.isCtrlShape||r.disable?t.activeComponent=!1:t.activeComponent=!0}))):(t.active=!1,t.draggingType="",t.components.length&&t.components.forEach((function(t){t.active=!1,t.draggingType=""})))})),this.dataset.splice(n,1,a),this.readonly||(this.remember=this.getRememberPoint(a,t,e)),this.emit("select",a)):this.isMobile&&this.cancelActive())},h.prototype.getRememberPoint=function(t,e,i){var n=this;if(t.type===d.CompositeGraph&&t.components.length>0)return t.components.map((function(t){return n.getRememberPoint(t,e,i)})).flat();if([d.Dot,d.Circle].includes(t.type)){var o=a(t.coor[0],2),s=o[0],r=o[1];return[{uuid:t.uuid,points:[[e-s,i-r]]}]}var h={uuid:t.uuid,points:[]};return t&&t.coor&&t.coor.forEach((function(t){h.points.push([e-t[0],i-t[1]])})),[h]},h.prototype.watchMouseStatus=function(t){var e=this.onHitShape(t,this.dataset),i=e.hitIndex;e.hitShape;var n=e.hitType,a=e.shape;if(e.hitComponentIndex,e.hitComponentShape,e.hitComponentType,!(this.readonly||a&&a.readonly)){var o="default";if("point"===n?o="pointer":et.includes(n)&&(o="move"),this.canvas.style.cursor=o,a&&A(a.type)&&this.dataset.forEach((function(t){t.active=!1,t.components.forEach((function(t){t.active=!1})),a&&a.uuid===t.uuid&&(t.active=!0,t.components&&t.components.length&&t.components.forEach((function(t){t.active=!0})))})),A(this.activeShape.type)&&"point"===n&&!this.activeShape.readonly){var s=this.curveCtrlHoverIndex.get(this.activeShape.uuid);i>-1?s!==i&&(this.curveCtrlHoverIndex.set(this.activeShape.uuid,i),this.update()):void 0!==s&&(this.curveCtrlHoverIndex.clear(),this.update())}else A(this.activeShape.type)&&"point"!==n&&!this.activeShape.readonly&&(this.curveCtrlHoverIndex.clear(),this.update())}},h.prototype.handleMouseMove=function(t){var e,i=this;if(t.stopPropagation(),t.touches&&t.preventDefault(),this.logIfTouch("pointer move",{type:t.type,touches:t.touches?t.touches.length:0}),this.evt=t,!this.lock){if(this.mouseAction="mouseMove",this.isMiddleMouseDown){var n=t.clientX,o=t.clientY,s=n-this.lastMouseX,r=o-this.lastMouseY,h=_(this.transformConfig.rotate);if(-1===this.transformConfig.horizontalScale&&0===h)s=-s;else if(-1!==this.transformConfig.horizontalScale&&0!==h){var c=-h*Math.PI/180,l=s*Math.cos(c)-r*Math.sin(c),u=s*Math.sin(c)+r*Math.cos(c);s=l,r=u}else if(-1===this.transformConfig.horizontalScale&&0!==h){c=-h*Math.PI/180,l=s*Math.cos(c)-r*Math.sin(c),u=s*Math.sin(c)+r*Math.cos(c);-0===h?(s=-l,r=-u):Math.abs(h)%180==0?(s=l,r=-u):Math.abs(h)%90==0&&(s=l,r=u)}return this.originX+=s,this.originY+=r,this.lastMouseX=n,this.lastMouseY=o,void this.update()}if(t.touches&&2===t.touches.length)this.handlePinchZoom(t);else{t.touches&&1===t.touches.length&&this.handleTouchDrag(t);var p=this.mergeEvent(t),f=p.mouseX,v=p.mouseY,y=p.mouseCX,m=p.mouseCY,S=this.mathRound(f/this.scale),I=this.mathRound(v/this.scale);if(this.mouse=this.isMobile&&t.touches&&2===t.touches.length?[y,m]:[f,v],this.mousePoint=[t.x,t.y],t instanceof MouseEvent&&(2===t.buttons&&3===t.which||1===t.buttons&&1===t.which&&"zoomOnly"===this.getMode())){t.movementY>1?this.setScale(!1,!1):t.movementY<-1&&this.setScale(!0,!1)}else{if(0===this.createType&&(window.cancelAnimationFrame(this.mouseTimer),this.mouseTimer=window.requestAnimationFrame((function(){i.watchMouseStatus(i.mouse)}))),(t instanceof MouseEvent&&1===t.buttons&&1===t.which&&"moveOnly"===this.getMode()||t.touches&&1===t.touches.length&&!this.isTouch2)&&-1===this.hitIndex&&-1===this.ctrlIndex&&0===this.createType&&(this.activeShape&&!this.activeShape.dragging||!this.activeShape)&&this.canMoveImage)return this.originX=this.mathRound(f-this.rememberOrigin[0]),this.originY=this.mathRound(v-this.