mxdraw 0.1.120 → 0.1.122

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.
Files changed (33) hide show
  1. package/dist/index.d.ts +210 -114
  2. package/dist/lib/MxModule/MxDbArcShape/index.d.ts +1 -1
  3. package/dist/lib/MxModule/MxDbArcShapeDraw/index.d.ts +1 -1
  4. package/dist/lib/MxModule/MxDbArrow/index.d.ts +20 -0
  5. package/dist/lib/MxModule/MxDbArrow/index.js +1 -0
  6. package/dist/lib/MxModule/MxDbCircleArc/index.d.ts +1 -1
  7. package/dist/lib/MxModule/MxDbEllipseArc/index.d.ts +3 -3
  8. package/dist/lib/MxModule/MxDbEllipseShape/index.d.ts +3 -0
  9. package/dist/lib/MxModule/MxDbEllipseShape/index.js +1 -1
  10. package/dist/lib/MxModule/MxDbEntity/index.d.ts +10 -0
  11. package/dist/lib/MxModule/MxDbEntity/index.js +1 -1
  12. package/dist/lib/MxModule/MxDbLineShape/index.d.ts +21 -0
  13. package/dist/lib/MxModule/MxDbLineShape/index.js +1 -0
  14. package/dist/lib/MxModule/MxDbRegularPolygon/index.d.ts +6 -8
  15. package/dist/lib/MxModule/MxDbRegularPolygon/index.js +1 -1
  16. package/dist/lib/MxModule/MxDbRegularPolygonShape/index.d.ts +2 -1
  17. package/dist/lib/MxModule/MxDbRegularPolygonShape/index.js +1 -1
  18. package/dist/lib/MxModule/MxDbSVG/index.js +1 -1
  19. package/dist/lib/MxModule/MxDbShape/index.d.ts +23 -3
  20. package/dist/lib/MxModule/MxDbShape/index.js +1 -1
  21. package/dist/lib/MxModule/MxDbStarShape/index.d.ts +1 -1
  22. package/dist/lib/MxModule/MxDbText/SpriteText.d.ts +1 -1
  23. package/dist/lib/MxModule/MxDrawObject/index.d.ts +10 -1
  24. package/dist/lib/MxModule/MxDrawObject/index.js +1 -1
  25. package/dist/lib/MxModule/MxFilters/index.d.ts +4 -0
  26. package/dist/lib/MxModule/MxFilters/index.js +1 -1
  27. package/dist/lib/MxModule/loadCoreCode/mxfun.es5.js +1 -1
  28. package/dist/lib/index.d.ts +6 -0
  29. package/dist/lib/mxdraw.d.ts +2 -0
  30. package/dist/lib/mxdraw.js +1 -1
  31. package/dist/mxdraw.es.js +1 -1
  32. package/dist/mxdraw.umd.js +1 -1
  33. package/package.json +3 -1
@@ -1,9 +1,6 @@
1
- import MxDbEntity from '../MxDbEntity';
2
1
  import McGiWorldDraw from '../McGiWorldDraw';
3
- /**
4
- * MxDbRegularPolygon 正多边形
5
- */
6
- export default class MxDbRegularPolygon extends MxDbEntity {
2
+ import MxDbShape from '../MxDbShape';
3
+ export default class MxDbRegularPolygon extends MxDbShape {
7
4
  /** 正多边形的中心点位置 */
8
5
  centerPoint: import("three").Vector3;
9
6
  /** 正多边形两条边之间的交点位置 */
@@ -11,10 +8,11 @@ export default class MxDbRegularPolygon extends MxDbEntity {
11
8
  /** 正多边形边的数量 */
12
9
  sidesNumber: number;
13
10
  getTypeName(): string;
11
+ /**
12
+ * MxDbRegularPolygon 正多边形
13
+ */
14
+ constructor();
14
15
  worldDraw(pWorldDraw: McGiWorldDraw): void;
15
16
  getGripPoints(): THREE.Vector3[];
16
17
  moveGripPointsAt(index: number, offset: THREE.Vector3): boolean;
17
- create(): MxDbEntity;
18
- dwgIn(obj: any): boolean;
19
- dwgOut(obj: any): object;
20
18
  }
@@ -1 +1 @@
1
- import MxDbEntity from"../MxDbEntity";import MxFun from"../MxFun";import McGiWorldDrawType from"../McGiWorldDrawType";import{createThreeRegularPolygon}from"../../tools/three/index";export default class MxDbRegularPolygon extends MxDbEntity{constructor(){super(...arguments),this.centerPoint=new THREE.Vector3,this.otherPoint=new THREE.Vector3,this.sidesNumber=5}getTypeName(){return"MxDbRegularPolygon"}worldDraw(t){const e=createThreeRegularPolygon(this.centerPoint,this.otherPoint,this.sidesNumber,t.getColor());if(e.geometry.computeBoundingBox(),t.getType()===McGiWorldDrawType.kSelectDraw){const r=new THREE.Vector3;e.geometry.boundingBox.getSize(r),r.addScalar(MxFun.screenCoordLong2Doc(10));const o=r.x/2,n=r.y/2,i={x:this.centerPoint.x-o,y:this.centerPoint.y-n},s={x:this.centerPoint.x+o,y:this.centerPoint.y-n},h={x:this.centerPoint.x+o,y:this.centerPoint.y+n},c={x:this.centerPoint.x-o,y:this.centerPoint.y+n};t.drawLine(i.x,i.y,s.x,s.y),t.drawLine(s.x,s.y,h.x,h.y),t.drawLine(h.x,h.y,c.x,c.y),t.drawLine(c.x,c.y,i.x,i.y)}t.drawEntity(e)}getGripPoints(){return[this.centerPoint,this.otherPoint]}moveGripPointsAt(t,e){return 0===t?(this.centerPoint.add(e),this.otherPoint.add(e)):1===t&&this.otherPoint.add(e),!0}create(){return new MxDbRegularPolygon}dwgIn(t){return this.onDwgIn(t),this.centerPoint.copy(t.centerPoint),this.otherPoint.copy(t.otherPoint),this.sidesNumber=t.sidesNumber,!0}dwgOut(t){return this.onDwgOut(t),t.centerPoint=this.centerPoint,t.otherPoint=this.otherPoint,t.sidesNumber=this.sidesNumber,t}};
1
+ import{computeRegularPolygonVertices}from"../../tools/three/index";import MxDbShape from"../MxDbShape";export default class MxDbRegularPolygon extends MxDbShape{constructor(){super(),this.centerPoint=new THREE.Vector3,this.otherPoint=new THREE.Vector3,this.sidesNumber=5,this._propertyDbKeys=[...this._propertyDbKeys,"centerPoint","otherPoint","sidesNumber"]}getTypeName(){return"MxDbRegularPolygon"}worldDraw(t){const e=computeRegularPolygonVertices(this.centerPoint,this.otherPoint,this.sidesNumber);this.closed=!1,e.push(e[0]),this._draw(t,e),this._drawStoreLine(t,e)}getGripPoints(){return[this.centerPoint,this.otherPoint]}moveGripPointsAt(t,e){return 0===t?(this.centerPoint.add(e),this.otherPoint.add(e)):1===t&&this.otherPoint.add(e),!0}};
@@ -3,11 +3,12 @@ import MxDbShape from "../MxDbShape";
3
3
  /** 等边多边形 */
4
4
  export default class MxDbRegularPolygonShape extends MxDbShape {
5
5
  center: import("three").Vector3;
6
- sides: number;
6
+ sidesNumber: number;
7
7
  radius: number;
8
8
  getTypeName(): string;
9
9
  constructor();
10
10
  worldDraw(pWorldDraw: McGiWorldDraw): void;
11
+ _drawPolygonShape(pWorldDraw: McGiWorldDraw): void;
11
12
  _getPoints(): {
12
13
  x: number;
13
14
  y: number;
@@ -1 +1 @@
1
- import MxDbShape from"../MxDbShape";export default class MxDbRegularPolygonShape extends MxDbShape{constructor(){super(),this.center=new THREE.Vector3,this.sides=6,this.radius=70,this._propertyDbKeys=[...this._propertyDbKeys,"center","sides","radius"]}getTypeName(){return"MxDbRegularPolygonShape"}worldDraw(t){const e=this._getPoints(),s=new THREE.Path;s.moveTo(e[0].x,e[0].y);for(let t=0;t<e.length;t++)s.lineTo(e[t].x,e[t].y);s.closePath();const r=this.createPaths(s),i=this.getShapePoints(r);this._draw(t,i),this._drawStoreLine(t,i)}_getPoints(){const{sides:t,radius:e}=this,{x:s,y:r}=this.center,i=[];for(let o=0;o<t;o++)i.push({x:e*Math.sin(2*o*Math.PI/t)+s,y:-1*e*Math.cos(2*o*Math.PI/t)+r});return i}getGripPoints(){return[this.center]}moveGripPointsAt(t,e){return 0===t&&this.center.add(e),!0}};
1
+ import MxDbShape from"../MxDbShape";export default class MxDbRegularPolygonShape extends MxDbShape{constructor(){super(),this.center=new THREE.Vector3,this.sidesNumber=6,this.radius=70,this._propertyDbKeys=[...this._propertyDbKeys,"center","sidesNumber","radius"]}getTypeName(){return"MxDbRegularPolygonShape"}worldDraw(e){this._drawPolygonShape(e)}_drawPolygonShape(e){const t=this._getPoints(),r=new THREE.Path;r.moveTo(t[0].x,t[0].y);for(let e=0;e<t.length;e++)r.lineTo(t[e].x,t[e].y);r.closePath();const s=this.createPaths(r),o=this.getShapePoints(s);this._draw(e,o),this._drawStoreLine(e,o)}_getPoints(){const{sidesNumber:e,radius:t}=this,{x:r,y:s}=this.center,o=[];for(let h=0;h<e;h++)o.push({x:t*Math.sin(2*h*Math.PI/e)+r,y:-1*t*Math.cos(2*h*Math.PI/e)+s});return o}getGripPoints(){return[this.center]}moveGripPointsAt(e,t){return 0===e&&this.center.add(t),!0}};
@@ -1 +1 @@
1
- var __awaiter=this&&this.__awaiter||function(t,e,s,i){return new(s||(s=Promise))(function(o,r){function n(t){try{a(i.next(t))}catch(t){r(t)}}function g(t){try{a(i.throw(t))}catch(t){r(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof s?e:new s(function(t){t(e)})).then(n,g)}a((i=i.apply(t,e||[])).next())})};import McGiWorldDrawType from"../McGiWorldDrawType";import MxDbEntity from"../MxDbEntity";import MxDbSVGText from"../MxDbSVGText";import MxFun from"../MxFun";import MxThreeJS from"../MxThreeJS";import MxType from"../MxType";export default 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,s=this;this.svg.traverse(function(i){i.material&&(e<s.svgChildColor.length?i.material.color=new THREE.Color(s.svgChildColor[e]):i.material.color=t,e++)}),this.setNeedUpdateDisplay(!0)}}getSvgChildColor(){return this.svgChildColor}calcVewSize(t){let e=this.svgSize.x,s=this.svgSize.y;return s<=0&&(s=this.svgBoxSize?this.svgBoxSize.y/this.svgBoxSize.x*e:e),this.fixedSize&&(e=t.screenCoordLong2Doc(e),s=t.screenCoordLong2Doc(s)),[e,s]}calcSvgDrawRect(t){if(!t)return;this.calcSvgPosition(t);let[e,s]=this.calcVewSize(t),i=new THREE.Matrix4;i.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-s*this.svgAlignmentRatio.y,0);r.makeTranslation(n.x,n.y,n.z),o.multiply(i),o.premultiply(r);let g=new THREE.Vector3(0,0,0),a=new THREE.Vector3(e,0,0),l=new THREE.Vector3(e,s,0),h=new THREE.Vector3(0,s,0);return g.applyMatrix4(o),a.applyMatrix4(o),l.applyMatrix4(o),h.applyMatrix4(o),{pt1:g,pt2:l,pt3:a,pt4:h,cenpt:l.clone().add(g.clone().sub(l).multiplyScalar(.5)),sizew:e,sizeh:s}}worldDraw(t){let e=t.getMxObject(),s=this.calcSvgDrawRect(e),i=s.pt1,o=s.pt2,r=s.pt3,n=s.pt4,g=s.cenpt,a=s.sizew,l=this;if(t.getType()!=McGiWorldDrawType.kSelectDraw&&this.aryText.forEach((s,i)=>{if(s.txt.length>0){let n=new THREE.Vector3(s.txtPos.x,s.txtPos.y,0);this.fixedSize&&(s.txtPos.x>0?n.x=this.svgPos.x+e.screenCoordLong2Doc(s.txtPos.x):n.x=this.svgPos.x-e.screenCoordLong2Doc(s.txtPos.x),s.txtPos.y>0?n.y=this.svgPos.y+e.screenCoordLong2Doc(s.txtPos.y):n.y=this.svgPos.y-e.screenCoordLong2Doc(s.txtPos.y));let h=void 0;s.color&&(h=t.getColor(),t.setColor(s.color));let x=s.txtHeight;l.fixedSize&&(x=e.screenCoordLong2Doc(s.txtHeight)),t.setXData({type:"text",txt:s.txt,index:i});let c=t.drawText(s.txt,x,0,n,void 0,t=>{let e="";return e=s.fontStyle.length>0?`${s.fontStyle} ${t}px Arial`:`normal ${t}px Arial`});if(t.getType()==McGiWorldDrawType.kWorldDraw&&(s._txtObject=c),s.underline&&s._txtObject){const e=new THREE.Box3;e.expandByObject(s._txtObject);let i=new THREE.Vector3(e.min.x,e.min.y+.1*x,0),n=new THREE.Vector3(e.max.x,e.min.y+.1*x,0);var o=new THREE.Geometry;let g=new THREE.LineBasicMaterial({color:t.getColor(),transparent:!0,depthTest:!1});o.vertices.push(i,n);var r=new THREE.Line(o,g);t.drawEntity(r),t.getType()==McGiWorldDrawType.kWorldDraw&&(s._underLine=r)}if(s._txtAspectRatio=-1,h&&t.setColor(h),s.drawConnectingLine){let e=g.clone().sub(n);if(e.length()>x+a){e.normalize();let i=g.clone().sub(e.clone().multiplyScalar(a)),l=n.clone().add(e.clone().multiplyScalar(x));o=new THREE.Geometry;let h=new THREE.LineBasicMaterial({color:t.getColor(),transparent:!0,depthTest:!1});o.vertices.push(i,l);r=new THREE.Line(o,h);t.setXData({type:"line"}),t.drawEntity(r),t.getType()==McGiWorldDrawType.kWorldDraw&&(s._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 s=this,i=t.getMxObject();MxThreeJS.loadSVG(this.svgPath,void 0,o=>{if(o){let r=o;if(r.boxSize)s.svgBoxSize=r.boxSize.clone();else{let t=(new THREE.Box3).setFromObject(o);s.svgBoxSize||(s.svgBoxSize=new THREE.Vector3),s.svgBoxSize.x=t.max.x-t.min.x,s.svgBoxSize.y=t.max.y-t.min.y}let[n,g]=s.calcVewSize(e);s.svgBoxSize&&(o.scale.x=n/s.svgBoxSize.x,o.scale.y=g/s.svgBoxSize.y),o.scale.z=o.scale.x,s.svgReverse&&(o.scale.y*=-1),s.svgMirror&&(o.scale.x*=-1),o.rotateZ(s.svgRotate),s.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,s.useSvgColor||(l<s.svgChildColor.length?t.material.color=new THREE.Color(s.svgChildColor[l]):t.material.color=a),l++)}),s.svg=o,s.setNeedUpdateDisplay(),i.updateDisplay()}else console.log("mx LoadSVG:"+s.svgPath+" failed");s.isLoadFromPath=!1})}this.fixedSize||(t.drawSelectLine(i,o),t.drawSelectLine(r,n),t.drawSelectLine(i,r),t.drawSelectLine(r,o),t.drawSelectLine(o,n),t.drawSelectLine(n,i))}else t.drawLine(i,r),t.drawLine(r,o),t.drawLine(o,n),t.drawLine(n,i)}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 s=this.aryText[e];if(s.move){let e=new THREE.Vector3(s.txtPos.x,s.txtPos.y,0);if(this.fixedSize){let t=MxFun.getCurrentDraw();s.txtPos.x>0?e.x=this.svgPos.x+t.screenCoordLong2Doc(s.txtPos.x):e.x=this.svgPos.x-t.screenCoordLong2Doc(s.txtPos.x),s.txtPos.y>0?e.y=this.svgPos.y+t.screenCoordLong2Doc(s.txtPos.y):e.y=this.svgPos.y-t.screenCoordLong2Doc(s.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 s=this.aryText[t-1];if(s.move)if(this.fixedSize){let t=MxFun.getCurrentDraw();s.txtPos.x+=t.docCoordLong2Screen(e.x),s.txtPos.y+=t.docCoordLong2Screen(e.y)}else s.txtPos.add(e)}return this.isSvgDirtyLocation=!0,!0}calcSvgPosition(t){if(!this.svg||!this.isSvgDirtyLocation)return;this.isSvgDirtyLocation=!1;let[e,s]=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-s*this.svgAlignmentRatio.y-this.svgMargin.y*s}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){return this.onDwgOut(t),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=[],this.aryText.forEach(e=>{let s={txtPos:e.txtPos,txt:e.txt,txtHeight:e.txtHeight,color:e.color,_txtAspectRatio:e._txtAspectRatio,move:e.move,drawConnectingLine:e.drawConnectingLine};t.txts.push(s)}),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}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,s]=this.calcVewSize(t);this.svgBoxSize&&(this.svg.scale.x=e/this.svgBoxSize.x,this.svg.scale.y=s/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,s]=this.calcVewSize(t);this.svgBoxSize&&(this.svg.scale.x=e/this.svgBoxSize.x,this.svg.scale.y=s/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),s=e.cenpt,i=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 s=e._txtObject.parent;e._txtObject.parent=null,t.expandByObject(e._txtObject),e._txtObject.parent=s;let i=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(i,o),e._underLine.geometry=r}if(e._connectingLine){let t=s.clone().sub(g);t.normalize();let o=s.clone().sub(t.clone().multiplyScalar(i)),a=g.clone().add(t.clone().multiplyScalar(n));var r;(r=new THREE.Geometry).vertices.push(o,a),e._connectingLine.geometry=r}}}}),!0}};
1
+ var __awaiter=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))(function(o,r){function n(t){try{l(s.next(t))}catch(t){r(t)}}function g(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(n,g)}l((s=s.apply(t,e||[])).next())})};import McGiWorldDrawType from"../McGiWorldDrawType";import MxDbEntity from"../MxDbEntity";import MxDbSVGText from"../MxDbSVGText";import MxFun from"../MxFun";import MxThreeJS from"../MxThreeJS";import MxType from"../MxType";export default 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),l=new THREE.Vector3(e,0,0),a=new THREE.Vector3(e,i,0),h=new THREE.Vector3(0,i,0);return g.applyMatrix4(o),l.applyMatrix4(o),a.applyMatrix4(o),h.applyMatrix4(o),{pt1:g,pt2:a,pt3:l,pt4:h,cenpt:a.clone().add(g.clone().sub(a).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,l=i.sizew,a=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 h=void 0;i.color&&(h=t.getColor(),t.setColor(i.color));let c=i.txtHeight;a.fixedSize&&(c=e.screenCoordLong2Doc(i.txtHeight)),t.setXData({type:"text",txt:i.txt,index:s});let x=t.drawText(i.txt,c,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=x),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*c,0),n=new THREE.Vector3(e.max.x,e.min.y+.1*c,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,h&&t.setColor(h),i.drawConnectingLine){let e=g.clone().sub(n);if(e.length()>c+l){e.normalize();let s=g.clone().sub(e.clone().multiplyScalar(l)),a=n.clone().add(e.clone().multiplyScalar(c));o=new THREE.Geometry;let h=new THREE.LineBasicMaterial({color:t.getColor(),transparent:!0,depthTest:!1});o.vertices.push(s,a);r=new THREE.Line(o,h);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 l=new THREE.Color(t.getColor()),a=0;o.traverse(function(t){t.material&&(t.material=t.material.clone(),t.material.transparent=!0,t.material.depthTest=!1,i.useSvgColor||(a<i.svgChildColor.length?t.material.color=new THREE.Color(i.svgChildColor[a]):t.material.color=l),a++)}),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)),l=g.clone().add(t.clone().multiplyScalar(n));var r;(r=new THREE.Geometry).vertices.push(o,l),e._connectingLine.geometry=r}}}}),!0}};
@@ -1,13 +1,17 @@
1
1
  import McGiWorldDraw from "../McGiWorldDraw";
2
2
  import MxDbEntity from "../MxDbEntity";
3
+ import MxFilters from "../MxFilters";
3
4
  import { UnstableColor } from "../MxType";
4
5
  /** 动态绘制形状
5
- * 基于THREE.Shape计算实现的2d形状 通过extrude3dConfig 配置可挤压缓冲为3d形状
6
+ * 基于THREE.Shape计算实现的形状
7
+ * 通过扩展可以实现各种2d 3d形状
6
8
  * **/
7
9
  export default class MxDbShape extends MxDbEntity {
8
10
  protected _paths: THREE.CurvePath<THREE.Vector3 | THREE.Vector2>;
9
11
  protected points: THREE.Vector3[];
10
12
  protected closedLine: THREE.Curve<THREE.Vector3>;
13
+ protected isLoadMaterialFromPath: boolean;
14
+ protected material: THREE.MeshLambertMaterial | null;
11
15
  /** 描边颜色 */
12
16
  stroke: UnstableColor;
13
17
  setStroke(stroke: UnstableColor): this;
@@ -20,12 +24,28 @@ export default class MxDbShape extends MxDbEntity {
20
24
  /** 填充 */
21
25
  isFill: boolean;
22
26
  setIsFill(isFill: boolean): this;
27
+ /** 填充图片路径 */
28
+ fillImageSrc?: string;
29
+ setFillImageSrc(fillImageSrc: string): this;
30
+ /**
31
+ * fillImageParam 填充背景图片的参数设置(如果使用了滤镜则部分参数功能失效)
32
+ * */
33
+ fillImageParam: {
34
+ offset?: THREE.Vector2;
35
+ repeat?: THREE.Vector2;
36
+ rotation?: number;
37
+ center?: THREE.Vector2;
38
+ } | undefined;
23
39
  /** 线段细分数值 */
24
40
  curveSegments: number;
25
41
  setCurveSegments(curveSegments: number): this;
26
42
  /** 闭合 */
27
43
  closed: boolean;
28
44
  setClosed(closed: boolean): this;
45
+ /**
46
+ * 设置滤镜对象{@link MxFilters} 默认为undefined | null 则不使用该滤镜效果
47
+ * */
48
+ filter: MxFilters | undefined | null;
29
49
  /** 圆角半径 (一个向量点对应一个角的半径值)*/
30
50
  cornerRadius: number[] | number;
31
51
  /**
@@ -48,13 +68,13 @@ export default class MxDbShape extends MxDbEntity {
48
68
  _drawStoreLine(pWorldDraw: McGiWorldDraw, points: THREE.Vector3[], draw?: (pWorldDraw: McGiWorldDraw) => void): void;
49
69
  /** 获取线段闭合后的曲线点数 */
50
70
  getClosedPoints(points: THREE.Vector3[]): import("three").Vector3[];
51
- /** 获取闭合线段 */
52
- getClosedLine(points: THREE.Vector3[]): THREE.Curve<THREE.Vector3>;
53
71
  /** 获取长度 */
54
72
  getTotalLength(): number;
55
73
  /** 获取面积 */
56
74
  getArea(): number;
57
75
  worldDraw(pWorldDraw: McGiWorldDraw): void;
76
+ /** 图片填充 */
77
+ _fillImg(pWorldDraw: McGiWorldDraw, points: THREE.Vector3[]): void;
58
78
  getGripPoints(): THREE.Vector3[];
59
79
  moveGripPointsAt(index: number, offset: THREE.Vector3): boolean;
60
80
  dwgIn(obj: any): boolean;
@@ -1 +1 @@
1
- import{getToGenerateRoundedCorners}from"../../tools/three";import McGeTool from"../McGeTool";import MxDbEntity from"../MxDbEntity";import MxFun from"../MxFun";export default class MxDbShape extends MxDbEntity{constructor(){super(...arguments),this.strokeLineWidth=2,this.isStrokeDashLine=!1,this.isFill=!1,this.curveSegments=50,this.closed=!0,this.cornerRadius=[],this._propertyDbKeys=["isFill","stroke","strokeLineWidth","isStrokeDashLine","closed","cornerRadius"]}setStroke(t){return this.stroke=t,this}setStrokeLineWidth(t){return this.strokeLineWidth=t,this}setIsStrokeDashLine(t){return this.isStrokeDashLine=t,this}setIsFill(t){return this.isFill=t,this}setCurveSegments(t){return this.curveSegments=t,this}setClosed(t){return this.closed=t,this}setCornerRadius(t,e=!0){t instanceof Array?this.cornerRadius=t.map(t=>e?MxFun.screenCoordLong2Doc(t):t):this.cornerRadius=e?MxFun.screenCoordLong2Doc(t):t}getTypeName(){return"MxDbShape"}getShapePoints(t){const{curveSegments:e}=this;return this.points=t.getPoints(e).map(t=>t instanceof THREE.Vector2?new THREE.Vector3(t.x,t.y,0):t),this.points}createPaths(t){return this._paths=new THREE.CurvePath,Array.isArray(t)?t.forEach(t=>this._paths.add(t)):this._paths.add(t),this._paths}_draw(t,e){const s=t.getColor(),{isFill:i,closed:r}=this;t.setColor(this.color);const o=r?this.getClosedPoints(e):e;i?t.drawSolid(o):t.drawLines(o),t.setColor(s)}getCornerRadiusPoints(t){const{cornerRadius:e}=this;if(!e)return t;const s="number"==typeof e?t.map(()=>e):e;return s.length>0?getToGenerateRoundedCorners(t,s):t}_drawStoreLine(t,e,s){const{isFill:i,stroke:r,strokeLineWidth:o}=this,n=t.getLineWidth(),h=t.getColor(),a=t.isDashLineDisplay();r&&i&&(t.setDashLineDisplay(this.isStrokeDashLine),t.setColor(r),t.setLineWidth(o),s?s(t):t.drawLines(this.getClosedPoints(e)),t.setColor(h),t.setLineWidth(n),t.setDashLineDisplay(a))}getClosedPoints(t){let e=(this._paths||new THREE.CatmullRomCurve3(t,!1,"catmullrom",0)).getLength();this.closedLine=this.getClosedLine(t);const s=this.closedLine.getLength();let i=this.curveSegments/e,r=2.5*(e>this.curveSegments?s*i:1);if(r>20*this.curveSegments&&(r=20*this.curveSegments),r<=0)return t;const o=this.closedLine.getPoints(r);return[...t,...o]}getClosedLine(t){return new THREE.LineCurve3(t[t.length-1],t[0])}getTotalLength(){return this._paths?this._paths.getLength()+(this.closedLine?this.closedLine.getLength():0):0}getArea(){return this.points?McGeTool.calcArea(this.closed?this.getClosedPoints(this.points):this.points):0}worldDraw(t){const e=this.createPaths(new THREE.Curve),s=this.getShapePoints(e);this._draw(t,s),this._drawStoreLine(t,s)}getGripPoints(){return[]}moveGripPointsAt(t,e){return!0}dwgIn(t){return this.dwgInHelp(t,this._propertyDbKeys),!0}dwgOut(t){return this.dwgOutHelp(t,this._propertyDbKeys),t}};
1
+ import{getToGenerateRoundedCorners,repairGeometryFaceVertexUvs}from"../../tools/three";import McGeTool from"../McGeTool";import MxDbEntity from"../MxDbEntity";import MxFilters from"../MxFilters";import MxFun from"../MxFun";import MxType from"../MxType";export default class MxDbShape extends MxDbEntity{constructor(){super(...arguments),this.isLoadMaterialFromPath=!0,this.strokeLineWidth=2,this.isStrokeDashLine=!1,this.isFill=!1,this.curveSegments=50,this.closed=!0,this.cornerRadius=[],this._propertyDbKeys=["isFill","stroke","strokeLineWidth","isStrokeDashLine","closed","cornerRadius","fillImageSrc","fillImageParam"]}setStroke(t){return this.stroke=t,this}setStrokeLineWidth(t){return this.strokeLineWidth=t,this}setIsStrokeDashLine(t){return this.isStrokeDashLine=t,this}setIsFill(t){return this.isFill=t,this}setFillImageSrc(t){return this.fillImageSrc=t,this}setCurveSegments(t){return this.curveSegments=t,this}setClosed(t){return this.closed=t,this}setCornerRadius(t,e=!0){t instanceof Array?this.cornerRadius=t.map(t=>e?MxFun.screenCoordLong2Doc(t):t):this.cornerRadius=e?MxFun.screenCoordLong2Doc(t):t}getTypeName(){return"MxDbShape"}getShapePoints(t){const{curveSegments:e}=this;return this.points=t.getPoints(e).map(t=>t instanceof THREE.Vector2?new THREE.Vector3(t.x,t.y,0):t),this.points}createPaths(t){return this._paths=new THREE.CurvePath,Array.isArray(t)?t.forEach(t=>this._paths.add(t)):this._paths.add(t),this._paths}_draw(t,e){const i=t.getColor(),{isFill:s,closed:r}=this;t.setColor(this.filter?this.filter._getFilterColor(this.color,this.opacity):this.color);const o=this.getCornerRadiusPoints(r?this.getClosedPoints(e):e);s?!this.fillImageSrc&&t.drawSolid(o):t.drawLines(o),this._fillImg(t,o),t.setColor(i)}getCornerRadiusPoints(t){const{cornerRadius:e}=this;if(!e)return t;const i="number"==typeof e?t.map(()=>e):e;return i.length>0?getToGenerateRoundedCorners(t,i):t}_drawStoreLine(t,e,i){const{isFill:s,stroke:r,strokeLineWidth:o}=this,a=t.getLineWidth(),n=t.getColor(),h=t.isDashLineDisplay();r&&s&&(t.setDashLineDisplay(this.isStrokeDashLine),t.setColor(r),t.setLineWidth(o),i?i(t):t.drawLines(this.getCornerRadiusPoints(this.getClosedPoints(e))),t.setColor(n),t.setLineWidth(a),t.setDashLineDisplay(h))}getClosedPoints(t){return[...t,t[0]]}getTotalLength(){return this._paths?this._paths.getLength()+(this.closedLine?this.closedLine.getLength():0):0}getArea(){return this.points?McGeTool.calcArea(this.closed?this.getClosedPoints(this.points):this.points):0}worldDraw(t){const e=this.createPaths(new THREE.Curve),i=this.getShapePoints(e);this._draw(t,i),this._drawStoreLine(t,i)}_fillImg(t,e){const i={transparent:!0,depthTest:!1,opacity:this.opacity,visible:this.visible};if(!this.isFill||!this.fillImageSrc)return;if(!this.material){let t=this;return void MxFun.loadImageMaterial(this.fillImageSrc,e=>{t.isLoadMaterialFromPath=!1,e&&(t.material=e,t.setNeedUpdateDisplay(),MxFun.updateDisplay())})}const s=e.map(({x:t,y:e})=>new THREE.Vector2(t,e));let r=this.material,o=new THREE.ShapeGeometry(new THREE.Shape(s));if(o=repairGeometryFaceVertexUvs(o),this.filter){const t=r.map,e=this.filter._getFilterShaderData(t);r=new THREE.ShaderMaterial(Object.assign(Object.assign({},e),i))}if(r.depthTest=!1,r.transparent=!0,r.opacity=this.opacity,r.visible=this.visible,this.fillImageParam){const t=this.fillImageParam;for(let e in this.fillImageParam){this.material.map[e]=t[e]}}let a=new THREE.Mesh(o,r);t.drawEntity(a)}getGripPoints(){return[]}moveGripPointsAt(t,e){return!0}dwgIn(t){return this.dwgInHelp(t,this._propertyDbKeys),this.isLoadMaterialFromPath=!0,this.material=null,t.type===MxType.MxCloneType.kMxFileClone?this.filter=MxFilters.fromJSON(t.filter):t.filter&&(this.filter=t.filter),!0}dwgOut(t){var e;return this.dwgOutHelp(t,this._propertyDbKeys),t.type===MxType.MxCloneType.kMxFileClone?this.filter&&(t.filter=null===(e=this.filter)||void 0===e?void 0:e.toJSON()):t.filter=this.filter,t}};
@@ -1,8 +1,8 @@
1
1
  import McGiWorldDraw from "../McGiWorldDraw";
2
2
  import MxDbShape from "../MxDbShape";
3
- /** 星形 */
4
3
  export default class MxDbStarShape extends MxDbShape {
5
4
  getTypeName(): string;
5
+ /** 星形 */
6
6
  constructor();
7
7
  center: import("three").Vector3;
8
8
  numPoints: number;
@@ -28,7 +28,7 @@ declare class SpriteText extends THREE.Sprite {
28
28
  underline: boolean;
29
29
  fontStyle: TextFontStyle;
30
30
  fontVariant: string;
31
- private _genCanvas;
31
+ _genCanvas(): void;
32
32
  dispose(): void;
33
33
  }
34
34
  export interface SpriteTextOptions {
@@ -848,7 +848,7 @@ export default class MxDrawObject {
848
848
  */
849
849
  isMxCAD(): boolean;
850
850
  /**
851
- * 得到实执行的内部MxObject对象.
851
+ * 得执行的内部MxObject对象.
852
852
  * @example
853
853
  * ```typescript
854
854
  *
@@ -865,4 +865,13 @@ export default class MxDrawObject {
865
865
  * ```
866
866
  */
867
867
  getAllLayoutName(): string[];
868
+ /**
869
+ * 得到数据库Json字符串数据.
870
+ * @example
871
+ * ```typescript
872
+ *
873
+ *
874
+ * ```
875
+ */
876
+ getDtabaseJsonString(): string;
868
877
  }
@@ -1 +1 @@
1
- var __awaiter=this&&this.__awaiter||function(e,r,t,o){return new(t||(t=Promise))(function(n,a){function d(e){try{s(o.next(e))}catch(e){a(e)}}function i(e){try{s(o.throw(e))}catch(e){a(e)}}function s(e){var r;e.done?n(e.value):(r=e.value,r instanceof t?r:new t(function(e){e(r)})).then(d,i)}s((o=o.apply(e,r||[])).next())})};import MxCADObject from"../MxCADObject";import MxDbDatabase from"../MxDbDatabase";import MxThreeJS from"../MxThreeJS";export default class MxDrawObject{constructor(e){this._mxdrawObj=e}getScene(){return this._mxdrawObj.getScene()}getCamera(){return this._mxdrawObj.getCamera()}getRenderer(){return this._mxdrawObj.renderer}setMouseRightRotate(e=!0){return this._mxdrawObj.setMouseRightRotate(e)}getFullDisplayRange(){return this._mxdrawObj.getFullDisplayRange()}getCanvas(){return this._mxdrawObj.getCanvas()}updateDisplay(){return this._mxdrawObj.updateDisplay()}createCanvasImageData(e,r){return this._mxdrawObj.createCanvasImageData(e,r)}setViewColor(e){return this._mxdrawObj.setViewColor(e)}setSize(e,r){return this._mxdrawObj.setSize(e,r)}getIntersectObjects(e){return this._mxdrawObj.getIntersectObjects(e)}addObject(e,r=!0){return this._mxdrawObj.addObject(e,r)}addViewObject(e){return this._mxdrawObj.addViewObject(e)}getViewWidth(){return this._mxdrawObj.getViewWidth()}getViewHeight(){return this._mxdrawObj.getViewHeight()}removeObject(e,r=!0){return this._mxdrawObj.removeObject(e,r)}zoomInitialStates(){return this._mxdrawObj.zoomInitialStates()}zoomScale(e){return this._mxdrawObj.zoomScale(e)}zoomW(e,r,t){return this._mxdrawObj.zoomW(e,r,t)}zoomCenter(e,r){return this._mxdrawObj.zoomCenter(e,r)}initZoomW(e,r){return this._mxdrawObj.initZoomW(e,r)}addEvent(e,r){return this._mxdrawObj.addEvent(e,r)}on(e,r){return this._mxdrawObj.addEvent(e,r)}setIniset(e){return this._mxdrawObj.setIniset(e)}screenCoord2World(e,r,t){return this._mxdrawObj.screenCoord2World(e,r,t)}worldCoord2Screen(e,r,t){return this._mxdrawObj.worldCoord2Screen(e,r,t)}screenCoord2Doc(e,r){return this._mxdrawObj.screenCoord2Doc(e,r,0)}worldCoordLong2Doc(e){return this._mxdrawObj.worldCoordLong2Doc(e)}docCoordLong2World(e){return this._mxdrawObj.docCoordLong2World(e)}docCoord2World(e,r,t){return this._mxdrawObj.docCoord2World(e,r,t)}docCoord2World2(e){return this._mxdrawObj.docCoord2World(e.x,e.y,e.z)}worldCoord2Doc(e,r,t){return this._mxdrawObj.worldCoord2Doc(e,r,t)}worldCoord2Doc2(e){return this._mxdrawObj.worldCoord2Doc(e.x,e.y,e.z)}docCoord2Screen(e,r){return this._mxdrawObj.docCoord2Screen(e,r,0)}screenCoordLong2Doc(e){return this._mxdrawObj.screenCoordLong2Doc(e)}docCoordLong2Screen(e){return this._mxdrawObj.docCoordLong2Screen(e)}screenCoordLong2World(e){return this._mxdrawObj.screenCoordLong2World(e)}worldCoordLong2Screen(e){return this._mxdrawObj.worldCoordLong2Screen(e)}initRendererParam(e){return this._mxdrawObj.initRendererParam(e)}addMxEntity(e){return this._mxdrawObj.addMxEntity(e)}getMxCurrentSelect(){let e=this._mxdrawObj.getMxAllSelect();return 0==e.length&&(e=this._mxdrawObj.getPrvCommandSelect()),e}addMxCurrentSelect(e){return this._mxdrawObj.addMxCurrentSelect(e)}clearMxCurrentSelect(){return this._mxdrawObj.clearMxCurrentSelect()}getMxEntity(e){return this._mxdrawObj.getMxEntityUserObject(e)}findMxEntityAtPoint(e,r,t){return this._mxdrawObj.findMxEntityAtPoint(e,r,t)}getAllMxEntity(){return this._mxdrawObj.getAllMxEntity()}setMouseMiddlePan(e){return this._mxdrawObj.setMouseMiddlePan(e)}resetThreeJSControls(){return this._mxdrawObj.resetThreeJSControls()}enableZoom(e){return this._mxdrawObj.enableZoom(e)}enablePan(e){return this._mxdrawObj.enablePan(e)}eraseMxEntity(e){return this._mxdrawObj.eraseMxEntity(e)}removeViewObject(e){this._mxdrawObj.removeViewObject(e)}saveMxEntityToJson(e){return JSON.stringify(this._mxdrawObj.saveMxEntityToJson(e))}saveMxEntityToObject(e){return this._mxdrawObj.saveMxEntityToJson(e)}loadMxEntityFromJson(e,r=null){return __awaiter(this,void 0,void 0,function*(){if(r){let e=r.length;for(let t=0;t<e;t++)yield MxThreeJS.loadSVG(r[t])}return this.getAllMxEntity().forEach(e=>{for(let r in e)Reflect.deleteProperty(e,r)}),"string"==typeof e?this._mxdrawObj.loadMxEntityFromJson(JSON.parse(e)):this._mxdrawObj.loadMxEntityFromJson(e)})}eraseAllMxEntity(){return this._mxdrawObj.eraseAllMxEntity()}makeCurrent(){this._mxdrawObj.makeCurrent()}getViewCenterDocCoord(){return this._mxdrawObj.getViewCenterDocCoord()}updateCanvasSize(){this._mxdrawObj.updateCanvasSize()}newFile(e,r,t,o){return this._mxdrawObj.newFile(e,r,t,o)}stopAllLoading(){this._mxdrawObj.stopAllLoading()}getOrbitControls(){return this._mxdrawObj.getOrbitControls()}enableViewControls(e){return this._mxdrawObj.enableViewControls(e)}getMxDatabase(){return new MxDbDatabase(this._mxdrawObj.getMxDatabase())}setZoomSpeed(e){return this._mxdrawObj.setZoomSpeed(e)}getMxCAD(){let e=this._mxdrawObj.getMxCAD();return new MxCADObject(e)}resetRenderer(){return this._mxdrawObj.resetRenderer()}setRequestHeader(e){return this._mxdrawObj.setRequestHeader(e)}closeWebSocket(){return this._mxdrawObj.closeWebSocket()}cadCoord2Doc(e,r,t){return this._mxdrawObj.cadCoord2Doc(e,r,t)}docCoord2Cad(e,r,t){return this._mxdrawObj.docCoord2Cad(e,r,t)}setViewAngle(e){return this._mxdrawObj.setViewAngle(e)}getViewAngle(){return this._mxdrawObj.getViewAngle()}getSysVar(e){return this._mxdrawObj.sysVariable().getSysVar()}setSysVar(e,r){return this._mxdrawObj.sysVariable().setSysVar(e,r)}isMxCAD(){return this._mxdrawObj.isMxCAD()}getMxObjectImplement(){return this._mxdrawObj}getAllLayoutName(){return this._mxdrawObj.getAllLayoutName()}};
1
+ var __awaiter=this&&this.__awaiter||function(e,r,t,o){return new(t||(t=Promise))(function(n,a){function d(e){try{s(o.next(e))}catch(e){a(e)}}function i(e){try{s(o.throw(e))}catch(e){a(e)}}function s(e){var r;e.done?n(e.value):(r=e.value,r instanceof t?r:new t(function(e){e(r)})).then(d,i)}s((o=o.apply(e,r||[])).next())})};import MxCADObject from"../MxCADObject";import MxDbDatabase from"../MxDbDatabase";import MxThreeJS from"../MxThreeJS";export default class MxDrawObject{constructor(e){this._mxdrawObj=e}getScene(){return this._mxdrawObj.getScene()}getCamera(){return this._mxdrawObj.getCamera()}getRenderer(){return this._mxdrawObj.renderer}setMouseRightRotate(e=!0){return this._mxdrawObj.setMouseRightRotate(e)}getFullDisplayRange(){return this._mxdrawObj.getFullDisplayRange()}getCanvas(){return this._mxdrawObj.getCanvas()}updateDisplay(){return this._mxdrawObj.updateDisplay()}createCanvasImageData(e,r){return this._mxdrawObj.createCanvasImageData(e,r)}setViewColor(e){return this._mxdrawObj.setViewColor(e)}setSize(e,r){return this._mxdrawObj.setSize(e,r)}getIntersectObjects(e){return this._mxdrawObj.getIntersectObjects(e)}addObject(e,r=!0){return this._mxdrawObj.addObject(e,r)}addViewObject(e){return this._mxdrawObj.addViewObject(e)}getViewWidth(){return this._mxdrawObj.getViewWidth()}getViewHeight(){return this._mxdrawObj.getViewHeight()}removeObject(e,r=!0){return this._mxdrawObj.removeObject(e,r)}zoomInitialStates(){return this._mxdrawObj.zoomInitialStates()}zoomScale(e){return this._mxdrawObj.zoomScale(e)}zoomW(e,r,t){return this._mxdrawObj.zoomW(e,r,t)}zoomCenter(e,r){return this._mxdrawObj.zoomCenter(e,r)}initZoomW(e,r){return this._mxdrawObj.initZoomW(e,r)}addEvent(e,r){return this._mxdrawObj.addEvent(e,r)}on(e,r){return this._mxdrawObj.addEvent(e,r)}setIniset(e){return this._mxdrawObj.setIniset(e)}screenCoord2World(e,r,t){return this._mxdrawObj.screenCoord2World(e,r,t)}worldCoord2Screen(e,r,t){return this._mxdrawObj.worldCoord2Screen(e,r,t)}screenCoord2Doc(e,r){return this._mxdrawObj.screenCoord2Doc(e,r,0)}worldCoordLong2Doc(e){return this._mxdrawObj.worldCoordLong2Doc(e)}docCoordLong2World(e){return this._mxdrawObj.docCoordLong2World(e)}docCoord2World(e,r,t){return this._mxdrawObj.docCoord2World(e,r,t)}docCoord2World2(e){return this._mxdrawObj.docCoord2World(e.x,e.y,e.z)}worldCoord2Doc(e,r,t){return this._mxdrawObj.worldCoord2Doc(e,r,t)}worldCoord2Doc2(e){return this._mxdrawObj.worldCoord2Doc(e.x,e.y,e.z)}docCoord2Screen(e,r){return this._mxdrawObj.docCoord2Screen(e,r,0)}screenCoordLong2Doc(e){return this._mxdrawObj.screenCoordLong2Doc(e)}docCoordLong2Screen(e){return this._mxdrawObj.docCoordLong2Screen(e)}screenCoordLong2World(e){return this._mxdrawObj.screenCoordLong2World(e)}worldCoordLong2Screen(e){return this._mxdrawObj.worldCoordLong2Screen(e)}initRendererParam(e){return this._mxdrawObj.initRendererParam(e)}addMxEntity(e){return this._mxdrawObj.addMxEntity(e)}getMxCurrentSelect(){let e=this._mxdrawObj.getMxAllSelect();return 0==e.length&&(e=this._mxdrawObj.getPrvCommandSelect()),e}addMxCurrentSelect(e){return this._mxdrawObj.addMxCurrentSelect(e)}clearMxCurrentSelect(){return this._mxdrawObj.clearMxCurrentSelect()}getMxEntity(e){return this._mxdrawObj.getMxEntityUserObject(e)}findMxEntityAtPoint(e,r,t){return this._mxdrawObj.findMxEntityAtPoint(e,r,t)}getAllMxEntity(){return this._mxdrawObj.getAllMxEntity()}setMouseMiddlePan(e){return this._mxdrawObj.setMouseMiddlePan(e)}resetThreeJSControls(){return this._mxdrawObj.resetThreeJSControls()}enableZoom(e){return this._mxdrawObj.enableZoom(e)}enablePan(e){return this._mxdrawObj.enablePan(e)}eraseMxEntity(e){return this._mxdrawObj.eraseMxEntity(e)}removeViewObject(e){this._mxdrawObj.removeViewObject(e)}saveMxEntityToJson(e){return JSON.stringify(this._mxdrawObj.saveMxEntityToJson(e))}saveMxEntityToObject(e){return this._mxdrawObj.saveMxEntityToJson(e)}loadMxEntityFromJson(e,r=null){return __awaiter(this,void 0,void 0,function*(){if(r){let e=r.length;for(let t=0;t<e;t++)yield MxThreeJS.loadSVG(r[t])}return this.getAllMxEntity().forEach(e=>{for(let r in e)Reflect.deleteProperty(e,r)}),"string"==typeof e?this._mxdrawObj.loadMxEntityFromJson(JSON.parse(e)):this._mxdrawObj.loadMxEntityFromJson(e)})}eraseAllMxEntity(){return this._mxdrawObj.eraseAllMxEntity()}makeCurrent(){this._mxdrawObj.makeCurrent()}getViewCenterDocCoord(){return this._mxdrawObj.getViewCenterDocCoord()}updateCanvasSize(){this._mxdrawObj.updateCanvasSize()}newFile(e,r,t,o){return this._mxdrawObj.newFile(e,r,t,o)}stopAllLoading(){this._mxdrawObj.stopAllLoading()}getOrbitControls(){return this._mxdrawObj.getOrbitControls()}enableViewControls(e){return this._mxdrawObj.enableViewControls(e)}getMxDatabase(){return new MxDbDatabase(this._mxdrawObj.getMxDatabase())}setZoomSpeed(e){return this._mxdrawObj.setZoomSpeed(e)}getMxCAD(){let e=this._mxdrawObj.getMxCAD();return new MxCADObject(e)}resetRenderer(){return this._mxdrawObj.resetRenderer()}setRequestHeader(e){return this._mxdrawObj.setRequestHeader(e)}closeWebSocket(){return this._mxdrawObj.closeWebSocket()}cadCoord2Doc(e,r,t){return this._mxdrawObj.cadCoord2Doc(e,r,t)}docCoord2Cad(e,r,t){return this._mxdrawObj.docCoord2Cad(e,r,t)}setViewAngle(e){return this._mxdrawObj.setViewAngle(e)}getViewAngle(){return this._mxdrawObj.getViewAngle()}getSysVar(e){return this._mxdrawObj.sysVariable().getSysVar()}setSysVar(e,r){return this._mxdrawObj.sysVariable().setSysVar(e,r)}isMxCAD(){return this._mxdrawObj.isMxCAD()}getMxObjectImplement(){return this._mxdrawObj}getAllLayoutName(){return this._mxdrawObj.getAllLayoutName()}getDtabaseJsonString(){return this._mxdrawObj.getDtabaseJsonString()}};
@@ -89,5 +89,9 @@ export default class MxFilters {
89
89
  fragmentShader: string;
90
90
  };
91
91
  _getFilterColor(color?: string | number | THREE.Color, opacity?: number): import("three").Color;
92
+ /** 转成JSON字符串 */
93
+ toJSON(): string;
94
+ /** 还原序列化的数据 */
95
+ static fromJSON(json: string): MxFilters;
92
96
  }
93
97
  export {};
@@ -1 +1 @@
1
- export default class MxFilters{constructor(){this.uniformObj={},this.filtersStr="",this.filtersTypes="",this.VSHADER_SOURCE="\n varying vec2 v_Uv; \n void main () {\n v_Uv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n ",this.FSHADER_SOURCE=`\n varying vec2 v_Uv;\n uniform sampler2D e_Texture;\n uniform mat4 colorMatrix;\n ${this.filtersStr}\n void main () {\n vec4 color = texture2D( e_Texture, v_Uv );\n color = color * colorMatrix;\n ${this.filtersTypes}\n gl_FragColor = color;\n }`,this._matrix=new THREE.Matrix4}channel({r:t=1,g:i=1,b:r=1}){return this._matrix=(new THREE.Matrix4).set(t,0,0,0,0,i,0,0,0,0,r,0,0,0,0,1).multiply(this._matrix),this}brightness(t){return this._matrix=(new THREE.Matrix4).set(t,0,0,0,0,t,0,0,0,0,t,0,0,0,0,1).multiply(this._matrix),this}saturate(t){const i=.2126*(1-t),r=.7152*(1-t),e=.0722*(1-t);return this._matrix=(new THREE.Matrix4).set(i+t,r,e,0,i,r+t,e,0,i,r,e+t,0,0,0,0,1).multiply(this._matrix),this}contrast(t){const i=.5*(1-t);return this._matrix=(new THREE.Matrix4).set(t,0,0,0,0,t,0,0,0,0,t,0,i,i,i,1).multiply(this._matrix),this}opacity(t){return this._matrix=(new THREE.Matrix4).set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,t).multiply(this._matrix),this}invert(t){const i=1-2*t;return this._matrix=(new THREE.Matrix4).set(i,0,0,0,0,i,0,0,0,0,i,0,t,t,t,1).multiply(this._matrix),this}grayscale(t=1){const i=.2126*t,r=.7152*t,e=.0722*t;return this._matrix=(new THREE.Matrix4).set(i+1-t,r,e,0,i,r+1-t,e,0,i,r,e+1-t,0,0,0,0,1).multiply(this._matrix),this}sepia(t=1){return this._matrix=(new THREE.Matrix4).set(1-.607*t,.769*t,.189*t,0,.349*t,1-.314*t,.168*t,0,.272*t,.534*t,1-.869*t,0,0,0,0,1).multiply(this._matrix),this}hueRotate(t){const i=t/180*Math.PI,r=Math.cos(i),e=Math.sin(i);return this._matrix=(new THREE.Matrix4).set(.2126+.7874*r+-.2126*e,.7152+-.7152*r+-.7152*e,.0722+-.0722*r+.9278*e,0,.2126+-.2126*r+.143*e,.7152+r*(1-.7152)+.14*e,.0722+-.0722*r+-.283*e,0,.2126+-.2126*r+-.7874*e,.7152+-.7152*r+.7152*e,.0722+.9278*r+.0722*e,0,0,0,0,1).multiply(this._matrix),this}convolution(t,i=1/9,r=521){return this.uniformObj=Object.assign(Object.assign({},this.uniformObj),{cKernel:{value:t.toArray()},stStep:{value:i},scaleFactor:{value:r}}),this.filtersTypes.indexOf("convolutionTextureColor")<0&&(this.filtersStr+="\n uniform float cKernel[9];\n uniform float stStep;\n uniform float scaleFactor;\n vec4 convolutionTextureColor(vec4 color) {\n vec2 offsets[9];\n offsets[0] = vec2(-1.0,-1.0);\n offsets[1] = vec2(0.0,-1.0);\n offsets[2] = vec2(1.0,-1.0);\n offsets[3] = vec2(-1.0,0.0);\n offsets[4] = vec2(0.0,0.0);\n offsets[5] = vec2(1.0,0.0);\n offsets[6] = vec2(-1.0,1.0);\n offsets[7] = vec2(0.0,1.0);\n offsets[8] = vec2(1.0,1.0);\n \n vec4 sum = color;\n for(int i = 0; i < 9; i++) {\n sum = sum + cKernel[i] * scaleFactor * texture2D(e_Texture, v_Uv + offsets[i] / stStep);\n };\n return sum;\n }",this.filtersTypes+="color = convolutionTextureColor(color);\n"),this}reset(){return this.uniformObj={},this.filtersStr="",this.filtersTypes="",this._matrix=new THREE.Matrix4,this}_getFilterShaderData(t){return{uniforms:Object.assign({e_Texture:{value:t},colorMatrix:{value:this._matrix}},this.uniformObj),vertexShader:this.VSHADER_SOURCE,fragmentShader:this.FSHADER_SOURCE}}_getFilterColor(t="#000000",i=1){t=new THREE.Color(t);let{r:r,g:e,b:s}=t;const n=this._matrix.toArray(),o=(n[12],n[13],n[14],n[15],n[0]*r+n[1]*r+n[2]*r+n[3]*i),a=n[4]*e+n[5]*e+n[6]*e+n[7]*i,l=n[8]*s+n[9]*s+n[10]*s+n[11]*i;return t.setRGB(o,a,l),t}};
1
+ export default class MxFilters{constructor(){this.uniformObj={},this.filtersStr="",this.filtersTypes="",this.VSHADER_SOURCE="\n varying vec2 v_Uv; \n void main () {\n v_Uv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n ",this.FSHADER_SOURCE=`\n varying vec2 v_Uv;\n uniform sampler2D e_Texture;\n uniform mat4 colorMatrix;\n ${this.filtersStr}\n void main () {\n vec4 color = texture2D( e_Texture, v_Uv );\n color = color * colorMatrix;\n ${this.filtersTypes}\n gl_FragColor = color;\n }`,this._matrix=new THREE.Matrix4}channel({r:t=1,g:r=1,b:i=1}){return this._matrix=(new THREE.Matrix4).set(t,0,0,0,0,r,0,0,0,0,i,0,0,0,0,1).multiply(this._matrix),this}brightness(t){return this._matrix=(new THREE.Matrix4).set(t,0,0,0,0,t,0,0,0,0,t,0,0,0,0,1).multiply(this._matrix),this}saturate(t){const r=.2126*(1-t),i=.7152*(1-t),e=.0722*(1-t);return this._matrix=(new THREE.Matrix4).set(r+t,i,e,0,r,i+t,e,0,r,i,e+t,0,0,0,0,1).multiply(this._matrix),this}contrast(t){const r=.5*(1-t);return this._matrix=(new THREE.Matrix4).set(t,0,0,0,0,t,0,0,0,0,t,0,r,r,r,1).multiply(this._matrix),this}opacity(t){return this._matrix=(new THREE.Matrix4).set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,t).multiply(this._matrix),this}invert(t){const r=1-2*t;return this._matrix=(new THREE.Matrix4).set(r,0,0,0,0,r,0,0,0,0,r,0,t,t,t,1).multiply(this._matrix),this}grayscale(t=1){const r=.2126*t,i=.7152*t,e=.0722*t;return this._matrix=(new THREE.Matrix4).set(r+1-t,i,e,0,r,i+1-t,e,0,r,i,e+1-t,0,0,0,0,1).multiply(this._matrix),this}sepia(t=1){return this._matrix=(new THREE.Matrix4).set(1-.607*t,.769*t,.189*t,0,.349*t,1-.314*t,.168*t,0,.272*t,.534*t,1-.869*t,0,0,0,0,1).multiply(this._matrix),this}hueRotate(t){const r=t/180*Math.PI,i=Math.cos(r),e=Math.sin(r);return this._matrix=(new THREE.Matrix4).set(.2126+.7874*i+-.2126*e,.7152+-.7152*i+-.7152*e,.0722+-.0722*i+.9278*e,0,.2126+-.2126*i+.143*e,.7152+i*(1-.7152)+.14*e,.0722+-.0722*i+-.283*e,0,.2126+-.2126*i+-.7874*e,.7152+-.7152*i+.7152*e,.0722+.9278*i+.0722*e,0,0,0,0,1).multiply(this._matrix),this}convolution(t,r=1/9,i=521){return this.uniformObj=Object.assign(Object.assign({},this.uniformObj),{cKernel:{value:t.toArray()},stStep:{value:r},scaleFactor:{value:i}}),this.filtersTypes.indexOf("convolutionTextureColor")<0&&(this.filtersStr+="\n uniform float cKernel[9];\n uniform float stStep;\n uniform float scaleFactor;\n vec4 convolutionTextureColor(vec4 color) {\n vec2 offsets[9];\n offsets[0] = vec2(-1.0,-1.0);\n offsets[1] = vec2(0.0,-1.0);\n offsets[2] = vec2(1.0,-1.0);\n offsets[3] = vec2(-1.0,0.0);\n offsets[4] = vec2(0.0,0.0);\n offsets[5] = vec2(1.0,0.0);\n offsets[6] = vec2(-1.0,1.0);\n offsets[7] = vec2(0.0,1.0);\n offsets[8] = vec2(1.0,1.0);\n \n vec4 sum = color;\n for(int i = 0; i < 9; i++) {\n sum = sum + cKernel[i] * scaleFactor * texture2D(e_Texture, v_Uv + offsets[i] / stStep);\n };\n return sum;\n }",this.filtersTypes+="color = convolutionTextureColor(color);\n"),this}reset(){return this.uniformObj={},this.filtersStr="",this.filtersTypes="",this._matrix=new THREE.Matrix4,this}_getFilterShaderData(t){return{uniforms:Object.assign({e_Texture:{value:t},colorMatrix:{value:this._matrix}},this.uniformObj),vertexShader:this.VSHADER_SOURCE,fragmentShader:this.FSHADER_SOURCE}}_getFilterColor(t="#000000",r=1){t=new THREE.Color(t);let{r:i,g:e,b:s}=t;const n=this._matrix.toArray(),o=(n[12],n[13],n[14],n[15],n[0]*i+n[1]*i+n[2]*i+n[3]*r),a=n[4]*e+n[5]*e+n[6]*e+n[7]*r,l=n[8]*s+n[9]*s+n[10]*s+n[11]*r;return t.setRGB(o,a,l),t}toJSON(){return JSON.stringify({matrix:this._matrix.toArray(),uniformObj:this.uniformObj,filtersStr:this.filtersStr,filtersTypes:this.filtersTypes})}static fromJSON(t){const{matrix:r,uniformObj:i,filtersStr:e,filtersTypes:s}=JSON.parse(t),n=new MxFilters;return n._matrix=(new THREE.Matrix4).fromArray(r),n.uniformObj=i,n.filtersStr=e,n.filtersTypes=s,n}};