perfect-freehand
Advanced tools
Comparing version 0.4.9 to 0.4.10
@@ -13,3 +13,3 @@ import { StrokeOptions, StrokePoint } from './types'; | ||
pressure?: number; | ||
}>(points: (T | K)[], options: StrokeOptions): StrokePoint[]; | ||
}>(points: (T | K)[], options?: StrokeOptions): StrokePoint[]; | ||
/** | ||
@@ -16,0 +16,0 @@ * ## getStrokeOutlinePoints |
@@ -205,7 +205,12 @@ 'use strict'; | ||
function getStrokePoints(points, options) { | ||
var _options$simulatePres = options.simulatePressure, | ||
if (options === void 0) { | ||
options = {}; | ||
} | ||
var _options = options, | ||
_options$simulatePres = _options.simulatePressure, | ||
simulatePressure = _options$simulatePres === void 0 ? true : _options$simulatePres, | ||
_options$streamline = options.streamline, | ||
_options$streamline = _options.streamline, | ||
streamline = _options$streamline === void 0 ? 0.5 : _options$streamline, | ||
_options$size = options.size, | ||
_options$size = _options.size, | ||
size = _options$size === void 0 ? 8 : _options$size; | ||
@@ -219,5 +224,4 @@ streamline /= 2; | ||
var pts = toPointsArray(points); | ||
var len = pts.length; | ||
if (len === 0) return []; | ||
if (len === 1) pts.push(add(pts[0], [1, 0])); | ||
if (pts.length === 0) return []; | ||
if (pts.length === 1) pts.push([].concat(add(pts[0], [1, 1]), [pts[0][2]])); | ||
var strokePoints = [{ | ||
@@ -231,3 +235,3 @@ point: [pts[0][0], pts[0][1]], | ||
for (var i = 1, curr = pts[i], prev = strokePoints[0]; i < pts.length; i++, curr = pts[i], prev = strokePoints[i - 1]) { | ||
for (var i = 1, j = 0, curr = pts[i], prev = strokePoints[j]; i < pts.length; i++, curr = pts[i], prev = strokePoints[j]) { | ||
var point = lrp(prev.point, curr, 1 - streamline); | ||
@@ -239,3 +243,3 @@ if (isEqual(prev.point, point)) continue; | ||
var runningLength = prev.runningLength + distance; | ||
strokePoints.push({ | ||
var strokePoint = { | ||
point: point, | ||
@@ -246,3 +250,5 @@ pressure: pressure, | ||
runningLength: runningLength | ||
}); | ||
}; | ||
strokePoints.push(strokePoint); | ||
j += 1; // only increment j if we add an item to strokePoints | ||
} | ||
@@ -257,4 +263,6 @@ /* | ||
*/ | ||
// Update the length to the length of the strokePoints array. | ||
var len = strokePoints.length; | ||
var totalLength = strokePoints[len - 1].runningLength; | ||
@@ -269,4 +277,4 @@ | ||
if (totalLength - _runningLength > size / 2 || dpr$1 < 0.8) { | ||
for (var j = _i; j < len; j++) { | ||
strokePoints[j].vector = _vector; | ||
for (var _j = _i; _j < len; _j++) { | ||
strokePoints[_j].vector = _vector; | ||
} | ||
@@ -300,24 +308,24 @@ | ||
var _options = options, | ||
_options$size2 = _options.size, | ||
size = _options$size2 === void 0 ? 8 : _options$size2, | ||
_options$thinning = _options.thinning, | ||
thinning = _options$thinning === void 0 ? 0.5 : _options$thinning, | ||
_options$smoothing = _options.smoothing, | ||
smoothing = _options$smoothing === void 0 ? 0.5 : _options$smoothing, | ||
_options$simulatePres2 = _options.simulatePressure, | ||
simulatePressure = _options$simulatePres2 === void 0 ? true : _options$simulatePres2, | ||
_options$easing = _options.easing, | ||
easing = _options$easing === void 0 ? function (t) { | ||
var _options2 = options, | ||
_options2$size = _options2.size, | ||
size = _options2$size === void 0 ? 8 : _options2$size, | ||
_options2$thinning = _options2.thinning, | ||
thinning = _options2$thinning === void 0 ? 0.5 : _options2$thinning, | ||
_options2$smoothing = _options2.smoothing, | ||
smoothing = _options2$smoothing === void 0 ? 0.5 : _options2$smoothing, | ||
_options2$simulatePre = _options2.simulatePressure, | ||
simulatePressure = _options2$simulatePre === void 0 ? true : _options2$simulatePre, | ||
_options2$easing = _options2.easing, | ||
easing = _options2$easing === void 0 ? function (t) { | ||
return t; | ||
} : _options$easing, | ||
_options$start = _options.start, | ||
start = _options$start === void 0 ? {} : _options$start, | ||
_options$end = _options.end, | ||
end = _options$end === void 0 ? {} : _options$end, | ||
_options$last = _options.last, | ||
isComplete = _options$last === void 0 ? false : _options$last; | ||
var _options2 = options, | ||
_options2$streamline = _options2.streamline, | ||
streamline = _options2$streamline === void 0 ? 0.5 : _options2$streamline; | ||
} : _options2$easing, | ||
_options2$start = _options2.start, | ||
start = _options2$start === void 0 ? {} : _options2$start, | ||
_options2$end = _options2.end, | ||
end = _options2$end === void 0 ? {} : _options2$end, | ||
_options2$last = _options2.last, | ||
isComplete = _options2$last === void 0 ? false : _options2$last; | ||
var _options3 = options, | ||
_options3$streamline = _options3.streamline, | ||
streamline = _options3$streamline === void 0 ? 0.5 : _options3$streamline; | ||
streamline /= 2; | ||
@@ -324,0 +332,0 @@ var _start$taper = start.taper, |
@@ -1,2 +0,2 @@ | ||
"use strict";function r(r,n){return[r[0]+n[0],r[1]+n[1]]}function n(r,n){return[r[0]-n[0],r[1]-n[1]]}function t(r,n){return[n[0]-r[0],n[1]-r[1]]}function e(r,n){return[r[0]*n,r[1]*n]}function i(r){return[r[1],-r[0]]}function o(r,n){return r[0]*n[0]+r[1]*n[1]}function u(r,t){return function(r){return r[0]*r[0]+r[1]*r[1]}(n(r,t))}function a(r){return function(r,n){return[r[0]/n,r[1]/n]}(r,function(r){return Math.hypot(r[0],r[1])}(r))}function s(r,n){return Math.hypot(r[1]-n[1],r[0]-n[0])}function v(r,n,t){var e=Math.sin(t),i=Math.cos(t),o=r[0]-n[0],u=r[1]-n[1];return[o*i-u*e+n[0],o*e+u*i+n[1]]}function f(n,i,o){return r(n,e(t(n,i),o))}function c(r,n){return r[0]===n[0]&&r[1]===n[1]}function p(r,n,t){return r*(1-t)+n*t}function h(r,n,t){return Math.max(n,Math.min(t,r))}function d(r,n,t,e){return void 0===e&&(e=.5),n?(e=h(t(e),0,1),(n<0?p(r,r+r*h(n,-.95,-.05),e):p(r-r*h(n,.05,.95),r,e))/2):r/2}Object.defineProperty(exports,"__esModule",{value:!0});var g=Math.min,l=Math.PI;function m(n,e){var i=e.simulatePressure,u=e.streamline,v=void 0===u?.5:u,p=e.size,h=void 0===p?8:p;v/=2,void 0===i||i||(v/=2);var d=function(r){return Array.isArray(r[0])?r.map((function(r){var n=r[2];return[r[0],r[1],void 0===n?.5:n]})):r.map((function(r){var n=r.pressure;return[r.x,r.y,void 0===n?.5:n]}))}(n),g=d.length;if(0===g)return[];1===g&&d.push(r(d[0],[1,0]));for(var l=[{point:[d[0][0],d[0][1]],pressure:d[0][2],vector:[0,0],distance:0,runningLength:0}],m=1,M=d[m],L=l[0];m<d.length;M=d[++m],L=l[m-1]){var x=f(L.point,M,1-v);if(!c(L.point,x)){var y=M[2],P=a(t(x,L.point)),k=s(x,L.point);l.push({point:x,pressure:y,vector:P,distance:k,runningLength:L.runningLength+k})}}for(var b=l[g-1].runningLength,z=g-2;z>1;z--){var A=l[z],O=A.runningLength,S=A.vector,_=o(l[z-1].vector,l[z].vector);if(b-O>h/2||_<.8){for(var j=z;j<g;j++)l[j].vector=S;break}}return l}function M(p,h){void 0===h&&(h={});var m=h.size,M=void 0===m?8:m,L=h.thinning,x=void 0===L?.5:L,y=h.smoothing,P=void 0===y?.5:y,k=h.simulatePressure,b=void 0===k||k,z=h.easing,A=void 0===z?function(r){return r}:z,O=h.start,S=void 0===O?{}:O,_=h.end,j=void 0===_?{}:_,w=h.last,I=void 0!==w&&w,q=h.streamline,B=void 0===q?.5:q;B/=2;var C=S.taper,D=void 0===C?0:C,E=S.easing,F=void 0===E?function(r){return r*(2-r)}:E,G=j.taper,H=void 0===G?0:G,J=j.easing,K=void 0===J?function(r){return--r*r*r+1}:J,N=p.length;if(0===N)return[];for(var Q=p[N-1].runningLength,R=[],T=[],U=p.slice(0,5).reduce((function(r,n){return(r+n.pressure)/2}),p[0].pressure),V=d(M,x,A,p[N-1].pressure),W=p[0].vector,X=p[0].point,Y=X,Z=X,$=Y,rr=1;rr<N-1;rr++){var nr=p[rr],tr=nr.point,er=nr.pressure,ir=nr.vector,or=nr.distance,ur=nr.runningLength;if(x){if(b){var ar=g(1,1-or/M),sr=g(1,or/M);er=g(1,U+sr/2*(ar-U))}V=d(M,x,A,er)}else V=M/2;var vr=ur<D?F(ur/D):1,fr=Q-ur<H?K((Q-ur)/H):1;V*=Math.min(vr,fr);var cr=p[rr+1].vector,pr=o(ir,cr);if(pr<0){for(var hr=e(i(W),V),dr=0;dr<1;dr+=.2)$=v(r(tr,hr),tr,l*-dr),Z=v(n(tr,hr),tr,l*dr),T.push($),R.push(Z);X=Z,Y=$}else{var gr=e(i(f(cr,ir,pr)),V);Z=n(tr,gr),$=r(tr,gr);var lr=1===rr||pr<.25,mr=Math.pow((ur>M?M:M/2)*P,2);(lr||u(X,Z)>mr)&&(R.push(f(X,Z,B)),X=Z),(lr||u(Y,$)>mr)&&(T.push(f(Y,$,B)),Y=$),U=er,W=ir}}var Mr=p[0],Lr=p[N-1],xr=T.length<2||R.length<2;if(xr&&(!D&&!H||I)){for(var yr=0,Pr=0;Pr<N;Pr++){var kr=p[Pr];if(kr.runningLength>M){yr=d(M,x,A,kr.pressure);break}}for(var br=n(Mr.point,e(i(a(t(Lr.point,Mr.point))),yr||V)),zr=[],Ar=0;Ar<=1;Ar+=.1)zr.push(v(br,Mr.point,2*l*Ar));return zr}var Or=[];if(!(D||H&&xr)){$=T[1];for(var Sr=1;Sr<R.length;Sr++)if(!c($,R[Sr])){Z=R[Sr];break}if(!c($,Z)){for(var _r=n(Mr.point,e(a(t($,Z)),s($,Z)/2)),jr=0;jr<=1;jr+=.2)Or.push(v(_r,Mr.point,l*jr));R.shift(),T.shift()}}var wr=[];if(H||D&&xr)wr.push(Lr.point);else for(var Ir=n(Lr.point,e(i(Lr.vector),V)),qr=0;qr<=1;qr+=.1)wr.push(v(Ir,Lr.point,3*l*qr));return R.concat(wr,T.reverse(),Or)}exports.default=function(r,n){return void 0===n&&(n={}),M(m(r,n),n)},exports.getStrokeOutlinePoints=M,exports.getStrokePoints=m; | ||
"use strict";function n(n,r){return[n[0]+r[0],n[1]+r[1]]}function r(n,r){return[n[0]-r[0],n[1]-r[1]]}function t(n,r){return[r[0]-n[0],r[1]-n[1]]}function e(n,r){return[n[0]*r,n[1]*r]}function i(n){return[n[1],-n[0]]}function o(n,r){return n[0]*r[0]+n[1]*r[1]}function u(n,t){return function(n){return n[0]*n[0]+n[1]*n[1]}(r(n,t))}function a(n){return function(n,r){return[n[0]/r,n[1]/r]}(n,function(n){return Math.hypot(n[0],n[1])}(n))}function v(n,r){return Math.hypot(n[1]-r[1],n[0]-r[0])}function s(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 f(r,i,o){return n(r,e(t(r,i),o))}function c(n,r){return n[0]===r[0]&&n[1]===r[1]}function p(n,r,t){return n*(1-t)+r*t}function h(n,r,t){return Math.max(r,Math.min(t,n))}function g(n,r,t,e){return void 0===e&&(e=.5),r?(e=h(t(e),0,1),(r<0?p(n,n+n*h(r,-.95,-.05),e):p(n-n*h(r,.05,.95),n,e))/2):n/2}Object.defineProperty(exports,"__esModule",{value:!0});var d=Math.min,l=Math.PI;function m(r,e){void 0===e&&(e={});var i=e.simulatePressure,u=e.streamline,s=void 0===u?.5:u,p=e.size,h=void 0===p?8:p;s/=2,void 0===i||i||(s/=2);var g=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]}))}(r);if(0===g.length)return[];1===g.length&&g.push([].concat(n(g[0],[1,1]),[g[0][2]]));for(var d=[{point:[g[0][0],g[0][1]],pressure:g[0][2],vector:[0,0],distance:0,runningLength:0}],l=1,m=0,M=g[l],L=d[m];l<g.length;M=g[++l],L=d[m]){var x=f(L.point,M,1-s);if(!c(L.point,x)){var y=M[2],P=a(t(x,L.point)),k=v(x,L.point);d.push({point:x,pressure:y,vector:P,distance:k,runningLength:L.runningLength+k}),m+=1}}for(var b=d.length,z=d[b-1].runningLength,A=b-2;A>1;A--){var O=d[A],S=O.runningLength,_=O.vector,j=o(d[A-1].vector,d[A].vector);if(z-S>h/2||j<.8){for(var w=A;w<b;w++)d[w].vector=_;break}}return d}function M(p,h){void 0===h&&(h={});var m=h.size,M=void 0===m?8:m,L=h.thinning,x=void 0===L?.5:L,y=h.smoothing,P=void 0===y?.5:y,k=h.simulatePressure,b=void 0===k||k,z=h.easing,A=void 0===z?function(n){return n}:z,O=h.start,S=void 0===O?{}:O,_=h.end,j=void 0===_?{}:_,w=h.last,I=void 0!==w&&w,q=h.streamline,B=void 0===q?.5:q;B/=2;var C=S.taper,D=void 0===C?0:C,E=S.easing,F=void 0===E?function(n){return n*(2-n)}:E,G=j.taper,H=void 0===G?0:G,J=j.easing,K=void 0===J?function(n){return--n*n*n+1}:J,N=p.length;if(0===N)return[];for(var Q=p[N-1].runningLength,R=[],T=[],U=p.slice(0,5).reduce((function(n,r){return(n+r.pressure)/2}),p[0].pressure),V=g(M,x,A,p[N-1].pressure),W=p[0].vector,X=p[0].point,Y=X,Z=X,$=Y,nn=1;nn<N-1;nn++){var rn=p[nn],tn=rn.point,en=rn.pressure,on=rn.vector,un=rn.distance,an=rn.runningLength;if(x){if(b){var vn=d(1,1-un/M),sn=d(1,un/M);en=d(1,U+sn/2*(vn-U))}V=g(M,x,A,en)}else V=M/2;var fn=an<D?F(an/D):1,cn=Q-an<H?K((Q-an)/H):1;V*=Math.min(fn,cn);var pn=p[nn+1].vector,hn=o(on,pn);if(hn<0){for(var gn=e(i(W),V),dn=0;dn<1;dn+=.2)$=s(n(tn,gn),tn,l*-dn),Z=s(r(tn,gn),tn,l*dn),T.push($),R.push(Z);X=Z,Y=$}else{var ln=e(i(f(pn,on,hn)),V);Z=r(tn,ln),$=n(tn,ln);var mn=1===nn||hn<.25,Mn=Math.pow((an>M?M:M/2)*P,2);(mn||u(X,Z)>Mn)&&(R.push(f(X,Z,B)),X=Z),(mn||u(Y,$)>Mn)&&(T.push(f(Y,$,B)),Y=$),U=en,W=on}}var Ln=p[0],xn=p[N-1],yn=T.length<2||R.length<2;if(yn&&(!D&&!H||I)){for(var Pn=0,kn=0;kn<N;kn++){var bn=p[kn];if(bn.runningLength>M){Pn=g(M,x,A,bn.pressure);break}}for(var zn=r(Ln.point,e(i(a(t(xn.point,Ln.point))),Pn||V)),An=[],On=0;On<=1;On+=.1)An.push(s(zn,Ln.point,2*l*On));return An}var Sn=[];if(!(D||H&&yn)){$=T[1];for(var _n=1;_n<R.length;_n++)if(!c($,R[_n])){Z=R[_n];break}if(!c($,Z)){for(var jn=r(Ln.point,e(a(t($,Z)),v($,Z)/2)),wn=0;wn<=1;wn+=.2)Sn.push(s(jn,Ln.point,l*wn));R.shift(),T.shift()}}var In=[];if(H||D&&yn)In.push(xn.point);else for(var qn=r(xn.point,e(i(xn.vector),V)),Bn=0;Bn<=1;Bn+=.1)In.push(s(qn,xn.point,3*l*Bn));return R.concat(In,T.reverse(),Sn)}exports.default=function(n,r){return void 0===r&&(r={}),M(m(n,r),r)},exports.getStrokeOutlinePoints=M,exports.getStrokePoints=m; | ||
//# sourceMappingURL=perfect-freehand.cjs.production.min.js.map |
@@ -201,7 +201,12 @@ /** | ||
function getStrokePoints(points, options) { | ||
var _options$simulatePres = options.simulatePressure, | ||
if (options === void 0) { | ||
options = {}; | ||
} | ||
var _options = options, | ||
_options$simulatePres = _options.simulatePressure, | ||
simulatePressure = _options$simulatePres === void 0 ? true : _options$simulatePres, | ||
_options$streamline = options.streamline, | ||
_options$streamline = _options.streamline, | ||
streamline = _options$streamline === void 0 ? 0.5 : _options$streamline, | ||
_options$size = options.size, | ||
_options$size = _options.size, | ||
size = _options$size === void 0 ? 8 : _options$size; | ||
@@ -215,5 +220,4 @@ streamline /= 2; | ||
var pts = toPointsArray(points); | ||
var len = pts.length; | ||
if (len === 0) return []; | ||
if (len === 1) pts.push(add(pts[0], [1, 0])); | ||
if (pts.length === 0) return []; | ||
if (pts.length === 1) pts.push([].concat(add(pts[0], [1, 1]), [pts[0][2]])); | ||
var strokePoints = [{ | ||
@@ -227,3 +231,3 @@ point: [pts[0][0], pts[0][1]], | ||
for (var i = 1, curr = pts[i], prev = strokePoints[0]; i < pts.length; i++, curr = pts[i], prev = strokePoints[i - 1]) { | ||
for (var i = 1, j = 0, curr = pts[i], prev = strokePoints[j]; i < pts.length; i++, curr = pts[i], prev = strokePoints[j]) { | ||
var point = lrp(prev.point, curr, 1 - streamline); | ||
@@ -235,3 +239,3 @@ if (isEqual(prev.point, point)) continue; | ||
var runningLength = prev.runningLength + distance; | ||
strokePoints.push({ | ||
var strokePoint = { | ||
point: point, | ||
@@ -242,3 +246,5 @@ pressure: pressure, | ||
runningLength: runningLength | ||
}); | ||
}; | ||
strokePoints.push(strokePoint); | ||
j += 1; // only increment j if we add an item to strokePoints | ||
} | ||
@@ -253,4 +259,6 @@ /* | ||
*/ | ||
// Update the length to the length of the strokePoints array. | ||
var len = strokePoints.length; | ||
var totalLength = strokePoints[len - 1].runningLength; | ||
@@ -265,4 +273,4 @@ | ||
if (totalLength - _runningLength > size / 2 || dpr$1 < 0.8) { | ||
for (var j = _i; j < len; j++) { | ||
strokePoints[j].vector = _vector; | ||
for (var _j = _i; _j < len; _j++) { | ||
strokePoints[_j].vector = _vector; | ||
} | ||
@@ -296,24 +304,24 @@ | ||
var _options = options, | ||
_options$size2 = _options.size, | ||
size = _options$size2 === void 0 ? 8 : _options$size2, | ||
_options$thinning = _options.thinning, | ||
thinning = _options$thinning === void 0 ? 0.5 : _options$thinning, | ||
_options$smoothing = _options.smoothing, | ||
smoothing = _options$smoothing === void 0 ? 0.5 : _options$smoothing, | ||
_options$simulatePres2 = _options.simulatePressure, | ||
simulatePressure = _options$simulatePres2 === void 0 ? true : _options$simulatePres2, | ||
_options$easing = _options.easing, | ||
easing = _options$easing === void 0 ? function (t) { | ||
var _options2 = options, | ||
_options2$size = _options2.size, | ||
size = _options2$size === void 0 ? 8 : _options2$size, | ||
_options2$thinning = _options2.thinning, | ||
thinning = _options2$thinning === void 0 ? 0.5 : _options2$thinning, | ||
_options2$smoothing = _options2.smoothing, | ||
smoothing = _options2$smoothing === void 0 ? 0.5 : _options2$smoothing, | ||
_options2$simulatePre = _options2.simulatePressure, | ||
simulatePressure = _options2$simulatePre === void 0 ? true : _options2$simulatePre, | ||
_options2$easing = _options2.easing, | ||
easing = _options2$easing === void 0 ? function (t) { | ||
return t; | ||
} : _options$easing, | ||
_options$start = _options.start, | ||
start = _options$start === void 0 ? {} : _options$start, | ||
_options$end = _options.end, | ||
end = _options$end === void 0 ? {} : _options$end, | ||
_options$last = _options.last, | ||
isComplete = _options$last === void 0 ? false : _options$last; | ||
var _options2 = options, | ||
_options2$streamline = _options2.streamline, | ||
streamline = _options2$streamline === void 0 ? 0.5 : _options2$streamline; | ||
} : _options2$easing, | ||
_options2$start = _options2.start, | ||
start = _options2$start === void 0 ? {} : _options2$start, | ||
_options2$end = _options2.end, | ||
end = _options2$end === void 0 ? {} : _options2$end, | ||
_options2$last = _options2.last, | ||
isComplete = _options2$last === void 0 ? false : _options2$last; | ||
var _options3 = options, | ||
_options3$streamline = _options3.streamline, | ||
streamline = _options3$streamline === void 0 ? 0.5 : _options3$streamline; | ||
streamline /= 2; | ||
@@ -320,0 +328,0 @@ var _start$taper = start.taper, |
{ | ||
"version": "0.4.9", | ||
"version": "0.4.10", | ||
"name": "perfect-freehand", | ||
@@ -70,2 +70,2 @@ "author": { | ||
"dependencies": {} | ||
} | ||
} |
@@ -5,5 +5,5 @@ # ![Screenshot](screenshot.svg 'Perfect Freehand') | ||
🔗 [Demo](https://perfect-freehand-example.vercel.app/) | ||
🔗 Try out a [demo](https://perfect-freehand-example.vercel.app/). | ||
💰 Want to use this library in your commercial product? [Contact me here](mailto:steveruizok+perfectfreehand@gmail.com). | ||
💰 Using this library in a commercial product? Consider [becoming a sponsor](https://github.com/sponsors/steveruizok?frequency=recurring&sponsor=steveruizok). | ||
@@ -10,0 +10,0 @@ ## Table of Contents |
@@ -17,3 +17,3 @@ import { toPointsArray, getStrokeRadius } from './utils' | ||
K extends { x: number; y: number; pressure?: number } | ||
>(points: (T | K)[], options: StrokeOptions): StrokePoint[] { | ||
>(points: (T | K)[], options = {} as StrokeOptions): StrokePoint[] { | ||
let { simulatePressure = true, streamline = 0.5, size = 8 } = options | ||
@@ -29,8 +29,6 @@ | ||
const len = pts.length | ||
if (pts.length === 0) return [] | ||
if (len === 0) return [] | ||
if (pts.length === 1) pts.push([...vec.add(pts[0], [1, 1]), pts[0][2]]) | ||
if (len === 1) pts.push(vec.add(pts[0], [1, 0])) | ||
const strokePoints: StrokePoint[] = [ | ||
@@ -47,5 +45,5 @@ { | ||
for ( | ||
let i = 1, curr = pts[i], prev = strokePoints[0]; | ||
let i = 1, j = 0, curr = pts[i], prev = strokePoints[j]; | ||
i < pts.length; | ||
i++, curr = pts[i], prev = strokePoints[i - 1] | ||
i++, curr = pts[i], prev = strokePoints[j] | ||
) { | ||
@@ -58,6 +56,7 @@ const point = vec.lrp(prev.point, curr, 1 - streamline) | ||
const vector = vec.uni(vec.vec(point, prev.point)) | ||
const distance = vec.dist(point, prev.point) | ||
const runningLength = prev.runningLength + distance | ||
strokePoints.push({ | ||
const strokePoint = { | ||
point, | ||
@@ -68,3 +67,7 @@ pressure, | ||
runningLength, | ||
}) | ||
} | ||
strokePoints.push(strokePoint) | ||
j += 1 // only increment j if we add an item to strokePoints | ||
} | ||
@@ -82,2 +85,5 @@ | ||
// Update the length to the length of the strokePoints array. | ||
const len = strokePoints.length | ||
const totalLength = strokePoints[len - 1].runningLength | ||
@@ -84,0 +90,0 @@ |
@@ -1,2 +0,2 @@ | ||
import { isEqual, vec } from './vec' | ||
import { isEqual } from './vec' | ||
@@ -3,0 +3,0 @@ export function lerp(y1: number, y2: number, mu: number) { |
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
1783
161785
18