perfect-freehand
Advanced tools
Comparing version 0.4.7 to 0.4.71
@@ -189,3 +189,3 @@ 'use strict'; | ||
return add(A, mul(vec(A, B), t)); | ||
} | ||
} // isLeft: >0 for counterclockwise | ||
@@ -403,8 +403,5 @@ var min = Math.min, | ||
var la = add(point, _offset); | ||
var ra = sub(point, _offset); | ||
for (var t = 0.2; t < 1; t += 0.2) { | ||
tr = rotAround(la, point, PI * -t); | ||
tl = rotAround(ra, point, PI * t); | ||
for (var t = 0; t < 1; t += 0.2) { | ||
tr = rotAround(add(point, _offset), point, PI * -t); | ||
tl = rotAround(sub(point, _offset), point, PI * t); | ||
rightPts.push(tr); | ||
@@ -411,0 +408,0 @@ leftPts.push(tl); |
@@ -1,2 +0,2 @@ | ||
"use strict";function n(n,r,t){return n*(1-t)+r*t}function r(n,r,t){return Math.max(r,Math.min(t,n))}function t(t,e,i,o){return void 0===o&&(o=.5),e?(o=r(i(o),0,1),(e<0?n(t,t+t*r(e,-.95,-.05),o):n(t-t*r(e,.05,.95),t,o))/2):t/2}function e(n,r){return[n[0]+r[0],n[1]+r[1]]}function i(n,r){return[n[0]-r[0],n[1]-r[1]]}function o(n,r){return[r[0]-n[0],r[1]-n[1]]}function u(n,r){return[n[0]*r,n[1]*r]}function s(n){return[n[1],-n[0]]}function a(n,r){return n[0]*r[0]+n[1]*r[1]}function v(n,r){return function(n){return n[0]*n[0]+n[1]*n[1]}(i(n,r))}function f(n){return function(n,r){return[n[0]/r,n[1]/r]}(n,function(n){return Math.hypot(n[0],n[1])}(n))}function c(n,r){return Math.hypot(n[1]-r[1],n[0]-r[0])}function p(n,r,t){var e=Math.sin(t),i=Math.cos(t),o=n[0]-r[0],u=n[1]-r[1];return[o*i-u*e+r[0],o*e+u*i+r[1]]}function h(n,r,t){return e(n,u(o(n,r),t))}Object.defineProperty(exports,"__esModule",{value:!0});var d=Math.min,g=Math.PI;function l(n,r){var t=r.simulatePressure,i=r.streamline,u=void 0===i?.5:i,s=r.size,v=void 0===s?8:s;u/=2,void 0===t||t||(u/=2);var p=function(n){return Array.isArray(n[0])?n.map((function(n){var r=n[2];return[n[0],n[1],void 0===r?.5:r]})):n.map((function(n){var r=n.pressure;return[n.x,n.y,void 0===r?.5:r]}))}(n),d=p.length;if(0===d)return[];1===d&&p.push(e(p[0],[1,0]));for(var g=[{point:[p[0][0],p[0][1]],pressure:p[0][2],vector:[0,0],distance:0,runningLength:0}],l=1,m=p[l],M=g[0];l<p.length;m=p[++l],M=g[l-1]){var L=h(M.point,m,1-u),x=m[2],y=f(o(L,M.point)),P=c(L,M.point);g.push({point:L,pressure:x,vector:y,distance:P,runningLength:M.runningLength+P})}for(var k=g[d-1].runningLength,b=d-2;b>1;b--){var z=g[b],A=z.runningLength,O=z.vector,S=a(g[b-1].vector,g[b].vector);if(k-A>v/2||S<.8){for(var _=b;_<d;_++)g[_].vector=O;break}}return g}function m(n,r){void 0===r&&(r={});var l=r.size,m=void 0===l?8:l,M=r.thinning,L=void 0===M?.5:M,x=r.smoothing,y=void 0===x?.5:x,P=r.simulatePressure,k=void 0===P||P,b=r.easing,z=void 0===b?function(n){return n}:b,A=r.start,O=void 0===A?{}:A,S=r.end,_=void 0===S?{}:S,j=r.last,w=void 0!==j&&j,I=r.streamline,q=void 0===I?.5:I;q/=2;var B=O.taper,C=void 0===B?0:B,D=O.easing,E=void 0===D?function(n){return n*(2-n)}:D,F=_.taper,G=void 0===F?0:F,H=_.easing,J=void 0===H?function(n){return--n*n*n+1}:H,K=n.length;if(0===K)return[];for(var N=n[K-1].runningLength,Q=[],R=[],T=n.slice(0,5).reduce((function(n,r){return(n+r.pressure)/2}),n[0].pressure),U=t(m,L,z,n[K-1].pressure),V=n[0].vector,W=n[0].point,X=W,Y=W,Z=X,$=1;$<K-1;$++){var nn=n[$],rn=nn.point,tn=nn.pressure,en=nn.vector,on=nn.distance,un=nn.runningLength;if(L){if(k){var sn=d(1,1-on/m),an=d(1,on/m);tn=d(1,T+an/2*(sn-T))}U=t(m,L,z,tn)}else U=m/2;var vn=un<C?E(un/C):1,fn=N-un<G?J((N-un)/G):1;U*=Math.min(vn,fn);var cn=n[$+1].vector,pn=a(en,cn);if(pn<0){for(var hn=u(s(V),U),dn=e(rn,hn),gn=i(rn,hn),ln=.2;ln<1;ln+=.2)Z=p(dn,rn,g*-ln),Y=p(gn,rn,g*ln),R.push(Z),Q.push(Y);W=Y,X=Z}else{var mn=u(s(h(cn,en,pn)),U);Y=i(rn,mn),Z=e(rn,mn);var Mn=1===$||pn<.25,Ln=Math.pow((un>m?m:m/2)*y,2);(Mn||v(W,Y)>Ln)&&(Q.push(h(W,Y,q)),W=Y),(Mn||v(X,Z)>Ln)&&(R.push(h(X,Z,q)),X=Z),T=tn,V=en}}var xn=n[0],yn=n[K-1],Pn=R.length<2||Q.length<2;if(Pn&&(!C&&!G||w)){for(var kn=0,bn=0;bn<K;bn++){var zn=n[bn];if(zn.runningLength>m){kn=t(m,L,z,zn.pressure);break}}for(var An=i(xn.point,u(s(f(o(yn.point,xn.point))),kn||U)),On=[],Sn=0;Sn<=1;Sn+=.1)On.push(p(An,xn.point,2*g*Sn));return On}var _n=[];if(!(C||G&&Pn)){for(var jn=i(xn.point,u(f(o(Z=R[1],Y=Q[1])),c(Z,Y)/2)),wn=0;wn<=1;wn+=.2)_n.push(p(jn,xn.point,g*wn));Q.shift(),R.shift()}var In=[];if(G||C&&Pn)In.push(yn.point);else for(var qn=i(yn.point,u(s(yn.vector),U)),Bn=0;Bn<=1;Bn+=.1)In.push(p(qn,yn.point,3*g*Bn));return Q.concat(In,R.reverse(),_n)}exports.default=function(n,r){return void 0===r&&(r={}),m(l(n,r),r)},exports.getStrokeOutlinePoints=m,exports.getStrokePoints=l; | ||
"use strict";function n(n,r,t){return n*(1-t)+r*t}function r(n,r,t){return Math.max(r,Math.min(t,n))}function t(t,e,i,o){return void 0===o&&(o=.5),e?(o=r(i(o),0,1),(e<0?n(t,t+t*r(e,-.95,-.05),o):n(t-t*r(e,.05,.95),t,o))/2):t/2}function e(n,r){return[n[0]+r[0],n[1]+r[1]]}function i(n,r){return[n[0]-r[0],n[1]-r[1]]}function o(n,r){return[r[0]-n[0],r[1]-n[1]]}function u(n,r){return[n[0]*r,n[1]*r]}function s(n){return[n[1],-n[0]]}function a(n,r){return n[0]*r[0]+n[1]*r[1]}function v(n,r){return function(n){return n[0]*n[0]+n[1]*n[1]}(i(n,r))}function f(n){return function(n,r){return[n[0]/r,n[1]/r]}(n,function(n){return Math.hypot(n[0],n[1])}(n))}function c(n,r){return Math.hypot(n[1]-r[1],n[0]-r[0])}function p(n,r,t){var e=Math.sin(t),i=Math.cos(t),o=n[0]-r[0],u=n[1]-r[1];return[o*i-u*e+r[0],o*e+u*i+r[1]]}function h(n,r,t){return e(n,u(o(n,r),t))}Object.defineProperty(exports,"__esModule",{value:!0});var d=Math.min,g=Math.PI;function l(n,r){var t=r.simulatePressure,i=r.streamline,u=void 0===i?.5:i,s=r.size,v=void 0===s?8:s;u/=2,void 0===t||t||(u/=2);var p=function(n){return Array.isArray(n[0])?n.map((function(n){var r=n[2];return[n[0],n[1],void 0===r?.5:r]})):n.map((function(n){var r=n.pressure;return[n.x,n.y,void 0===r?.5:r]}))}(n),d=p.length;if(0===d)return[];1===d&&p.push(e(p[0],[1,0]));for(var g=[{point:[p[0][0],p[0][1]],pressure:p[0][2],vector:[0,0],distance:0,runningLength:0}],l=1,m=p[l],M=g[0];l<p.length;m=p[++l],M=g[l-1]){var L=h(M.point,m,1-u),x=m[2],y=f(o(L,M.point)),P=c(L,M.point);g.push({point:L,pressure:x,vector:y,distance:P,runningLength:M.runningLength+P})}for(var k=g[d-1].runningLength,b=d-2;b>1;b--){var z=g[b],A=z.runningLength,O=z.vector,S=a(g[b-1].vector,g[b].vector);if(k-A>v/2||S<.8){for(var _=b;_<d;_++)g[_].vector=O;break}}return g}function m(n,r){void 0===r&&(r={});var l=r.size,m=void 0===l?8:l,M=r.thinning,L=void 0===M?.5:M,x=r.smoothing,y=void 0===x?.5:x,P=r.simulatePressure,k=void 0===P||P,b=r.easing,z=void 0===b?function(n){return n}:b,A=r.start,O=void 0===A?{}:A,S=r.end,_=void 0===S?{}:S,j=r.last,w=void 0!==j&&j,I=r.streamline,q=void 0===I?.5:I;q/=2;var B=O.taper,C=void 0===B?0:B,D=O.easing,E=void 0===D?function(n){return n*(2-n)}:D,F=_.taper,G=void 0===F?0:F,H=_.easing,J=void 0===H?function(n){return--n*n*n+1}:H,K=n.length;if(0===K)return[];for(var N=n[K-1].runningLength,Q=[],R=[],T=n.slice(0,5).reduce((function(n,r){return(n+r.pressure)/2}),n[0].pressure),U=t(m,L,z,n[K-1].pressure),V=n[0].vector,W=n[0].point,X=W,Y=W,Z=X,$=1;$<K-1;$++){var nn=n[$],rn=nn.point,tn=nn.pressure,en=nn.vector,on=nn.distance,un=nn.runningLength;if(L){if(k){var sn=d(1,1-on/m),an=d(1,on/m);tn=d(1,T+an/2*(sn-T))}U=t(m,L,z,tn)}else U=m/2;var vn=un<C?E(un/C):1,fn=N-un<G?J((N-un)/G):1;U*=Math.min(vn,fn);var cn=n[$+1].vector,pn=a(en,cn);if(pn<0){for(var hn=u(s(V),U),dn=0;dn<1;dn+=.2)Z=p(e(rn,hn),rn,g*-dn),Y=p(i(rn,hn),rn,g*dn),R.push(Z),Q.push(Y);W=Y,X=Z}else{var gn=u(s(h(cn,en,pn)),U);Y=i(rn,gn),Z=e(rn,gn);var ln=1===$||pn<.25,mn=Math.pow((un>m?m:m/2)*y,2);(ln||v(W,Y)>mn)&&(Q.push(h(W,Y,q)),W=Y),(ln||v(X,Z)>mn)&&(R.push(h(X,Z,q)),X=Z),T=tn,V=en}}var Mn=n[0],Ln=n[K-1],xn=R.length<2||Q.length<2;if(xn&&(!C&&!G||w)){for(var yn=0,Pn=0;Pn<K;Pn++){var kn=n[Pn];if(kn.runningLength>m){yn=t(m,L,z,kn.pressure);break}}for(var bn=i(Mn.point,u(s(f(o(Ln.point,Mn.point))),yn||U)),zn=[],An=0;An<=1;An+=.1)zn.push(p(bn,Mn.point,2*g*An));return zn}var On=[];if(!(C||G&&xn)){for(var Sn=i(Mn.point,u(f(o(Z=R[1],Y=Q[1])),c(Z,Y)/2)),_n=0;_n<=1;_n+=.2)On.push(p(Sn,Mn.point,g*_n));Q.shift(),R.shift()}var jn=[];if(G||C&&xn)jn.push(Ln.point);else for(var wn=i(Ln.point,u(s(Ln.vector),U)),In=0;In<=1;In+=.1)jn.push(p(wn,Ln.point,3*g*In));return Q.concat(jn,R.reverse(),On)}exports.default=function(n,r){return void 0===r&&(r={}),m(l(n,r),r)},exports.getStrokeOutlinePoints=m,exports.getStrokePoints=l; | ||
//# sourceMappingURL=perfect-freehand.cjs.production.min.js.map |
@@ -185,3 +185,3 @@ function lerp(y1, y2, mu) { | ||
return add(A, mul(vec(A, B), t)); | ||
} | ||
} // isLeft: >0 for counterclockwise | ||
@@ -399,8 +399,5 @@ var min = Math.min, | ||
var la = add(point, _offset); | ||
var ra = sub(point, _offset); | ||
for (var t = 0.2; t < 1; t += 0.2) { | ||
tr = rotAround(la, point, PI * -t); | ||
tl = rotAround(ra, point, PI * t); | ||
for (var t = 0; t < 1; t += 0.2) { | ||
tr = rotAround(add(point, _offset), point, PI * -t); | ||
tl = rotAround(sub(point, _offset), point, PI * t); | ||
rightPts.push(tr); | ||
@@ -407,0 +404,0 @@ leftPts.push(tl); |
@@ -94,1 +94,3 @@ /** | ||
export declare function lrp(A: number[], B: number[], t: number): number[]; | ||
export declare function isLeft(p1: number[], pc: number[], p2: number[]): number; | ||
export declare function clockwise(p1: number[], pc: number[], p2: number[]): boolean; |
{ | ||
"version": "0.4.7", | ||
"version": "0.4.71", | ||
"name": "perfect-freehand", | ||
@@ -4,0 +4,0 @@ "author": { |
@@ -7,3 +7,3 @@ # ![Screenshot](screenshot.svg 'Perfect Freehand') | ||
💰 Want to use this library in your commercial product? [Contact me here](steveruizok+perfectfreehand@gmail.com). | ||
💰 Want to use this library in your commercial product? [Contact me here](mailto:steveruizok+perfectfreehand@gmail.com). | ||
@@ -10,0 +10,0 @@ ## Table of Contents |
@@ -229,8 +229,6 @@ import { toPointsArray, getStrokeRadius } from './utils' | ||
const offset = vec.mul(vec.per(prevVector), radius) | ||
const la = vec.add(point, offset) | ||
const ra = vec.sub(point, offset) | ||
for (let t = 0.2; t < 1; t += 0.2) { | ||
tr = vec.rotAround(la, point, PI * -t) | ||
tl = vec.rotAround(ra, point, PI * t) | ||
for (let t = 0; t < 1; t += 0.2) { | ||
tr = vec.rotAround(vec.add(point, offset), point, PI * -t) | ||
tl = vec.rotAround(vec.sub(point, offset), point, PI * t) | ||
@@ -246,3 +244,2 @@ rightPts.push(tr) | ||
} | ||
/* | ||
@@ -249,0 +246,0 @@ Add regular points |
@@ -151,1 +151,12 @@ /** | ||
} | ||
// isLeft: >0 for counterclockwise | ||
// =0 for none (degenerate) | ||
// <0 for clockwise | ||
export function isLeft(p1: number[], pc: number[], p2: number[]) { | ||
return (pc[0] - p1[0]) * (p2[1] - p1[1]) - (p2[0] - p1[0]) * (pc[1] - p1[1]) | ||
} | ||
export function clockwise(p1: number[], pc: number[], p2: number[]) { | ||
return isLeft(p1, pc, p2) > 0 | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
157929
1719