UNPKG

awv3

Version:
1 lines 4.11 kB
"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}function drawArcBy_S_T_E(e,t,r){var n=r.clone().sub(e),c=e.clone().add(n.clone().projectOnVector(t)),a=c.distanceTo(r),o=a<=.001*n.length()+.001;if(o)return{start:e,end:r};var l=r.clone().sub(c).normalize(),d=r.distanceToSquared(e)/(2*a),s=_three2["default"].cross2d(l,t),i=l.clone().multiplyScalar(d).add(e);return{start:e,end:r,center:i,clockwise:s>0}}function drawArcBy_S_E_Ch(e,t,r,n){var c=t.clone().add(e).divideScalar(2),a=t.clone().sub(e),o=new _three2["default"].Vector3((-a.y),a.x,0),l=r.clone().sub(c),d=l.clone().projectOnVector(o).add(c),s=l.dot(o),i=s<0!=!!n;return{start:e,end:t,center:d,clockwise:i}}function drawArcBy_S_E_CPh(e,t,r){var n=t.clone().add(e).divideScalar(2),c=t.clone().sub(e),a=new _three2["default"].Vector3((-c.y),c.x,0),o=r.clone().sub(n),l=o.clone().projectOnVector(a),d=l.length();if(d<=.001)return{start:e,end:t};var s=c.length()/2,i=-(s*s)/(d*d),u=l.clone().multiplyScalar(i).add(n),_=o.dot(a),h=_>0;return{start:e,end:t,center:u,clockwise:h}}function drawArcBy_S_E_M(e,t,r){var n=e.distanceTo(t),c=e.distanceTo(r),a=t.distanceTo(r),o=_three2["default"].cross2d(t.clone().sub(e),r.clone().sub(e))/2,l=Math.abs(o);if(l<=.001*n+.001)return{start:e,end:t};var d=n*c*a/(4*l);d=Math.max(d,(.5+1e-9)*n);for(var s,i=Math.sqrt(d*d-n*n/4),u=t.clone().add(e).divideScalar(2),_=t.clone().sub(e),h=new _three2["default"].Vector3((-_.y),_.x,0).normalize(),y=1e50,p=0;p<2;p++){var f=h.clone().multiplyScalar(i*(p?1:-1)).add(u),w=Math.abs(f.distanceTo(r)-d);y>w&&(y=w,s=f)}var m=function(e){var t=e.clone().sub(s);return Math.atan2(t.y,t.x)},S=m(e),b=m(t),v=m(r);b<S&&(b+=2*Math.PI),v<S&&(v+=2*Math.PI);var M=v>b;return{start:e,end:t,center:s,clockwise:M}}function drawArcBy_Angle_M(e,t,r,n){var c=void 0,a=new _three2["default"].Vector3(0,0,0),o=t.clone().add(r).multiplyScalar(.5).normalize(),l=n.clone().sub(e);if(l.length()<.01||l.dot(o)<0)return null;var d=r.angleTo(t),s=l.angleTo(t),i=l.angleTo(r),u=Math.max(s,i,d);if(u!==d&&(s===u?c=l.dot(r):i===u&&(c=l.dot(t))),c)return a=e.clone().add(o.clone().multiplyScalar(c/Math.cos(d/2))),{start:e.clone().add(t.clone().multiplyScalar(c)),end:e.clone().add(r.clone().multiplyScalar(c)),center:a,clockwise:!0};var _=n.clone().sub(e),h=Math.pow(Math.sin(d/2),2),y=1-h,p=_.lengthSq(),f=-2*_.x,w=-2*_.y;if(0===o.y){var m=o.dot(new _three2["default"].Vector3(1,0,0)),S=Math.pow(f,2)-4*y*p,b=(-f+m*Math.sqrt(S))/(2*y);a.x=b,a.y=0}else{var m=o.dot(new _three2["default"].Vector3(0,1,0)),v=o.x/o.y,M=(v*v+1)*y,g=f*v+w,x=p,S=Math.pow(g,2)-4*M*x,A=(-g+m*Math.sqrt(S))/(2*M);a.x=A*v,a.y=A}var c=a.length()*Math.cos(d/2);return a.add(e),{start:e.clone().add(t.clone().multiplyScalar(c)),end:e.clone().add(r.clone().multiplyScalar(c)),center:a,clockwise:!0}}function createGeomObject(e,t){var r=_geomobjects.Point;return e.center?r=_geomobjects.Arc:e.end&&(r=_geomobjects.Line),t instanceof r||(t=new r),r===_geomobjects.Point?t.position.copy(e.start):(t.points[0].position.copy(e.start),t.points[1].position.copy(e.end),r===_geomobjects.Arc&&(t.centerPoint.position.copy(e.center),t.clockwise=e.clockwise)),t.updateGeometry(),t}function intersectLines(e,t,r,n,c){if(c=c||1e-15,t=t.clone().normalize(),n=n.clone().normalize(),t.length()<.9||n.length()<.9)return null;var a=_three2["default"].cross2d(t,n);if(Math.abs(a)<=c)return null;var o=_three2["default"].cross2d(r.clone().sub(e),n),l=_three2["default"].cross2d(r.clone().sub(e),t),d=o/a,s=l/a,i=t.clone().multiplyScalar(d).add(e),u=n.clone().multiplyScalar(s).add(r),_=i.clone().add(u).multiplyScalar(.5);return _}exports.__esModule=!0,exports.drawArcBy_S_T_E=drawArcBy_S_T_E,exports.drawArcBy_S_E_Ch=drawArcBy_S_E_Ch,exports.drawArcBy_S_E_CPh=drawArcBy_S_E_CPh,exports.drawArcBy_S_E_M=drawArcBy_S_E_M,exports.drawArcBy_Angle_M=drawArcBy_Angle_M,exports.createGeomObject=createGeomObject,exports.intersectLines=intersectLines;var _geomobjects=require("sketcher/geomobjects"),_three=require("three"),_three2=_interopRequireDefault(_three);_three2["default"].cross2d=function(e,t){return e.x*t.y-e.y*t.x};