pantograph2d 0.8.0 → 0.8.1
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.
- package/LICENSE +4 -658
- package/dist/QuadraticBezier-BAVasVfu.cjs +9 -0
- package/dist/QuadraticBezier-BAVasVfu.cjs.map +1 -0
- package/dist/QuadraticBezier-BzVqiExF.js +4736 -0
- package/dist/QuadraticBezier-BzVqiExF.js.map +1 -0
- package/dist/{draw-c7b2705c.js → draw-DqsKIWJD.js} +11 -18
- package/dist/{draw-c7b2705c.js.map → draw-DqsKIWJD.js.map} +1 -1
- package/dist/draw-NcYfDZjT.cjs +2 -0
- package/dist/{draw-27ac6dae.cjs.map → draw-NcYfDZjT.cjs.map} +1 -1
- package/dist/models-Dxwusy3i.cjs +4 -0
- package/dist/models-Dxwusy3i.cjs.map +1 -0
- package/dist/{Diagram-2450b2e6.js → models-WQ-B7GSL.js} +283 -284
- package/dist/models-WQ-B7GSL.js.map +1 -0
- package/dist/pantograph/drawShape.cjs +1 -1
- package/dist/pantograph/drawShape.cjs.map +1 -1
- package/dist/pantograph/drawShape.js +12 -14
- package/dist/pantograph/drawShape.js.map +1 -1
- package/dist/pantograph/models.cjs +1 -1
- package/dist/pantograph/models.js +2 -2
- package/dist/pantograph/svg.cjs +1 -1
- package/dist/pantograph/svg.js +5 -6
- package/dist/pantograph/svg.js.map +1 -1
- package/dist/pantograph.cjs +2 -2
- package/dist/pantograph.cjs.map +1 -1
- package/dist/pantograph.js +30 -41
- package/dist/pantograph.js.map +1 -1
- package/dist/{wrapSVG-0ec8a111.js → svg-BylQQgsL.js} +2 -2
- package/dist/svg-BylQQgsL.js.map +1 -0
- package/dist/{wrapSVG-02b823ac.cjs → svg-D0nYyMk7.cjs} +2 -2
- package/dist/svg-D0nYyMk7.cjs.map +1 -0
- package/dist/types/examples/importSVG.d.ts +4 -0
- package/dist/{algorithms → types/src/algorithms}/boolean/figureBooleans.d.ts +1 -1
- package/dist/{algorithms → types/src/algorithms}/boolean/loopBooleans.d.ts +1 -1
- package/dist/{algorithms → types/src/algorithms}/boolean/strandBoolean.d.ts +4 -4
- package/dist/{algorithms → types/src/algorithms}/boolean/strandsBetweenIntersections.d.ts +3 -3
- package/dist/{algorithms → types/src/algorithms}/distances/arcArcDistance.d.ts +1 -1
- package/dist/{algorithms → types/src/algorithms}/distances/genericDistance.d.ts +1 -1
- package/dist/{algorithms → types/src/algorithms}/distances/index.d.ts +1 -1
- package/dist/types/src/algorithms/distances/lineArcDistance.d.ts +3 -0
- package/dist/{algorithms → types/src/algorithms}/distances/lineLineDistance.d.ts +1 -1
- package/dist/{algorithms → types/src/algorithms}/filletSegments.d.ts +1 -1
- package/dist/{algorithms → types/src/algorithms}/intersections/arcArcIntersection.d.ts +2 -2
- package/dist/types/src/algorithms/intersections/arcEllipseArcIntersection.d.ts +3 -0
- package/dist/types/src/algorithms/intersections/arcsCubicBezierIntersection.d.ts +5 -0
- package/dist/types/src/algorithms/intersections/arcsQuadraticBezierIntersection.d.ts +5 -0
- package/dist/{algorithms → types/src/algorithms}/intersections/bezierClip.d.ts +3 -3
- package/dist/{algorithms → types/src/algorithms}/intersections/cubicBezierCubicBezierIntersection.d.ts +2 -2
- package/dist/{algorithms → types/src/algorithms}/intersections/ellipseArcEllipseArcIntersection.d.ts +2 -2
- package/dist/types/src/algorithms/intersections/ellipseEllipseIntersection.d.ts +4 -0
- package/dist/{algorithms → types/src/algorithms}/intersections/index.d.ts +2 -2
- package/dist/types/src/algorithms/intersections/lineArcIntersection.d.ts +4 -0
- package/dist/types/src/algorithms/intersections/lineBezierIntersection.d.ts +5 -0
- package/dist/types/src/algorithms/intersections/lineEllipseArcIntersection.d.ts +4 -0
- package/dist/{algorithms → types/src/algorithms}/intersections/lineLineIntersection.d.ts +4 -4
- package/dist/{algorithms → types/src/algorithms}/intersections/quadraticBezierQuadraticBezierIntersection.d.ts +2 -2
- package/dist/types/src/algorithms/intersections/rayIntersections.d.ts +3 -0
- package/dist/{algorithms → types/src/algorithms}/offsets/offsetFigure.d.ts +2 -2
- package/dist/{algorithms → types/src/algorithms}/offsets/offsetSegment.d.ts +4 -4
- package/dist/{algorithms → types/src/algorithms}/offsets/offsetStroke.d.ts +5 -5
- package/dist/{algorithms → types/src/algorithms}/organiseLoops.d.ts +2 -2
- package/dist/types/src/algorithms/simplify.d.ts +3 -0
- package/dist/types/src/algorithms/solvers/findZeroViaNewton.d.ts +1 -0
- package/dist/types/src/algorithms/solvers/zeroViaNewton.d.ts +1 -0
- package/dist/{algorithms → types/src/algorithms}/stitchSegments.d.ts +1 -1
- package/dist/types/src/api/drawShape.d.ts +2 -0
- package/dist/types/src/api/models.d.ts +1 -0
- package/dist/types/src/api/svg.d.ts +1 -0
- package/dist/{booleanOperations.d.ts → types/src/booleanOperations.d.ts} +5 -5
- package/dist/{draw.d.ts → types/src/draw.d.ts} +4 -4
- package/dist/{drawShape → types/src/drawShape}/drawCircle.d.ts +1 -1
- package/dist/types/src/drawShape/drawEllipse.d.ts +2 -0
- package/dist/{drawShape → types/src/drawShape}/drawRect.d.ts +1 -1
- package/dist/types/src/drawShape/drawSVGPath.d.ts +2 -0
- package/dist/types/src/drawShape/index.d.ts +4 -0
- package/dist/{export → types/src/export}/json/exportJSON.d.ts +94 -94
- package/dist/{export → types/src/export}/json/jsonDiagram.d.ts +31 -31
- package/dist/{export → types/src/export}/json/jsonFigure.d.ts +31 -31
- package/dist/{export → types/src/export}/json/jsonLoop.d.ts +16 -16
- package/dist/{export → types/src/export}/json/jsonSegment.d.ts +16 -16
- package/dist/types/src/export/svg/api.d.ts +6 -0
- package/dist/{export → types/src/export}/svg/exportSVG.d.ts +6 -6
- package/dist/{export → types/src/export}/svg/svgDiagram.d.ts +1 -1
- package/dist/{export → types/src/export}/svg/svgFigure.d.ts +1 -1
- package/dist/{export → types/src/export}/svg/svgLoop.d.ts +1 -1
- package/dist/{export → types/src/export}/svg/svgSegment.d.ts +1 -1
- package/dist/{export → types/src/export}/svg/svgStrand.d.ts +1 -1
- package/dist/{export → types/src/export}/svg/wrapSVG.d.ts +1 -1
- package/dist/types/src/import/json/importJSON.d.ts +9 -0
- package/dist/{main.d.ts → types/src/main.d.ts} +7 -7
- package/dist/{models → types/src/models}/BoundingBox.d.ts +1 -1
- package/dist/{models → types/src/models}/Diagram.d.ts +7 -7
- package/dist/{models → types/src/models}/Figure.d.ts +7 -7
- package/dist/{models → types/src/models}/Loop.d.ts +4 -4
- package/dist/{models → types/src/models}/Strand.d.ts +2 -2
- package/dist/{models → types/src/models}/Stroke.d.ts +5 -5
- package/dist/{models → types/src/models}/TransformationMatrix.d.ts +1 -1
- package/dist/types/src/models/exports.d.ts +15 -0
- package/dist/types/src/models/segments/AbstractSegment.d.ts +25 -0
- package/dist/{models → types/src/models}/segments/Arc.d.ts +4 -4
- package/dist/{models → types/src/models}/segments/CubicBezier.d.ts +4 -4
- package/dist/{models → types/src/models}/segments/EllipseArc.d.ts +5 -5
- package/dist/{models → types/src/models}/segments/Line.d.ts +4 -4
- package/dist/{models → types/src/models}/segments/QuadraticBezier.d.ts +4 -4
- package/dist/{models → types/src/models}/segments/Segment.d.ts +4 -4
- package/dist/{models → types/src/models}/segments/utils/deCasteljau.d.ts +1 -1
- package/dist/types/src/models/segments/utils/isSegment.d.ts +8 -0
- package/dist/{models → types/src/models}/utils/Transformable.d.ts +2 -2
- package/dist/{offsetOperations.d.ts → types/src/offsetOperations.d.ts} +4 -4
- package/dist/types/src/operations.d.ts +2 -0
- package/dist/types/src/utils/applyMixins.d.ts +1 -0
- package/dist/types/src/utils/listOfFigures.d.ts +4 -0
- package/dist/types/src/utils/projectPointOnLine.d.ts +3 -0
- package/dist/{utils → types/src/utils}/removeDuplicatePoints.d.ts +1 -1
- package/dist/{vectorOperations.d.ts → types/src/vectorOperations.d.ts} +1 -1
- package/package.json +4 -4
- package/dist/Diagram-2450b2e6.js.map +0 -1
- package/dist/Diagram-57e17509.cjs +0 -4
- package/dist/Diagram-57e17509.cjs.map +0 -1
- package/dist/QuadraticBezier-e116a2d6.js +0 -3647
- package/dist/QuadraticBezier-e116a2d6.js.map +0 -1
- package/dist/QuadraticBezier-e3d7218b.cjs +0 -9
- package/dist/QuadraticBezier-e3d7218b.cjs.map +0 -1
- package/dist/algorithms/distances/lineArcDistance.d.ts +0 -3
- package/dist/algorithms/intersections/arcEllipseArcIntersection.d.ts +0 -3
- package/dist/algorithms/intersections/arcsCubicBezierIntersection.d.ts +0 -5
- package/dist/algorithms/intersections/arcsQuadraticBezierIntersection.d.ts +0 -5
- package/dist/algorithms/intersections/ellipseEllipseIntersection.d.ts +0 -4
- package/dist/algorithms/intersections/lineArcIntersection.d.ts +0 -4
- package/dist/algorithms/intersections/lineBezierIntersection.d.ts +0 -5
- package/dist/algorithms/intersections/lineEllipseArcIntersection.d.ts +0 -4
- package/dist/algorithms/intersections/rayIntersections.d.ts +0 -3
- package/dist/algorithms/simplify.d.ts +0 -3
- package/dist/api/drawShape.d.ts +0 -2
- package/dist/api/models.d.ts +0 -1
- package/dist/api/svg.d.ts +0 -1
- package/dist/draw-27ac6dae.cjs +0 -2
- package/dist/export/svg/api.d.ts +0 -6
- package/dist/import/json/importJSON.d.ts +0 -9
- package/dist/models/exports.d.ts +0 -15
- package/dist/models/segments/utils/isSegment.d.ts +0 -8
- package/dist/operations.d.ts +0 -2
- package/dist/utils/listOfFigures.d.ts +0 -4
- package/dist/utils/projectPointOnLine.d.ts +0 -3
- package/dist/wrapSVG-02b823ac.cjs.map +0 -1
- package/dist/wrapSVG-0ec8a111.js.map +0 -1
- /package/dist/{algorithms → types/src/algorithms}/optimisation/Brent.d.ts +0 -0
- /package/dist/{algorithms → types/src/algorithms}/optimisation/DiRect.d.ts +0 -0
- /package/dist/{algorithms → types/src/algorithms}/solvers/solvePolynomials.d.ts +0 -0
- /package/dist/{definitions.d.ts → types/src/definitions.d.ts} +0 -0
- /package/dist/{utils → types/src/utils}/allCombinations.d.ts +0 -0
- /package/dist/{utils → types/src/utils}/allPairs.d.ts +0 -0
- /package/dist/{utils → types/src/utils}/angularDistance.d.ts +0 -0
- /package/dist/{utils → types/src/utils}/range.d.ts +0 -0
- /package/dist/{utils → types/src/utils}/removeDuplicateValues.d.ts +0 -0
- /package/dist/{utils → types/src/utils}/unitAngle.d.ts +0 -0
- /package/dist/{utils → types/src/utils}/zip.d.ts +0 -0
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { EllipseArc } from "../../models/segments/EllipseArc.js";
|
|
2
|
-
import { Arc } from "../../models/segments/Arc.js";
|
|
3
|
-
import { Vector } from "../../definitions.js";
|
|
4
|
-
import { CubicBezier } from "../../models/segments/CubicBezier.js";
|
|
5
|
-
export declare function arcsCubicBezierIntersection(arc: EllipseArc | Arc, curve: CubicBezier): Vector[];
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { EllipseArc } from "../../models/segments/EllipseArc.js";
|
|
2
|
-
import { Arc } from "../../models/segments/Arc.js";
|
|
3
|
-
import { Vector } from "../../definitions.js";
|
|
4
|
-
import { QuadraticBezier } from "../../models/segments/QuadraticBezier.js";
|
|
5
|
-
export declare function arcsQuadraticBezierIntersection(arc: EllipseArc | Arc, curve: QuadraticBezier): Vector[];
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { EllipseArc } from "../../models/segments/EllipseArc.js";
|
|
2
|
-
import { Arc } from "../../models/segments/Arc.js";
|
|
3
|
-
import { Vector } from "../../definitions.js";
|
|
4
|
-
export declare function ellipseEllipseIntersection(arc1: EllipseArc | Arc, arc2: EllipseArc): Vector[];
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Line } from "../../models/segments/Line.js";
|
|
2
|
-
import { CubicBezier } from "../../models/segments/CubicBezier.js";
|
|
3
|
-
import { QuadraticBezier } from "../../models/segments/QuadraticBezier.js";
|
|
4
|
-
import { Vector } from "../../definitions.js";
|
|
5
|
-
export declare function lineBezierIntersection(line: Line, curve: CubicBezier | QuadraticBezier): Vector[];
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { Line } from "../../models/segments/Line.js";
|
|
2
|
-
import { EllipseArc } from "../../models/segments/EllipseArc.js";
|
|
3
|
-
import { Vector } from "../../definitions.js";
|
|
4
|
-
export declare function lineEllipseArcIntersection(line: Line, arc: EllipseArc, precision?: number): Vector[];
|
package/dist/api/drawShape.d.ts
DELETED
package/dist/api/models.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "../models/exports.js";
|
package/dist/api/svg.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "../export/svg/api.js";
|
package/dist/draw-27ac6dae.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var b=Object.defineProperty;var y=(i,t,e)=>t in i?b(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var g=(i,t,e)=>(y(i,typeof t!="symbol"?t+"":t,e),e);const r=require("./QuadraticBezier-e3d7218b.cjs"),p=require("./Diagram-57e17509.cjs");class m{constructor(t,e){this.firstPoint=t,this.lastPoint=e}}function A(i,t){if(i instanceof r.Line)return x(i,t);if(i instanceof r.Arc)return _(i,t);throw new Error("Not implemented")}function x(i,t){const{firstPoint:e,lastPoint:n}=i,s=i.normalVector;return new r.Line(r.add(e,r.scalarMultiply(s,t)),r.add(n,r.scalarMultiply(s,t)))}function _(i,t){const e=r.add(i.firstPoint,r.scalarMultiply(r.perpendicular(i.tangentAtFirstPoint),t)),n=r.add(i.lastPoint,r.scalarMultiply(r.perpendicular(i.tangentAtLastPoint),t)),s=t*(i.clockwise?1:-1);return i.radius+s<i.precision?new m(e,n):new r.Arc(e,n,i.center,i.clockwise)}function C(i,t,e){const n=r.crossProduct(i.tangentAtLastPoint,t.tangentAtFirstPoint);if(Math.abs(n)<1e-10)return null;const s=n>0?1:-1,o=Math.abs(e)*s,a=A(i,o),h=A(t,o);if(a instanceof m||h instanceof m)return null;let c;try{c=p.findIntersections(a,h,1e-9).at(-1)}catch{return null}if(!c)return null;const l=c,f=(T,v)=>{const L=v.tangentAt(l),D=r.perpendicularClockwise(L),E=r.add(l,r.scalarMultiply(D,o));return T.splitAt(E)},[u]=f(i,a),[,d]=f(t,h);return{first:u,second:d,center:l}}function P(i,t,e){const n=C(i,t,e);if(!n)return console.warn("Cannot fillet between segments",i.repr,t.repr),[i,t];const{first:s,second:o}=n;return[s,r.tangentArc(s.lastPoint,o.firstPoint,s.tangentAtLastPoint),o]}function w(i,t,e){const n=C(i,t,e);if(!n)return console.warn("Cannot chamfer between segments",i.repr,t.repr),[i,t];const{first:s,second:o}=n;return[s,new r.Line(s.lastPoint,o.firstPoint),o]}const F=i=>{let t;i?typeof i=="number"||Array.isArray(i)&&i.length===2?t={endTangent:i}:t={endTangent:0,...i}:t={endTangent:[1,0]};const{endTangent:e,startFactor:n=1,endFactor:s=1,startTangent:o}=t;let a;typeof e=="number"?a=r.polarToCartesian(1,e*r.DEG2RAD):a=e;let h;return typeof o=="number"?h=r.polarToCartesian(1,o*r.DEG2RAD):h=o,{endTangent:a,startFactor:n,endFactor:s,startTangent:h}};function S(i,{ignoreChecks:t=!1}={}){return new p.Diagram([new p.Figure(new p.Loop([...i],{ignoreChecks:t}))])}class M{constructor(t=[0,0]){g(this,"pointer");g(this,"firstPoint");g(this,"pendingSegments");g(this,"_nextCorner");this.pointer=t,this.firstPoint=t,this.pendingSegments=[],this._nextCorner=null}movePointerTo(t){if(this.pendingSegments.length)throw new Error("You can only move the pointer if there is no segment defined");return this.pointer=t,this.firstPoint=t,this}saveSegment(t){if(r.sameVector(t.firstPoint,t.lastPoint))throw new Error(`Segment has no length, ${t.repr}`);if(!this._nextCorner)return this.pendingSegments.push(t),this;const e=this.pendingSegments.pop();if(!e)throw new Error("bug in the custom corner algorithm");const n=this._nextCorner.mode==="chamfer"?w:P;return this.pendingSegments.push(...n(e,t,this._nextCorner.radius)),this._nextCorner=null,this}lineTo(t){const e=new r.Line(this.pointer,t);return this.pointer=t,this.saveSegment(e)}line(t,e){return this.lineTo([this.pointer[0]+t,this.pointer[1]+e])}vLine(t){return this.line(0,t)}hLine(t){return this.line(t,0)}vLineTo(t){return this.lineTo([this.pointer[0],t])}hLineTo(t){return this.lineTo([t,this.pointer[1]])}polarLineTo([t,e]){const n=e*r.DEG2RAD,s=r.polarToCartesian(t,n);return this.lineTo(s)}polarLine(t,e){const n=e*r.DEG2RAD,[s,o]=r.polarToCartesian(t,n);return this.line(s,o)}tangentLine(t){const e=this.pendingSegments.at(-1);if(!e)throw new Error("You need a previous segment to sketch a tangent line");const[n,s]=e.tangentAtLastPoint;return this.line(n*t,s*t)}threePointsArcTo(t,e){return this.saveSegment(r.threePointsArc(this.pointer,e,t)),this.pointer=t,this}threePointsArc(t,e,n,s){const[o,a]=this.pointer;return this.threePointsArcTo([o+t,a+e],[o+n,a+s])}sagittaArcTo(t,e){if(!e)return this.lineTo(t);const n=new r.Line(this.pointer,t),s=r.perpendicular(n.tangentAtFirstPoint),o=r.add(n.midPoint,r.scalarMultiply(s,e));return this.threePointsArcTo(t,o)}sagittaArc(t,e,n){return this.sagittaArcTo([t+this.pointer[0],e+this.pointer[1]],n)}vSagittaArc(t,e){return this.sagittaArc(0,t,e)}hSagittaArc(t,e){return this.sagittaArc(t,0,e)}bulgeArcTo(t,e){if(!e)return this.lineTo(t);const n=r.distance(this.pointer,t)/2,s=-e*n;return this.sagittaArcTo(t,s)}bulgeArc(t,e,n){return this.bulgeArcTo([t+this.pointer[0],e+this.pointer[1]],n)}vBulgeArc(t,e){return this.bulgeArc(0,t,e)}hBulgeArc(t,e){return this.bulgeArc(t,0,e)}tangentArcTo(t,e){const n=this.pendingSegments.at(-1);if(!n)throw new Error("You need a previous curve to sketch a tangent arc");return this.saveSegment(r.tangentArc(this.pointer,t,e??n.tangentAtLastPoint)),this.pointer=t,this}tangentArc(t,e,n){const[s,o]=this.pointer;return this.tangentArcTo([t+s,e+o],n)}ellipseTo(t,e,n,s,o,a){return this.saveSegment(r.svgEllipse(this.pointer,t,e,n,s,o,a)),this.pointer=t,this}ellipse(t,e,n,s,o,a,h){return this.ellipseTo([t+this.pointer[0],e+this.pointer[1]],n,s,o,a,h)}halfEllipseTo(t,e){const[n,s]=r.cartesianToPolar(r.subtract(t,this.pointer));return this.ellipseTo(t,n/2,Math.abs(e),s*r.RAD2DEG,!0,e>0)}halfEllipse(t,e,n){return this.halfEllipseTo([t+this.pointer[0],e+this.pointer[1]],n)}cubicBezierCurveTo(t,e,n){return this.saveSegment(new r.CubicBezier(this.pointer,t,e,n)),this.pointer=t,this}quadraticBezierCurveTo(t,e){return this.saveSegment(new r.QuadraticBezier(this.pointer,t,e)),this.pointer=t,this}smoothCurveTo(t,e){const{endTangent:n,startTangent:s,startFactor:o,endFactor:a}=F(e),h=this.pendingSegments.length?this.pendingSegments[this.pendingSegments.length-1]:null,c=r.distance(this.pointer,t)/3;let l;s?l=s:h?l=h.tangentAtLastPoint:l=[1,0],l=r.normalize(l);const f=[this.pointer[0]+l[0]*o*c,this.pointer[1]+l[1]*o*c];let u=n;u=r.normalize(u);const d=[t[0]-u[0]*a*c,t[1]-u[1]*a*c];return this.cubicBezierCurveTo(t,f,d)}smoothCurve(t,e,n){return this.smoothCurveTo([t+this.pointer[0],e+this.pointer[1]],n)}customCorner(t,e="fillet"){if(!this.pendingSegments.length)throw new Error("You need a segment defined to fillet the angle");return t?(this._nextCorner={mode:e,radius:t},this):this}_customCornerLastWithFirst(t,e="fillet"){if(!t)return;const n=this.pendingSegments.pop(),s=this.pendingSegments.shift();if(!n||!s)throw new Error("Not enough curves to close and fillet");const o=e==="chamfer"?w:P;this.pendingSegments.push(...o(n,s,t))}close(t=!1){if(!this.pendingSegments.length)throw new Error("No segments to close");const e=this.pendingSegments[0],n=this.pendingSegments.at(-1);return r.sameVector(e.firstPoint,n.lastPoint)||this.lineTo(e.firstPoint),this._nextCorner!==null&&(this._customCornerLastWithFirst(this._nextCorner.radius,this._nextCorner.mode),this._nextCorner=null),S(this.pendingSegments,{ignoreChecks:t})}closeWithMirror(t=!1){if(!this.pendingSegments.length)throw new Error("No segments to close");const e=this.pendingSegments[0],n=this.pendingSegments.at(-1),s=r.subtract(n.lastPoint,e.firstPoint),o=new r.TransformationMatrix().mirrorLine(s,e.firstPoint),a=this.pendingSegments.map(h=>h.transform(o).reverse());return a.reverse(),S([...this.pendingSegments,...a],{ignoreChecks:t})}asStrand(){return new p.Strand([...this.pendingSegments])}get isClosed(){var t;return r.sameVector(this.pointer,(t=this.pendingSegments[0])==null?void 0:t.firstPoint)}}function R(i=[0,0]){return new M(i)}exports.DegenerateSegment=m;exports.draw=R;exports.offsetSegment=A;
|
|
2
|
-
//# sourceMappingURL=draw-27ac6dae.cjs.map
|
package/dist/export/svg/api.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { svgDiagram } from "./svgDiagram.js";
|
|
2
|
-
export { svgFigure } from "./svgFigure.js";
|
|
3
|
-
export { svgLoop } from "./svgLoop.js";
|
|
4
|
-
export { svgSegmentToPath } from "./svgSegment.js";
|
|
5
|
-
export { svgStrand } from "./svgStrand.js";
|
|
6
|
-
export { svgViewbox } from "./wrapSVG.js";
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Line } from "../../models/segments/Line.js";
|
|
2
|
-
import { Arc } from "../../models/segments/Arc.js";
|
|
3
|
-
import { Loop } from "../../models/Loop.js";
|
|
4
|
-
import { Figure } from "../../models/Figure.js";
|
|
5
|
-
import { Diagram } from "../../models/Diagram.js";
|
|
6
|
-
import { EllipseArc } from "../../models/segments/EllipseArc.js";
|
|
7
|
-
import { CubicBezier } from "../../models/segments/CubicBezier.js";
|
|
8
|
-
import { QuadraticBezier } from "../../models/segments/QuadraticBezier.js";
|
|
9
|
-
export declare function importJSON(json: any): Diagram | Figure | Loop | Line | Arc | EllipseArc | CubicBezier | QuadraticBezier;
|
package/dist/models/exports.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export { Diagram } from "./Diagram.js";
|
|
2
|
-
export { Figure } from "./Figure.js";
|
|
3
|
-
export { Loop } from "./Loop.js";
|
|
4
|
-
export { Strand } from "./Strand.js";
|
|
5
|
-
export type { Stroke } from "./Stroke.js";
|
|
6
|
-
export { BoundingBox } from "./BoundingBox.js";
|
|
7
|
-
export { TransformationMatrix } from "./TransformationMatrix.js";
|
|
8
|
-
export { Line } from "./segments/Line.js";
|
|
9
|
-
export { Arc } from "./segments/Arc.js";
|
|
10
|
-
export { EllipseArc } from "./segments/EllipseArc.js";
|
|
11
|
-
export { CubicBezier } from "./segments/CubicBezier.js";
|
|
12
|
-
export { QuadraticBezier } from "./segments/QuadraticBezier.js";
|
|
13
|
-
export type { Segment } from "./segments/Segment.js";
|
|
14
|
-
export { isSegment } from "./segments/utils/isSegment.js";
|
|
15
|
-
export { Transformable } from "./utils/Transformable.js";
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Arc } from "../Arc.js";
|
|
2
|
-
import { CubicBezier } from "../CubicBezier.js";
|
|
3
|
-
import { EllipseArc } from "../EllipseArc.js";
|
|
4
|
-
import { Line } from "../Line.js";
|
|
5
|
-
import { QuadraticBezier } from "../QuadraticBezier.js";
|
|
6
|
-
import { Segment } from "../Segment.js";
|
|
7
|
-
export declare const ALL_SEGMENT_CLASSES: (typeof Line | typeof Arc | typeof CubicBezier | typeof QuadraticBezier | typeof EllipseArc)[];
|
|
8
|
-
export declare function isSegment(s: unknown): s is Segment;
|
package/dist/operations.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wrapSVG-02b823ac.cjs","sources":["../src/export/svg/svgSegment.ts","../src/export/svg/svgLoop.ts","../src/export/svg/svgFigure.ts","../src/export/svg/svgDiagram.ts","../src/export/svg/svgStrand.ts","../src/export/svg/wrapSVG.ts"],"sourcesContent":["import { Arc } from \"../../models/segments/Arc.js\";\nimport { CubicBezier } from \"../../models/segments/CubicBezier.js\";\nimport { EllipseArc } from \"../../models/segments/EllipseArc.js\";\nimport { Line } from \"../../models/segments/Line.js\";\nimport { QuadraticBezier } from \"../../models/segments/QuadraticBezier.js\";\nimport { Segment } from \"../../models/segments/Segment.js\";\nimport { RAD2DEG } from \"../../vectorOperations.js\";\n\nfunction formatPoint([x, y]: [number, number]) {\n return `${x} ${y}`;\n}\n\nexport function svgSegmentToPath(segment: Segment) {\n if (segment instanceof Line) {\n return `L ${formatPoint(segment.lastPoint)}`;\n }\n if (segment instanceof Arc) {\n return `A ${segment.radius} ${segment.radius} 0 ${\n segment.angularLength > Math.PI ? \"1\" : \"0\"\n } ${segment.clockwise ? \"0\" : \"1\"} ${formatPoint(segment.lastPoint)}`;\n }\n if (segment instanceof EllipseArc) {\n return `A ${segment.majorRadius} ${segment.minorRadius} ${\n segment.tiltAngle * RAD2DEG\n } ${segment.deltaAngle > Math.PI ? \"1\" : \"0\"} ${\n segment.clockwise ? \"0\" : \"1\"\n } ${formatPoint(segment.lastPoint)}`;\n }\n\n if (segment instanceof QuadraticBezier) {\n return `Q ${[\n formatPoint(segment.controlPoint),\n formatPoint(segment.lastPoint),\n ].join(\" \")}`;\n }\n\n if (segment instanceof CubicBezier) {\n return `C ${[\n formatPoint(segment.firstControlPoint),\n formatPoint(segment.lastControlPoint),\n formatPoint(segment.lastPoint),\n ].join(\" \")}`;\n }\n\n throw new Error(\"Unknown segment type\");\n}\n","import type { Loop } from \"../../models/Loop.js\";\nimport { svgSegmentToPath } from \"./svgSegment.js\";\n\nexport function svgLoop(loop: Loop) {\n const start = `M ${loop.firstPoint.join(\" \")}`;\n const segments = loop.segments.map(svgSegmentToPath).join(\" \");\n return `${start} ${segments} Z`;\n}\n","import type { Figure } from \"../../models/Figure.js\";\nimport { svgLoop } from \"./svgLoop.js\";\n\nexport function svgFigure(figure: Figure) {\n const path = figure.allLoops.map(svgLoop).join(\" \");\n return `<path d=\"${path}\" />`;\n}\n","import { Diagram } from \"../../models/Diagram.js\";\nimport { svgFigure } from \"./svgFigure.js\";\n\nexport function svgDiagram(diagram: Diagram) {\n return `<g>\n ${diagram.figures.map(svgFigure).join(\"\\n\")}\n</g>`;\n}\n","import type { Strand } from \"../../models/Strand.js\";\nimport { svgSegmentToPath } from \"./svgSegment.js\";\n\nexport function svgStrand(strand: Strand) {\n const start = `M ${strand.firstPoint.join(\" \")}`;\n const segments = strand.segments.map(svgSegmentToPath).join(\" \");\n return `${start} ${segments}`;\n}\n","import { BoundingBox } from \"../../models/BoundingBox.js\";\n\nexport function svgViewbox(bbox: BoundingBox, margin = 1) {\n const minX = bbox.xMin - margin;\n const minY = bbox.yMin - margin;\n\n return `${minX} ${minY} ${bbox.width + 2 * margin} ${\n bbox.height + 2 * margin\n }`;\n}\n\n// The list comes from https://oreillymedia.github.io/Using_SVG/guide/units.html\nexport type SVGUnit = \"mm\" | \"cm\" | \"in\" | \"pc\" | \"px\" | \"pt\";\n\nexport function wrapSVG(\n body: string,\n boundingBox: BoundingBox,\n margin = 1,\n unit: null | SVGUnit,\n) {\n const vbox = svgViewbox(boundingBox, margin);\n const sizes = unit\n ? `width=\"${boundingBox.width + 2 * margin}${unit}\" height=\"${\n boundingBox.height + 2 * margin\n }${unit}\"`\n : \"\";\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${vbox}\" fill=\"none\" stroke=\"black\" stroke-width=\"0.2%\" vector-effect=\"non-scaling-stroke\" ${sizes}>\n ${body}\n</svg>`;\n}\n"],"names":["formatPoint","x","y","svgSegmentToPath","segment","Line","Arc","EllipseArc","RAD2DEG","QuadraticBezier","CubicBezier","svgLoop","loop","start","segments","svgFigure","figure","svgDiagram","diagram","svgStrand","strand","svgViewbox","bbox","margin","minX","minY","wrapSVG","body","boundingBox","unit","vbox","sizes"],"mappings":"+DAQA,SAASA,EAAY,CAACC,EAAGC,CAAC,EAAqB,CAC7C,MAAO,GAAGD,KAAKC,GACjB,CAEO,SAASC,EAAiBC,EAAkB,CACjD,GAAIA,aAAmBC,EAAAA,KACd,MAAA,KAAKL,EAAYI,EAAQ,SAAS,IAE3C,GAAIA,aAAmBE,EAAAA,IACrB,MAAO,KAAKF,EAAQ,UAAUA,EAAQ,YACpCA,EAAQ,cAAgB,KAAK,GAAK,IAAM,OACtCA,EAAQ,UAAY,IAAM,OAAOJ,EAAYI,EAAQ,SAAS,IAEpE,GAAIA,aAAmBG,EAAAA,WACd,MAAA,KAAKH,EAAQ,eAAeA,EAAQ,eACzCA,EAAQ,UAAYI,aAClBJ,EAAQ,WAAa,KAAK,GAAK,IAAM,OACvCA,EAAQ,UAAY,IAAM,OACxBJ,EAAYI,EAAQ,SAAS,IAGnC,GAAIA,aAAmBK,EAAAA,gBACrB,MAAO,KAAK,CACVT,EAAYI,EAAQ,YAAY,EAChCJ,EAAYI,EAAQ,SAAS,CAAA,EAC7B,KAAK,GAAG,IAGZ,GAAIA,aAAmBM,EAAAA,YACrB,MAAO,KAAK,CACVV,EAAYI,EAAQ,iBAAiB,EACrCJ,EAAYI,EAAQ,gBAAgB,EACpCJ,EAAYI,EAAQ,SAAS,CAAA,EAC7B,KAAK,GAAG,IAGN,MAAA,IAAI,MAAM,sBAAsB,CACxC,CC1CO,SAASO,EAAQC,EAAY,CAClC,MAAMC,EAAQ,KAAKD,EAAK,WAAW,KAAK,GAAG,IACrCE,EAAWF,EAAK,SAAS,IAAIT,CAAgB,EAAE,KAAK,GAAG,EAC7D,MAAO,GAAGU,KAASC,KACrB,CCJO,SAASC,EAAUC,EAAgB,CAExC,MAAO,YADMA,EAAO,SAAS,IAAIL,CAAO,EAAE,KAAK,GAAG,OAEpD,CCHO,SAASM,EAAWC,EAAkB,CACpC,MAAA;AAAA,IACLA,EAAQ,QAAQ,IAAIH,CAAS,EAAE,KAAK;AAAA,CAAI;AAAA,KAE5C,CCJO,SAASI,EAAUC,EAAgB,CACxC,MAAMP,EAAQ,KAAKO,EAAO,WAAW,KAAK,GAAG,IACvCN,EAAWM,EAAO,SAAS,IAAIjB,CAAgB,EAAE,KAAK,GAAG,EAC/D,MAAO,GAAGU,KAASC,GACrB,CCLgB,SAAAO,EAAWC,EAAmBC,EAAS,EAAG,CAClD,MAAAC,EAAOF,EAAK,KAAOC,EACnBE,EAAOH,EAAK,KAAOC,EAElB,MAAA,GAAGC,KAAQC,KAAQH,EAAK,MAAQ,EAAIC,KACzCD,EAAK,OAAS,EAAIC,GAEtB,CAKO,SAASG,EACdC,EACAC,EACAL,EAAS,EACTM,EACA,CACM,MAAAC,EAAOT,EAAWO,EAAaL,CAAM,EACrCQ,EAAQF,EACV,UAAUD,EAAY,MAAQ,EAAIL,IAASM,cACzCD,EAAY,OAAS,EAAIL,IACxBM,KACH,GAEG,MAAA;AAAA,iEACwDC,wFAA2FC;AAAA,MACtJJ;AAAA,OAEN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wrapSVG-0ec8a111.js","sources":["../src/export/svg/svgSegment.ts","../src/export/svg/svgLoop.ts","../src/export/svg/svgFigure.ts","../src/export/svg/svgDiagram.ts","../src/export/svg/svgStrand.ts","../src/export/svg/wrapSVG.ts"],"sourcesContent":["import { Arc } from \"../../models/segments/Arc.js\";\nimport { CubicBezier } from \"../../models/segments/CubicBezier.js\";\nimport { EllipseArc } from \"../../models/segments/EllipseArc.js\";\nimport { Line } from \"../../models/segments/Line.js\";\nimport { QuadraticBezier } from \"../../models/segments/QuadraticBezier.js\";\nimport { Segment } from \"../../models/segments/Segment.js\";\nimport { RAD2DEG } from \"../../vectorOperations.js\";\n\nfunction formatPoint([x, y]: [number, number]) {\n return `${x} ${y}`;\n}\n\nexport function svgSegmentToPath(segment: Segment) {\n if (segment instanceof Line) {\n return `L ${formatPoint(segment.lastPoint)}`;\n }\n if (segment instanceof Arc) {\n return `A ${segment.radius} ${segment.radius} 0 ${\n segment.angularLength > Math.PI ? \"1\" : \"0\"\n } ${segment.clockwise ? \"0\" : \"1\"} ${formatPoint(segment.lastPoint)}`;\n }\n if (segment instanceof EllipseArc) {\n return `A ${segment.majorRadius} ${segment.minorRadius} ${\n segment.tiltAngle * RAD2DEG\n } ${segment.deltaAngle > Math.PI ? \"1\" : \"0\"} ${\n segment.clockwise ? \"0\" : \"1\"\n } ${formatPoint(segment.lastPoint)}`;\n }\n\n if (segment instanceof QuadraticBezier) {\n return `Q ${[\n formatPoint(segment.controlPoint),\n formatPoint(segment.lastPoint),\n ].join(\" \")}`;\n }\n\n if (segment instanceof CubicBezier) {\n return `C ${[\n formatPoint(segment.firstControlPoint),\n formatPoint(segment.lastControlPoint),\n formatPoint(segment.lastPoint),\n ].join(\" \")}`;\n }\n\n throw new Error(\"Unknown segment type\");\n}\n","import type { Loop } from \"../../models/Loop.js\";\nimport { svgSegmentToPath } from \"./svgSegment.js\";\n\nexport function svgLoop(loop: Loop) {\n const start = `M ${loop.firstPoint.join(\" \")}`;\n const segments = loop.segments.map(svgSegmentToPath).join(\" \");\n return `${start} ${segments} Z`;\n}\n","import type { Figure } from \"../../models/Figure.js\";\nimport { svgLoop } from \"./svgLoop.js\";\n\nexport function svgFigure(figure: Figure) {\n const path = figure.allLoops.map(svgLoop).join(\" \");\n return `<path d=\"${path}\" />`;\n}\n","import { Diagram } from \"../../models/Diagram.js\";\nimport { svgFigure } from \"./svgFigure.js\";\n\nexport function svgDiagram(diagram: Diagram) {\n return `<g>\n ${diagram.figures.map(svgFigure).join(\"\\n\")}\n</g>`;\n}\n","import type { Strand } from \"../../models/Strand.js\";\nimport { svgSegmentToPath } from \"./svgSegment.js\";\n\nexport function svgStrand(strand: Strand) {\n const start = `M ${strand.firstPoint.join(\" \")}`;\n const segments = strand.segments.map(svgSegmentToPath).join(\" \");\n return `${start} ${segments}`;\n}\n","import { BoundingBox } from \"../../models/BoundingBox.js\";\n\nexport function svgViewbox(bbox: BoundingBox, margin = 1) {\n const minX = bbox.xMin - margin;\n const minY = bbox.yMin - margin;\n\n return `${minX} ${minY} ${bbox.width + 2 * margin} ${\n bbox.height + 2 * margin\n }`;\n}\n\n// The list comes from https://oreillymedia.github.io/Using_SVG/guide/units.html\nexport type SVGUnit = \"mm\" | \"cm\" | \"in\" | \"pc\" | \"px\" | \"pt\";\n\nexport function wrapSVG(\n body: string,\n boundingBox: BoundingBox,\n margin = 1,\n unit: null | SVGUnit,\n) {\n const vbox = svgViewbox(boundingBox, margin);\n const sizes = unit\n ? `width=\"${boundingBox.width + 2 * margin}${unit}\" height=\"${\n boundingBox.height + 2 * margin\n }${unit}\"`\n : \"\";\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${vbox}\" fill=\"none\" stroke=\"black\" stroke-width=\"0.2%\" vector-effect=\"non-scaling-stroke\" ${sizes}>\n ${body}\n</svg>`;\n}\n"],"names":["formatPoint","x","y","svgSegmentToPath","segment","Line","Arc","EllipseArc","RAD2DEG","QuadraticBezier","CubicBezier","svgLoop","loop","start","segments","svgFigure","figure","svgDiagram","diagram","svgStrand","strand","svgViewbox","bbox","margin","minX","minY","wrapSVG","body","boundingBox","unit","vbox","sizes"],"mappings":";AAQA,SAASA,EAAY,CAACC,GAAGC,CAAC,GAAqB;AAC7C,SAAO,GAAGD,KAAKC;AACjB;AAEO,SAASC,EAAiBC,GAAkB;AACjD,MAAIA,aAAmBC;AACd,WAAA,KAAKL,EAAYI,EAAQ,SAAS;AAE3C,MAAIA,aAAmBE;AACrB,WAAO,KAAKF,EAAQ,UAAUA,EAAQ,YACpCA,EAAQ,gBAAgB,KAAK,KAAK,MAAM,OACtCA,EAAQ,YAAY,MAAM,OAAOJ,EAAYI,EAAQ,SAAS;AAEpE,MAAIA,aAAmBG;AACd,WAAA,KAAKH,EAAQ,eAAeA,EAAQ,eACzCA,EAAQ,YAAYI,KAClBJ,EAAQ,aAAa,KAAK,KAAK,MAAM,OACvCA,EAAQ,YAAY,MAAM,OACxBJ,EAAYI,EAAQ,SAAS;AAGnC,MAAIA,aAAmBK;AACrB,WAAO,KAAK;AAAA,MACVT,EAAYI,EAAQ,YAAY;AAAA,MAChCJ,EAAYI,EAAQ,SAAS;AAAA,IAAA,EAC7B,KAAK,GAAG;AAGZ,MAAIA,aAAmBM;AACrB,WAAO,KAAK;AAAA,MACVV,EAAYI,EAAQ,iBAAiB;AAAA,MACrCJ,EAAYI,EAAQ,gBAAgB;AAAA,MACpCJ,EAAYI,EAAQ,SAAS;AAAA,IAAA,EAC7B,KAAK,GAAG;AAGN,QAAA,IAAI,MAAM,sBAAsB;AACxC;AC1CO,SAASO,EAAQC,GAAY;AAClC,QAAMC,IAAQ,KAAKD,EAAK,WAAW,KAAK,GAAG,KACrCE,IAAWF,EAAK,SAAS,IAAIT,CAAgB,EAAE,KAAK,GAAG;AAC7D,SAAO,GAAGU,KAASC;AACrB;ACJO,SAASC,EAAUC,GAAgB;AAExC,SAAO,YADMA,EAAO,SAAS,IAAIL,CAAO,EAAE,KAAK,GAAG;AAEpD;ACHO,SAASM,EAAWC,GAAkB;AACpC,SAAA;AAAA,IACLA,EAAQ,QAAQ,IAAIH,CAAS,EAAE,KAAK;AAAA,CAAI;AAAA;AAE5C;ACJO,SAASI,EAAUC,GAAgB;AACxC,QAAMP,IAAQ,KAAKO,EAAO,WAAW,KAAK,GAAG,KACvCN,IAAWM,EAAO,SAAS,IAAIjB,CAAgB,EAAE,KAAK,GAAG;AAC/D,SAAO,GAAGU,KAASC;AACrB;ACLgB,SAAAO,EAAWC,GAAmBC,IAAS,GAAG;AAClD,QAAAC,IAAOF,EAAK,OAAOC,GACnBE,IAAOH,EAAK,OAAOC;AAElB,SAAA,GAAGC,KAAQC,KAAQH,EAAK,QAAQ,IAAIC,KACzCD,EAAK,SAAS,IAAIC;AAEtB;AAKO,SAASG,EACdC,GACAC,GACAL,IAAS,GACTM,GACA;AACM,QAAAC,IAAOT,EAAWO,GAAaL,CAAM,GACrCQ,IAAQF,IACV,UAAUD,EAAY,QAAQ,IAAIL,IAASM,cACzCD,EAAY,SAAS,IAAIL,IACxBM,OACH;AAEG,SAAA;AAAA,iEACwDC,wFAA2FC;AAAA,MACtJJ;AAAA;AAEN;"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|