yanchengPowerSupply/node_modules/mxdraw/dist/lib/MxModule/MxDb2LineAngularDimension/index.js

1 line
2.5 KiB
JavaScript

import{addRegisterMxDbEntity}from"../../tools/registerMxDbEntity";import _ from"lodash";import McGiWorldDrawType from"../McGiWorldDrawType";import MxDbEntity from"../MxDbEntity";import drawMxDb2LineAngularDimension from"./draw";const propertyDbKeys=["colors","point1","point2","point3"];class MxDb2LineAngularDimension extends MxDbEntity{constructor(t){if(super(),this.point1=new THREE.Vector3,this.point2=new THREE.Vector3,this.point3=new THREE.Vector3,this.colors=[],t){const{points:i,colors:n}=t;i&&this.setPoints(i),n&&this.setColor(n)}}calculateLineAngle(t,i,n){const o=2*Math.PI/360;return{startAngle:180*Math.atan2(i.y-t.y,i.x-t.x)/Math.PI*o,endAngle:180*Math.atan2(n.y-t.y,n.x-t.x)/Math.PI*o}}setPoints(t){const[i,n,o]=t;return i&&(this.point1=i),n&&(this.point2=n),o&&(this.point3=o),this}setColor(t){return _.isArray(t)?this.colors=t:this.color=t,this}worldDraw(t){if(t.getType()==McGiWorldDrawType.kWorldDraw||t.getType()==McGiWorldDrawType.kDynDragDraw){const[i,n,o,e]=this.colors||[],r=this.getColor(),s=t.getMxObject();t.setColor(i||r),t.drawLine(this.point1,this.point2),t.setColor(n||r),t.drawLine(this.point2,this.point3);const{startAngle:a,endAngle:p}=this.calculateLineAngle(this.point2,this.point1,this.point3),l=this.point2.distanceTo(this.point1),h=this.point2.distanceTo(this.point3),d=Math.min(l,h)/4;let c=THREE.MathUtils.radToDeg(a-p);c<0&&(c+=360);let D=s.screenCoordLong2Doc(50);const g=new THREE.ArcCurve(this.point2.x,this.point2.y,d,a,p,!0),y=(new THREE.Geometry).setFromPoints(g.getPoints(50));t.setColor(o||r),t.drawGeometryLines(y);const w=g.getPoint(.5);let u=new THREE.Vector3(w.x,w.y,0);const M=u.sub(this.point2),m=M.length()+.5*D;M.normalize().multiplyScalar(m),u=this.point2.clone().add(M),t.setColor(e||r),t.drawText(c.toFixed(3)+"°",.5*D,0,u)}else t.drawLine(this.point1,this.point2),t.drawLine(this.point3,this.point2)}getGripPoints(){return[this.point1,this.point2,this.point3]}moveGripPointsAt(t,i){return 0===t?this.point1.add(i):1===t?this.point2.add(i):2===t&&this.point3.add(i),!0}dwgIn(t){return this.onDwgIn(t),this.dwgInHelp(t,propertyDbKeys),!0}dwgOut(t){return this.onDwgOut(t),this.dwgOutHelp(t,propertyDbKeys),t}create(){return new MxDb2LineAngularDimension}transformBy(t){this.point1.applyMatrix4(t),this.point2.applyMatrix4(t)}getTypeName(){return"MxDb2LineAngularDimension"}}MxDb2LineAngularDimension.cmd="Mx_AngleSurveying",MxDb2LineAngularDimension.draw=drawMxDb2LineAngularDimension,addRegisterMxDbEntity(MxDb2LineAngularDimension);export default MxDb2LineAngularDimension;