mxdraw 0.1.131 → 0.1.134

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.
@@ -13,6 +13,9 @@ declare class MxDbSVG extends MxDbEntity {
13
13
  private svgPath;
14
14
  private svgSize;
15
15
  private svgAlignmentRatio;
16
+ private imagePath;
17
+ private isLoadMaterialFromPath;
18
+ private material;
16
19
  /** 延z轴旋转的数值 */
17
20
  svgRotate: number;
18
21
  /** 是否倒置SVG图形 */
@@ -32,6 +35,7 @@ declare class MxDbSVG extends MxDbEntity {
32
35
  getSvgChildColor(): number[];
33
36
  private calcVewSize;
34
37
  private calcSvgDrawRect;
38
+ private calcImageDrawRect;
35
39
  worldDraw(pWorldDraw: McGiWorldDraw): void;
36
40
  /**
37
41
  * 设置SVG的路径
@@ -48,6 +52,12 @@ declare class MxDbSVG extends MxDbEntity {
48
52
  * @param pos THREE.Vector3
49
53
  * */
50
54
  setSvgPostion(pos: THREE.Vector3): void;
55
+ /** 设置图片路径
56
+ * @param sPath 路径
57
+ * */
58
+ setImagePath(sPath: string, material?: THREE.MeshLambertMaterial): void;
59
+ /** 获取图片路径 */
60
+ getImagePath(): string;
51
61
  /**
52
62
  * 获取SVG显示位置
53
63
  * */
@@ -1 +1 @@
1
- var __awaiter=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))(function(o,r){function n(t){try{a(s.next(t))}catch(t){r(t)}}function g(t){try{a(s.throw(t))}catch(t){r(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof i?e:new i(function(t){t(e)})).then(n,g)}a((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.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&&(e<i.svgChildColor.length?s.material.color=new THREE.Color(i.svgChildColor[e]):s.material.color=t,e++)}),this.setNeedUpdateDisplay(!0)}}getSvgChildColor(){return this.svgChildColor}calcVewSize(t){let e=this.svgSize.x,i=this.svgSize.y;return i<=0&&(i=this.svgBoxSize?this.svgBoxSize.y/this.svgBoxSize.x*e:e),this.fixedSize&&(e=t.screenCoordLong2Doc(e),i=t.screenCoordLong2Doc(i)),[e,i]}calcSvgDrawRect(t){if(!t)return;this.calcSvgPosition(t);let[e,i]=this.calcVewSize(t),s=new THREE.Matrix4;s.makeScale(this.svgMirror?-1:1,this.svgReverse?-1:1,1);let o=new THREE.Matrix4;o.makeRotationZ(this.svgRotate);let r=new THREE.Matrix4,n=new THREE.Vector3(this.svgPos.x-e*this.svgAlignmentRatio.x,this.svgPos.y-i*this.svgAlignmentRatio.y,0);r.makeTranslation(n.x,n.y,n.z),o.multiply(s),o.premultiply(r);let g=new THREE.Vector3(0,0,0),a=new THREE.Vector3(e,0,0),l=new THREE.Vector3(e,i,0),x=new THREE.Vector3(0,i,0);return g.applyMatrix4(o),a.applyMatrix4(o),l.applyMatrix4(o),x.applyMatrix4(o),{pt1:g,pt2:l,pt3:a,pt4:x,cenpt:l.clone().add(g.clone().sub(l).multiplyScalar(.5)),sizew:e,sizeh:i}}worldDraw(t){let e=t.getMxObject(),i=this.calcSvgDrawRect(e),s=i.pt1,o=i.pt2,r=i.pt3,n=i.pt4,g=i.cenpt,a=i.sizew,l=this;if(t.getType()!=McGiWorldDrawType.kSelectDraw&&this.aryText.forEach((i,s)=>{if(i.txt.length>0){let n=new THREE.Vector3(i.txtPos.x,i.txtPos.y,0);this.fixedSize&&(i.txtPos.x>0?n.x=this.svgPos.x+e.screenCoordLong2Doc(i.txtPos.x):n.x=this.svgPos.x-e.screenCoordLong2Doc(i.txtPos.x),i.txtPos.y>0?n.y=this.svgPos.y+e.screenCoordLong2Doc(i.txtPos.y):n.y=this.svgPos.y-e.screenCoordLong2Doc(i.txtPos.y));let x=void 0;i.color&&(x=t.getColor(),t.setColor(i.color));let h=i.txtHeight;l.fixedSize&&(h=e.screenCoordLong2Doc(i.txtHeight)),t.setXData({type:"text",txt:i.txt,index:s});let c=t.drawText(i.txt,h,0,n,void 0,t=>{let e="";return e=i.fontStyle.length>0?`${i.fontStyle} ${t}px Arial`:`normal ${t}px Arial`});if(t.getType()==McGiWorldDrawType.kWorldDraw&&(i._txtObject=c),i.underline&&i._txtObject){const e=new THREE.Box3;e.expandByObject(i._txtObject);let s=new THREE.Vector3(e.min.x,e.min.y+.1*h,0),n=new THREE.Vector3(e.max.x,e.min.y+.1*h,0);var o=new THREE.Geometry;let g=new THREE.LineBasicMaterial({color:t.getColor(),transparent:!0,depthTest:!1});o.vertices.push(s,n);var r=new THREE.Line(o,g);t.drawEntity(r),t.getType()==McGiWorldDrawType.kWorldDraw&&(i._underLine=r)}if(i._txtAspectRatio=-1,x&&t.setColor(x),i.drawConnectingLine){let e=g.clone().sub(n);if(e.length()>h+a){e.normalize();let s=g.clone().sub(e.clone().multiplyScalar(a)),l=n.clone().add(e.clone().multiplyScalar(h));o=new THREE.Geometry;let x=new THREE.LineBasicMaterial({color:t.getColor(),transparent:!0,depthTest:!1});o.vertices.push(s,l);r=new THREE.Line(o,x);t.setXData({type:"line"}),t.drawEntity(r),t.getType()==McGiWorldDrawType.kWorldDraw&&(i._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 i=this,s=t.getMxObject();MxThreeJS.loadSVG(this.svgPath,void 0,o=>{if(o){let r=o;if(r.boxSize)i.svgBoxSize=r.boxSize.clone();else{let t=(new THREE.Box3).setFromObject(o);i.svgBoxSize||(i.svgBoxSize=new THREE.Vector3),i.svgBoxSize.x=t.max.x-t.min.x,i.svgBoxSize.y=t.max.y-t.min.y}let[n,g]=i.calcVewSize(e);i.svgBoxSize&&(o.scale.x=n/i.svgBoxSize.x,o.scale.y=g/i.svgBoxSize.y),o.scale.z=o.scale.x,i.svgReverse&&(o.scale.y*=-1),i.svgMirror&&(o.scale.x*=-1),o.rotateZ(i.svgRotate),i.isSvgDirtyLocation=!0;let a=new THREE.Color(t.getColor()),l=0;o.traverse(function(t){t.material&&(t.material=t.material.clone(),t.material.transparent=!0,t.material.depthTest=!1,i.useSvgColor||(l<i.svgChildColor.length?t.material.color=new THREE.Color(i.svgChildColor[l]):t.material.color=a),l++)}),i.svg=o,i.setNeedUpdateDisplay(),s.updateDisplay()}else console.log("mx LoadSVG:"+i.svgPath+" failed");i.isLoadFromPath=!1})}this.fixedSize||(t.drawSelectLine(s,o),t.drawSelectLine(r,n),t.drawSelectLine(s,r),t.drawSelectLine(r,o),t.drawSelectLine(o,n),t.drawSelectLine(n,s))}else t.drawLine(s,r),t.drawLine(r,o),t.drawLine(o,n),t.drawLine(n,s)}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}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 t<this.aryText.length?this.aryText[t]:null}addText(t){this.aryText.push(t)}getGripPoints(){let t=[];t.push(this.svgPos);let e=0;for(;e<this.aryText.length;e++){let i=this.aryText[e];if(i.move){let e=new THREE.Vector3(i.txtPos.x,i.txtPos.y,0);if(this.fixedSize){let t=MxFun.getCurrentDraw();i.txtPos.x>0?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<this.aryText.length){let i=this.aryText[t-1];if(i.move)if(this.fixedSize){let t=MxFun.getCurrentDraw();i.txtPos.x+=t.docCoordLong2Screen(e.x),i.txtPos.y+=t.docCoordLong2Screen(e.y)}else i.txtPos.add(e)}return this.isSvgDirtyLocation=!0,!0}calcSvgPosition(t){if(!this.svg||!this.isSvgDirtyLocation)return;this.isSvgDirtyLocation=!1;let[e,i]=this.calcVewSize(t);this.svg.position.x=this.svgPos.x-e*this.svgAlignmentRatio.x-this.svgMargin.x*e,this.svg.position.y=this.svgPos.y-i*this.svgAlignmentRatio.y-this.svgMargin.y*i}dwgIn(t){this.onDwgIn(t),this.fixedSize=t.fixedSize,this.fixedSize?this.svg=null:t.type==MxType.MxCloneType.kClone&&t.svg&&(this.svg=t.svg.clone()),this.svgPos.copy(t.svgPos),this.svgPath=t.svgPath.substr(0),this.svgSize.copy(t.svgSize),this.svgAlignmentRatio.copy(t.svgAlignmentRatio),this.isSvgDirtyLocation=!0,this.svg||(this.isLoadFromPath=!0),this.svgBoxSize=null;let e=t.txts;return this.aryText=[],e.forEach(t=>{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=[],!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}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;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 n=t.screenCoordLong2Doc(e.txtHeight);if(n>1e-5){e._txtAspectRatio<=0&&(e._txtAspectRatio=e._txtObject.scale.x/e._txtObject.scale.y),e._txtObject.scale.set(e._txtAspectRatio*n*1.5,1.5*n,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 g=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*n,0),o=new THREE.Vector3(t.max.x,t.min.y+.1*n,0);(r=new THREE.Geometry).vertices.push(s,o),e._underLine.geometry=r}if(e._connectingLine){let t=i.clone().sub(g);t.normalize();let o=i.clone().sub(t.clone().multiplyScalar(s)),a=g.clone().add(t.clone().multiplyScalar(n));var r;(r=new THREE.Geometry).vertices.push(o,a),e._connectingLine.geometry=r}}}}),!0}}MxDbSVG.cmd="Mx_ModelFixedSvg",MxDbSVG.draw=drawMxDbSVG,addRegisterMxDbEntity(MxDbSVG);export default MxDbSVG;
1
+ 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&&(e<i.svgChildColor.length?s.material.color=new THREE.Color(i.svgChildColor[e]):s.material.color=t,e++)}),this.setNeedUpdateDisplay(!0)}}getSvgChildColor(){return this.svgChildColor}calcVewSize(t){let e=this.svgSize.x,i=this.svgSize.y;return i<=0&&(i=this.svgBoxSize?this.svgBoxSize.y/this.svgBoxSize.x*e:e),this.fixedSize&&(e=t.screenCoordLong2Doc(e),i=t.screenCoordLong2Doc(i)),[e,i]}calcSvgDrawRect(t){if(!t)return;this.calcSvgPosition(t);let[e,i]=this.calcVewSize(t),s=new THREE.Matrix4;s.makeScale(this.svgMirror?-1:1,this.svgReverse?-1:1,1);let o=new THREE.Matrix4;o.makeRotationZ(this.svgRotate);let r=new THREE.Matrix4,a=new THREE.Vector3(this.svgPos.x-e*this.svgAlignmentRatio.x,this.svgPos.y-i*this.svgAlignmentRatio.y,0);r.makeTranslation(a.x,a.y,a.z),o.multiply(s),o.premultiply(r);let n=new THREE.Vector3(0,0,0),l=new THREE.Vector3(e,0,0),g=new THREE.Vector3(e,i,0),h=new THREE.Vector3(0,i,0);return n.applyMatrix4(o),l.applyMatrix4(o),g.applyMatrix4(o),h.applyMatrix4(o),{pt1:n,pt2:g,pt3:l,pt4:h,cenpt:g.clone().add(n.clone().sub(g).multiplyScalar(.5)),sizew:e,sizeh:i}}calcImageDrawRect(t){if(!t)return;this.calcSvgPosition(t);let[e,i]=this.calcVewSize(t),s=new THREE.Matrix4;s.makeScale(this.svgMirror?-1:1,this.svgReverse?-1:1,1);let o=new THREE.Matrix4,r=new THREE.Matrix4,a=new THREE.Vector3(this.svgPos.x-e*this.svgAlignmentRatio.x,this.svgPos.y-i*this.svgAlignmentRatio.y,0);r.makeTranslation(a.x,a.y,a.z),o.multiply(s),o.premultiply(r);let n=new THREE.Vector3(0,0,0),l=new THREE.Vector3(e,0,0),g=new THREE.Vector3(e,i,0),h=new THREE.Vector3(0,i,0);return n.applyMatrix4(o),l.applyMatrix4(o),g.applyMatrix4(o),h.applyMatrix4(o),{pt1:n,pt2:g,pt3:l,pt4:h,cenpt:g.clone().add(n.clone().sub(g).multiplyScalar(.5)),sizew:e,sizeh:i}}worldDraw(t){let e,i=t.getMxObject();if(this.imagePath.length>0){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||(g<e.svgChildColor.length?t.material.color=new THREE.Color(e.svgChildColor[g]):t.material.color=l),g++)}),e.svg=o,e.setNeedUpdateDisplay(),s.updateDisplay()}else console.log("mx LoadSVG:"+e.svgPath+" failed");e.isLoadFromPath=!1})}else if(this.material){let e=Math.abs(s.x-o.x),i=Math.abs(s.y-o.y),r=new THREE.PlaneGeometry(e,i),a=Math.min(s.x,o.x),n=Math.min(s.y,o.y);for(let t=0;t<r.vertices.length;t++)r.vertices[t].x+=a+.5*e,r.vertices[t].y+=n+.5*i,r.vertices[t].z=0;let l=new THREE.Mesh(r,this.material);l.material.depthTest=!1,t.drawEntity(l)}else if(this.isLoadMaterialFromPath&&this.imagePath.length>0){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 t<this.aryText.length?this.aryText[t]:null}addText(t){this.aryText.push(t)}getGripPoints(){let t=[];t.push(this.svgPos);let e=0;for(;e<this.aryText.length;e++){let i=this.aryText[e];if(i.move){let e=new THREE.Vector3(i.txtPos.x,i.txtPos.y,0);if(this.fixedSize){let t=MxFun.getCurrentDraw();i.txtPos.x>0?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<this.aryText.length){let i=this.aryText[t-1];if(i.move)if(this.fixedSize){let t=MxFun.getCurrentDraw();i.txtPos.x+=t.docCoordLong2Screen(e.x),i.txtPos.y+=t.docCoordLong2Screen(e.y)}else i.txtPos.add(e)}return this.isSvgDirtyLocation=!0,!0}calcSvgPosition(t){if(!this.svg||!this.isSvgDirtyLocation)return;this.isSvgDirtyLocation=!1;let[e,i]=this.calcVewSize(t);this.svg.position.x=this.svgPos.x-e*this.svgAlignmentRatio.x-this.svgMargin.x*e,this.svg.position.y=this.svgPos.y-i*this.svgAlignmentRatio.y-this.svgMargin.y*i}dwgIn(t){this.onDwgIn(t),this.fixedSize=t.fixedSize,this.fixedSize?this.svg=null:t.type==MxType.MxCloneType.kClone&&t.svg&&(this.svg=t.svg.clone()),this.svgPos.copy(t.svgPos),this.svgPath=t.svgPath.substr(0),this.svgSize.copy(t.svgSize),this.svgAlignmentRatio.copy(t.svgAlignmentRatio),this.isSvgDirtyLocation=!0,this.svg||(this.isLoadFromPath=!0),this.svgBoxSize=null;let e=t.txts;return this.aryText=[],e.forEach(t=>{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;
@@ -475,7 +475,7 @@ declare class MxFunClass {
475
475
  *
476
476
  * ```
477
477
  */
478
- loadImageMaterial(imageUrlPath: string, callResult: (material: THREE.MeshLambertMaterial) => void | null): Promise<THREE.MeshLambertMaterial | null>;
478
+ loadImageMaterial(imageUrlPath: string, callResult?: (material: THREE.MeshLambertMaterial) => void | null): Promise<THREE.MeshLambertMaterial | null>;
479
479
  /**
480
480
  * 重新打开cad文件,该函数在控件创建完后,需要再次重新打开文件,调用。
481
481
  * @param sFile 打的cad文件路径