var __awaiter=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))(function(o,r){function a(t){try{l(s.next(t))}catch(t){r(t)}}function n(t){try{l(s.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof i?e:new i(function(t){t(e)})).then(a,n)}l((s=s.apply(t,e||[])).next())})};import{addRegisterMxDbEntity}from"../../tools/registerMxDbEntity";import McGiWorldDrawType from"../McGiWorldDrawType";import MxDbEntity from"../MxDbEntity";import MxDbSVGText from"../MxDbSVGText";import MxFun from"../MxFun";import MxThreeJS from"../MxThreeJS";import MxType from"../MxType";import drawMxDbSVG from"./draw";class MxDbSVG extends MxDbEntity{constructor(){super(...arguments),this.svgPos=new THREE.Vector3,this.svg=null,this.svgPath="",this.svgSize=new THREE.Vector2(50,50),this.svgAlignmentRatio=new THREE.Vector2(0,0),this.imagePath="",this.isLoadMaterialFromPath=!0,this.material=null,this.svgRotate=0,this.svgReverse=!1,this.svgMirror=!1,this.svgChildColor=[],this.svgMargin=new THREE.Vector2(0,0),this.isSvgDirtyLocation=!1,this.isLoadFromPath=!0,this.aryText=[],this.svgBoxSize=null,this.fixedSize=!1,this.useSvgColor=!1}setSvgChildColor(t){if(this.svgChildColor=t,!this.useSvgColor&&this.svg){let t=new THREE.Color(this.getColor()),e=0,i=this;this.svg.traverse(function(s){s.material&&(e0){if(e=this.calcImageDrawRect(i),Math.abs(this.svgRotate)>1e-5){let i=new THREE.Vector3(.5*(e.pt1.x-e.pt2.x)+e.pt2.x,.5*(e.pt1.y-e.pt2.y)+e.pt2.y),s=new THREE.Matrix4;s.makeRotationZ(this.svgRotate);let o=(new THREE.Matrix4).makeTranslation(i.x,i.y,i.z).multiply(s).multiply((new THREE.Matrix4).makeTranslation(-i.x,-i.y,-i.z));t.setMatrix(o)}}else e=this.calcSvgDrawRect(i);let s=e.pt1,o=e.pt2,r=e.pt3,a=e.pt4,n=e.cenpt,l=e.sizew,g=this;if(t.getType()!=McGiWorldDrawType.kSelectDraw&&this.aryText.forEach((e,s)=>{if(e.txt.length>0){let a=new THREE.Vector3(e.txtPos.x,e.txtPos.y,0);this.fixedSize&&(e.txtPos.x>0?a.x=this.svgPos.x+i.screenCoordLong2Doc(e.txtPos.x):a.x=this.svgPos.x-i.screenCoordLong2Doc(e.txtPos.x),e.txtPos.y>0?a.y=this.svgPos.y+i.screenCoordLong2Doc(e.txtPos.y):a.y=this.svgPos.y-i.screenCoordLong2Doc(e.txtPos.y));let h=void 0;e.color&&(h=t.getColor(),t.setColor(e.color));let x=e.txtHeight;g.fixedSize&&(x=i.screenCoordLong2Doc(e.txtHeight)),t.setXData({type:"text",txt:e.txt,index:s});let c=t.drawText(e.txt,x,0,a,void 0,t=>{let i="";return i=e.fontStyle.length>0?`${e.fontStyle} ${t}px Arial`:`normal ${t}px Arial`});if(t.getType()==McGiWorldDrawType.kWorldDraw&&(e._txtObject=c),e.underline&&e._txtObject){const i=new THREE.Box3;i.expandByObject(e._txtObject);let s=new THREE.Vector3(i.min.x,i.min.y+.1*x,0),a=new THREE.Vector3(i.max.x,i.min.y+.1*x,0);var o=new THREE.Geometry;let n=new THREE.LineBasicMaterial({color:t.getColor(),transparent:!0,depthTest:!1});o.vertices.push(s,a);var r=new THREE.Line(o,n);t.drawEntity(r),t.getType()==McGiWorldDrawType.kWorldDraw&&(e._underLine=r)}if(e._txtAspectRatio=-1,h&&t.setColor(h),e.drawConnectingLine){let i=n.clone().sub(a);if(i.length()>x+l){i.normalize();let s=n.clone().sub(i.clone().multiplyScalar(l)),g=a.clone().add(i.clone().multiplyScalar(x));o=new THREE.Geometry;let h=new THREE.LineBasicMaterial({color:t.getColor(),transparent:!0,depthTest:!1});o.vertices.push(s,g);r=new THREE.Line(o,h);t.setXData({type:"line"}),t.drawEntity(r),t.getType()==McGiWorldDrawType.kWorldDraw&&(e._connectingLine=r)}}}}),1==t.getType()){if(this.svg)t.setXData({type:"svg"}),t.drawEntity(this.svg);else if(this.svgPath.length>0&&this.isLoadFromPath){let e=this,s=t.getMxObject();MxThreeJS.loadSVG(this.svgPath,void 0,o=>{if(o){let r=o;if(r.boxSize)e.svgBoxSize=r.boxSize.clone();else{let t=(new THREE.Box3).setFromObject(o);e.svgBoxSize||(e.svgBoxSize=new THREE.Vector3),e.svgBoxSize.x=t.max.x-t.min.x,e.svgBoxSize.y=t.max.y-t.min.y}let[a,n]=e.calcVewSize(i);e.svgBoxSize&&(o.scale.x=a/e.svgBoxSize.x,o.scale.y=n/e.svgBoxSize.y),o.scale.z=o.scale.x,e.svgReverse&&(o.scale.y*=-1),e.svgMirror&&(o.scale.x*=-1),o.rotateZ(e.svgRotate),e.isSvgDirtyLocation=!0;let l=new THREE.Color(t.getColor()),g=0;o.traverse(function(t){t.material&&(t.material=t.material.clone(),t.material.transparent=!0,t.material.depthTest=!1,e.useSvgColor||(g0){let e=this,i=t.getMxObject();MxFun.loadImageMaterial(this.imagePath,t=>{this.isLoadMaterialFromPath=!1,t&&(e.material=t,e.setNeedUpdateDisplay(),i.updateDisplay())})}this.fixedSize||(t.drawSelectLine(s,o),t.drawSelectLine(r,a),t.drawSelectLine(s,r),t.drawSelectLine(r,o),t.drawSelectLine(o,a),t.drawSelectLine(a,s))}else t.drawLine(s,r),t.drawLine(r,o),t.drawLine(o,a),t.drawLine(a,s);this.imagePath.length>0&&t.setMatrix(null)}setSvgPath(t,e=!1){return __awaiter(this,void 0,void 0,function*(){this.svgPath=t,this.svg=null,this.isLoadFromPath=!0,this.svgBoxSize=null,e&&(yield MxThreeJS.loadSVG(t))})}getSvgPath(){return this.svgPath}setSvgPostion(t){this.svgPos=t.clone(),this.isSvgDirtyLocation=!0}setImagePath(t,e){this.imagePath=t,e?(this.material=e,this.isLoadMaterialFromPath=!1):(this.material=null,this.isLoadMaterialFromPath=!0)}getImagePath(){return this.imagePath}getSvgPostion(){return this.svgPos}setSvgSize(t){this.svgSize=t,this.isSvgDirtyLocation=!0}getSvgSize(){return this.svgSize}setSvgAlignmentRatio(t){this.svgAlignmentRatio=t,this.isSvgDirtyLocation=!0}getSvgAlignmentRatio(){return this.svgAlignmentRatio}getText(t){return t0?e.x=this.svgPos.x+t.screenCoordLong2Doc(i.txtPos.x):e.x=this.svgPos.x-t.screenCoordLong2Doc(i.txtPos.x),i.txtPos.y>0?e.y=this.svgPos.y+t.screenCoordLong2Doc(i.txtPos.y):e.y=this.svgPos.y-t.screenCoordLong2Doc(i.txtPos.y)}t.push(e)}}return t}moveGripPointsAt(t,e){if(0==t)this.svgPos.add(e),this.fixedSize||this.aryText.forEach(t=>{t.txtPos.add(e)});else if(t-1>=0&&t-1{let e=new MxDbSVGText;e.txt=t.txt,e.txtHeight=t.txtHeight,e.txtPos.copy(t.txtPos),e.move=t.move,e.drawConnectingLine=t.drawConnectingLine,this.aryText.push(e)}),this.svgRotate=t.svgRotate,this.useSvgColor=t.useSvgColor,this.svgReverse=t.svgReverse,this.svgMirror=t.svgMirror,this.svgMargin=t.svgMargin,t.svgChildColor?this.svgChildColor=t.svgChildColor:this.svgChildColor=[],this.imagePath=t.imagePath.substr(0),this.isLoadMaterialFromPath=!0,t.material&&(this.material=t.material),!0}dwgOut(t){this.onDwgOut(t);let e,i=this.getMxObject();return t.type==MxType.MxCloneType.kClone&&(t.svg=this.svg),t.svgPath=this.svgPath,t.svgPos=this.svgPos,t.svgSize=this.svgSize,t.svgAlignmentRatio=this.svgAlignmentRatio,t.txts=[],t.type==MxType.MxCloneType.kSaveDwgClone&&i&&(e=this.calcSvgDrawRect(i)),this.aryText.forEach(e=>{let i={txtPos:e.txtPos,txt:e.txt,txtHeight:e.txtHeight,color:e.color,_txtAspectRatio:e._txtAspectRatio,move:e.move,drawConnectingLine:e.drawConnectingLine};t.type==MxType.MxCloneType.kSaveDwgClone&&(e._connectingLine&&(i.connectingLine=e._connectingLine.geometry.vertice),e._underLine&&(i._underLine=e._underLine.geometry.vertice)),t.txts.push(i)}),t.fixedSize=this.fixedSize,t.svgRotate=this.svgRotate,t.useSvgColor=this.useSvgColor,t.svgReverse=this.svgReverse,t.svgMirror=this.svgMirror,t.svgMargin=this.svgMargin,t.svgChildColor=this.svgChildColor,t.type==MxType.MxCloneType.kSaveDwgClone&&(t.svgRect=e),t.imagePath=this.imagePath,t.type==MxType.MxCloneType.kDragClone&&(t.material=this.material),t}create(){return new MxDbSVG}transformBy(t){this.svgPos.applyMatrix4(t),this.isSvgDirtyLocation=!0,this.fixedSize||this.aryText.forEach(e=>{e.txtPos.applyMatrix4(t)})}getTypeName(){return"MxDbSVG"}setColor(t){if(super.setColor(t),this.svg){let t=new THREE.Color(this.color);this.svg.traverse(function(e){e.material&&(e.material.color=t)})}return this}setSvg(t){this.svg=t,this.isLoadFromPath=!1,this.svgBoxSize=null}calcSvgBoxSize(t){if(!this.svgBoxSize)if(t.boxSize)this.svgBoxSize=t.boxSize.clone();else{let e=(new THREE.Box3).setFromObject(t);this.svgBoxSize||(this.svgBoxSize=new THREE.Vector3),this.svgBoxSize.x=e.max.x-e.min.x,this.svgBoxSize.y=e.max.y-e.min.y}}reComputeSVG(){if(!this.svg)return;let t=this.getMxObject();if(!t)return;this.calcSvgBoxSize(this.svg);let[e,i]=this.calcVewSize(t);this.svgBoxSize&&(this.svg.scale.x=e/this.svgBoxSize.x,this.svg.scale.y=i/this.svgBoxSize.y),this.svg.scale.z=this.svg.scale.x,this.svgReverse&&(this.svg.scale.y*=-1),this.svgMirror&&(this.svg.scale.x*=-1),this.isSvgDirtyLocation=!0,this.calcSvgPosition(t)}onViewChange(){if(!this.fixedSize)return!1;if(this.imagePath.length>0)return this.setNeedUpdateDisplay(!1),!0;let t=this.getMxObject();if(null==t)return!1;if(this.svg){this.calcSvgBoxSize(this.svg);let[e,i]=this.calcVewSize(t);this.svgBoxSize&&(this.svg.scale.x=e/this.svgBoxSize.x,this.svg.scale.y=i/this.svgBoxSize.y),this.svg.scale.z=this.svg.scale.x,this.svgReverse&&(this.svg.scale.y*=-1),this.svgMirror&&(this.svg.scale.x*=-1),this.isSvgDirtyLocation=!0,this.calcSvgPosition(t)}let e=this.calcSvgDrawRect(t),i=e.cenpt,s=e.sizew,o=this;return this.aryText.forEach(e=>{if(e._txtObject&&t){let a=t.screenCoordLong2Doc(e.txtHeight);if(a>1e-5){e._txtAspectRatio<=0&&(e._txtAspectRatio=e._txtObject.scale.x/e._txtObject.scale.y),e._txtObject.scale.set(e._txtAspectRatio*a*1.5,1.5*a,1),e.txtPos.x>0?e._txtObject.position.x=o.svgPos.x+t.screenCoordLong2Doc(e.txtPos.x):e._txtObject.position.x=o.svgPos.x-t.screenCoordLong2Doc(e.txtPos.x),e.txtPos.y>0?e._txtObject.position.y=o.svgPos.y+t.screenCoordLong2Doc(e.txtPos.y):e._txtObject.position.y=o.svgPos.y-t.screenCoordLong2Doc(e.txtPos.y);let n=e._txtObject.position;if(e._txtObject.updateMatrix(),e._underLine){const t=new THREE.Box3;let i=e._txtObject.parent;e._txtObject.parent=null,t.expandByObject(e._txtObject),e._txtObject.parent=i;let s=new THREE.Vector3(t.min.x,t.min.y+.1*a,0),o=new THREE.Vector3(t.max.x,t.min.y+.1*a,0);(r=new THREE.Geometry).vertices.push(s,o),e._underLine.geometry=r}if(e._connectingLine){let t=i.clone().sub(n);t.normalize();let o=i.clone().sub(t.clone().multiplyScalar(s)),l=n.clone().add(t.clone().multiplyScalar(a));var r;(r=new THREE.Geometry).vertices.push(o,l),e._connectingLine.geometry=r}}}}),!0}}MxDbSVG.cmd="Mx_ModelFixedSvg",MxDbSVG.draw=drawMxDbSVG,addRegisterMxDbEntity(MxDbSVG);export default MxDbSVG;