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.
Files changed (156) hide show
  1. package/LICENSE +4 -658
  2. package/dist/QuadraticBezier-BAVasVfu.cjs +9 -0
  3. package/dist/QuadraticBezier-BAVasVfu.cjs.map +1 -0
  4. package/dist/QuadraticBezier-BzVqiExF.js +4736 -0
  5. package/dist/QuadraticBezier-BzVqiExF.js.map +1 -0
  6. package/dist/{draw-c7b2705c.js → draw-DqsKIWJD.js} +11 -18
  7. package/dist/{draw-c7b2705c.js.map → draw-DqsKIWJD.js.map} +1 -1
  8. package/dist/draw-NcYfDZjT.cjs +2 -0
  9. package/dist/{draw-27ac6dae.cjs.map → draw-NcYfDZjT.cjs.map} +1 -1
  10. package/dist/models-Dxwusy3i.cjs +4 -0
  11. package/dist/models-Dxwusy3i.cjs.map +1 -0
  12. package/dist/{Diagram-2450b2e6.js → models-WQ-B7GSL.js} +283 -284
  13. package/dist/models-WQ-B7GSL.js.map +1 -0
  14. package/dist/pantograph/drawShape.cjs +1 -1
  15. package/dist/pantograph/drawShape.cjs.map +1 -1
  16. package/dist/pantograph/drawShape.js +12 -14
  17. package/dist/pantograph/drawShape.js.map +1 -1
  18. package/dist/pantograph/models.cjs +1 -1
  19. package/dist/pantograph/models.js +2 -2
  20. package/dist/pantograph/svg.cjs +1 -1
  21. package/dist/pantograph/svg.js +5 -6
  22. package/dist/pantograph/svg.js.map +1 -1
  23. package/dist/pantograph.cjs +2 -2
  24. package/dist/pantograph.cjs.map +1 -1
  25. package/dist/pantograph.js +30 -41
  26. package/dist/pantograph.js.map +1 -1
  27. package/dist/{wrapSVG-0ec8a111.js → svg-BylQQgsL.js} +2 -2
  28. package/dist/svg-BylQQgsL.js.map +1 -0
  29. package/dist/{wrapSVG-02b823ac.cjs → svg-D0nYyMk7.cjs} +2 -2
  30. package/dist/svg-D0nYyMk7.cjs.map +1 -0
  31. package/dist/types/examples/importSVG.d.ts +4 -0
  32. package/dist/{algorithms → types/src/algorithms}/boolean/figureBooleans.d.ts +1 -1
  33. package/dist/{algorithms → types/src/algorithms}/boolean/loopBooleans.d.ts +1 -1
  34. package/dist/{algorithms → types/src/algorithms}/boolean/strandBoolean.d.ts +4 -4
  35. package/dist/{algorithms → types/src/algorithms}/boolean/strandsBetweenIntersections.d.ts +3 -3
  36. package/dist/{algorithms → types/src/algorithms}/distances/arcArcDistance.d.ts +1 -1
  37. package/dist/{algorithms → types/src/algorithms}/distances/genericDistance.d.ts +1 -1
  38. package/dist/{algorithms → types/src/algorithms}/distances/index.d.ts +1 -1
  39. package/dist/types/src/algorithms/distances/lineArcDistance.d.ts +3 -0
  40. package/dist/{algorithms → types/src/algorithms}/distances/lineLineDistance.d.ts +1 -1
  41. package/dist/{algorithms → types/src/algorithms}/filletSegments.d.ts +1 -1
  42. package/dist/{algorithms → types/src/algorithms}/intersections/arcArcIntersection.d.ts +2 -2
  43. package/dist/types/src/algorithms/intersections/arcEllipseArcIntersection.d.ts +3 -0
  44. package/dist/types/src/algorithms/intersections/arcsCubicBezierIntersection.d.ts +5 -0
  45. package/dist/types/src/algorithms/intersections/arcsQuadraticBezierIntersection.d.ts +5 -0
  46. package/dist/{algorithms → types/src/algorithms}/intersections/bezierClip.d.ts +3 -3
  47. package/dist/{algorithms → types/src/algorithms}/intersections/cubicBezierCubicBezierIntersection.d.ts +2 -2
  48. package/dist/{algorithms → types/src/algorithms}/intersections/ellipseArcEllipseArcIntersection.d.ts +2 -2
  49. package/dist/types/src/algorithms/intersections/ellipseEllipseIntersection.d.ts +4 -0
  50. package/dist/{algorithms → types/src/algorithms}/intersections/index.d.ts +2 -2
  51. package/dist/types/src/algorithms/intersections/lineArcIntersection.d.ts +4 -0
  52. package/dist/types/src/algorithms/intersections/lineBezierIntersection.d.ts +5 -0
  53. package/dist/types/src/algorithms/intersections/lineEllipseArcIntersection.d.ts +4 -0
  54. package/dist/{algorithms → types/src/algorithms}/intersections/lineLineIntersection.d.ts +4 -4
  55. package/dist/{algorithms → types/src/algorithms}/intersections/quadraticBezierQuadraticBezierIntersection.d.ts +2 -2
  56. package/dist/types/src/algorithms/intersections/rayIntersections.d.ts +3 -0
  57. package/dist/{algorithms → types/src/algorithms}/offsets/offsetFigure.d.ts +2 -2
  58. package/dist/{algorithms → types/src/algorithms}/offsets/offsetSegment.d.ts +4 -4
  59. package/dist/{algorithms → types/src/algorithms}/offsets/offsetStroke.d.ts +5 -5
  60. package/dist/{algorithms → types/src/algorithms}/organiseLoops.d.ts +2 -2
  61. package/dist/types/src/algorithms/simplify.d.ts +3 -0
  62. package/dist/types/src/algorithms/solvers/findZeroViaNewton.d.ts +1 -0
  63. package/dist/types/src/algorithms/solvers/zeroViaNewton.d.ts +1 -0
  64. package/dist/{algorithms → types/src/algorithms}/stitchSegments.d.ts +1 -1
  65. package/dist/types/src/api/drawShape.d.ts +2 -0
  66. package/dist/types/src/api/models.d.ts +1 -0
  67. package/dist/types/src/api/svg.d.ts +1 -0
  68. package/dist/{booleanOperations.d.ts → types/src/booleanOperations.d.ts} +5 -5
  69. package/dist/{draw.d.ts → types/src/draw.d.ts} +4 -4
  70. package/dist/{drawShape → types/src/drawShape}/drawCircle.d.ts +1 -1
  71. package/dist/types/src/drawShape/drawEllipse.d.ts +2 -0
  72. package/dist/{drawShape → types/src/drawShape}/drawRect.d.ts +1 -1
  73. package/dist/types/src/drawShape/drawSVGPath.d.ts +2 -0
  74. package/dist/types/src/drawShape/index.d.ts +4 -0
  75. package/dist/{export → types/src/export}/json/exportJSON.d.ts +94 -94
  76. package/dist/{export → types/src/export}/json/jsonDiagram.d.ts +31 -31
  77. package/dist/{export → types/src/export}/json/jsonFigure.d.ts +31 -31
  78. package/dist/{export → types/src/export}/json/jsonLoop.d.ts +16 -16
  79. package/dist/{export → types/src/export}/json/jsonSegment.d.ts +16 -16
  80. package/dist/types/src/export/svg/api.d.ts +6 -0
  81. package/dist/{export → types/src/export}/svg/exportSVG.d.ts +6 -6
  82. package/dist/{export → types/src/export}/svg/svgDiagram.d.ts +1 -1
  83. package/dist/{export → types/src/export}/svg/svgFigure.d.ts +1 -1
  84. package/dist/{export → types/src/export}/svg/svgLoop.d.ts +1 -1
  85. package/dist/{export → types/src/export}/svg/svgSegment.d.ts +1 -1
  86. package/dist/{export → types/src/export}/svg/svgStrand.d.ts +1 -1
  87. package/dist/{export → types/src/export}/svg/wrapSVG.d.ts +1 -1
  88. package/dist/types/src/import/json/importJSON.d.ts +9 -0
  89. package/dist/{main.d.ts → types/src/main.d.ts} +7 -7
  90. package/dist/{models → types/src/models}/BoundingBox.d.ts +1 -1
  91. package/dist/{models → types/src/models}/Diagram.d.ts +7 -7
  92. package/dist/{models → types/src/models}/Figure.d.ts +7 -7
  93. package/dist/{models → types/src/models}/Loop.d.ts +4 -4
  94. package/dist/{models → types/src/models}/Strand.d.ts +2 -2
  95. package/dist/{models → types/src/models}/Stroke.d.ts +5 -5
  96. package/dist/{models → types/src/models}/TransformationMatrix.d.ts +1 -1
  97. package/dist/types/src/models/exports.d.ts +15 -0
  98. package/dist/types/src/models/segments/AbstractSegment.d.ts +25 -0
  99. package/dist/{models → types/src/models}/segments/Arc.d.ts +4 -4
  100. package/dist/{models → types/src/models}/segments/CubicBezier.d.ts +4 -4
  101. package/dist/{models → types/src/models}/segments/EllipseArc.d.ts +5 -5
  102. package/dist/{models → types/src/models}/segments/Line.d.ts +4 -4
  103. package/dist/{models → types/src/models}/segments/QuadraticBezier.d.ts +4 -4
  104. package/dist/{models → types/src/models}/segments/Segment.d.ts +4 -4
  105. package/dist/{models → types/src/models}/segments/utils/deCasteljau.d.ts +1 -1
  106. package/dist/types/src/models/segments/utils/isSegment.d.ts +8 -0
  107. package/dist/{models → types/src/models}/utils/Transformable.d.ts +2 -2
  108. package/dist/{offsetOperations.d.ts → types/src/offsetOperations.d.ts} +4 -4
  109. package/dist/types/src/operations.d.ts +2 -0
  110. package/dist/types/src/utils/applyMixins.d.ts +1 -0
  111. package/dist/types/src/utils/listOfFigures.d.ts +4 -0
  112. package/dist/types/src/utils/projectPointOnLine.d.ts +3 -0
  113. package/dist/{utils → types/src/utils}/removeDuplicatePoints.d.ts +1 -1
  114. package/dist/{vectorOperations.d.ts → types/src/vectorOperations.d.ts} +1 -1
  115. package/package.json +4 -4
  116. package/dist/Diagram-2450b2e6.js.map +0 -1
  117. package/dist/Diagram-57e17509.cjs +0 -4
  118. package/dist/Diagram-57e17509.cjs.map +0 -1
  119. package/dist/QuadraticBezier-e116a2d6.js +0 -3647
  120. package/dist/QuadraticBezier-e116a2d6.js.map +0 -1
  121. package/dist/QuadraticBezier-e3d7218b.cjs +0 -9
  122. package/dist/QuadraticBezier-e3d7218b.cjs.map +0 -1
  123. package/dist/algorithms/distances/lineArcDistance.d.ts +0 -3
  124. package/dist/algorithms/intersections/arcEllipseArcIntersection.d.ts +0 -3
  125. package/dist/algorithms/intersections/arcsCubicBezierIntersection.d.ts +0 -5
  126. package/dist/algorithms/intersections/arcsQuadraticBezierIntersection.d.ts +0 -5
  127. package/dist/algorithms/intersections/ellipseEllipseIntersection.d.ts +0 -4
  128. package/dist/algorithms/intersections/lineArcIntersection.d.ts +0 -4
  129. package/dist/algorithms/intersections/lineBezierIntersection.d.ts +0 -5
  130. package/dist/algorithms/intersections/lineEllipseArcIntersection.d.ts +0 -4
  131. package/dist/algorithms/intersections/rayIntersections.d.ts +0 -3
  132. package/dist/algorithms/simplify.d.ts +0 -3
  133. package/dist/api/drawShape.d.ts +0 -2
  134. package/dist/api/models.d.ts +0 -1
  135. package/dist/api/svg.d.ts +0 -1
  136. package/dist/draw-27ac6dae.cjs +0 -2
  137. package/dist/export/svg/api.d.ts +0 -6
  138. package/dist/import/json/importJSON.d.ts +0 -9
  139. package/dist/models/exports.d.ts +0 -15
  140. package/dist/models/segments/utils/isSegment.d.ts +0 -8
  141. package/dist/operations.d.ts +0 -2
  142. package/dist/utils/listOfFigures.d.ts +0 -4
  143. package/dist/utils/projectPointOnLine.d.ts +0 -3
  144. package/dist/wrapSVG-02b823ac.cjs.map +0 -1
  145. package/dist/wrapSVG-0ec8a111.js.map +0 -1
  146. /package/dist/{algorithms → types/src/algorithms}/optimisation/Brent.d.ts +0 -0
  147. /package/dist/{algorithms → types/src/algorithms}/optimisation/DiRect.d.ts +0 -0
  148. /package/dist/{algorithms → types/src/algorithms}/solvers/solvePolynomials.d.ts +0 -0
  149. /package/dist/{definitions.d.ts → types/src/definitions.d.ts} +0 -0
  150. /package/dist/{utils → types/src/utils}/allCombinations.d.ts +0 -0
  151. /package/dist/{utils → types/src/utils}/allPairs.d.ts +0 -0
  152. /package/dist/{utils → types/src/utils}/angularDistance.d.ts +0 -0
  153. /package/dist/{utils → types/src/utils}/range.d.ts +0 -0
  154. /package/dist/{utils → types/src/utils}/removeDuplicateValues.d.ts +0 -0
  155. /package/dist/{utils → types/src/utils}/unitAngle.d.ts +0 -0
  156. /package/dist/{utils → types/src/utils}/zip.d.ts +0 -0
@@ -1,3 +0,0 @@
1
- import type { Line } from "../../models/segments/Line.js";
2
- import type { Arc } from "../../models/segments/Arc.js";
3
- export declare function lineArcDistance(line: Line, arc: Arc): number;
@@ -1,3 +0,0 @@
1
- import type { EllipseArc } from "../../models/segments/EllipseArc.js";
2
- import type { Arc } from "../../models/segments/Arc.js";
3
- export declare function arcEllipseArcIntersection(arc: Arc, ellipseArc: EllipseArc): import("../../definitions.js").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 { 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,4 +0,0 @@
1
- import { Line } from "../../models/segments/Line.js";
2
- import { Vector } from "../../definitions.js";
3
- import { Arc } from "../../models/segments/Arc.js";
4
- export declare function lineArcIntersection(line: Line, arc: Arc, precision?: number): 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[];
@@ -1,3 +0,0 @@
1
- import type { Vector } from "../../definitions.js";
2
- import { Segment } from "../../models/segments/Segment.js";
3
- export declare function rayIntersectionsCount(point: Vector, segment: Segment): number;
@@ -1,3 +0,0 @@
1
- import type { Stroke } from "../models/Stroke.js";
2
- import { Segment } from "../models/segments/Segment.js";
3
- export declare function simplifySegments(stroke: Stroke): Segment[] | null;
@@ -1,2 +0,0 @@
1
- export { drawCircle } from "../drawShape/drawCircle.js";
2
- export { drawRect } from "../drawShape/drawRect.js";
@@ -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";
@@ -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
@@ -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;
@@ -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;
@@ -1,2 +0,0 @@
1
- export * from "./booleanOperations.js";
2
- export * from "./offsetOperations.js";
@@ -1,4 +0,0 @@
1
- import { Diagram } from "../models/Diagram.js";
2
- import { Figure } from "../models/Figure.js";
3
- import { Loop } from "../models/Loop.js";
4
- export declare function listOfFigures(shape: Diagram | Figure | Loop): Figure[];
@@ -1,3 +0,0 @@
1
- import type { Vector } from "../definitions.js";
2
- import type { Line } from "../models/segments/Line.js";
3
- export declare function projectPointOnLine(line: Line, point: Vector): Vector;
@@ -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