geometrix 0.5.11 → 0.5.13
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/dist/index.d.ts +9 -1
- package/dist/index.js +15 -0
- package/package.json +7 -6
- package/dist/index.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -502,4 +502,12 @@ interface tParamValInFile {
|
|
|
502
502
|
declare function createParamFile(lastModif: string, idparams: tParamVal, comment: string): string;
|
|
503
503
|
declare function parseParamFile(fContentStr: string): [tParamValInFile, string];
|
|
504
504
|
|
|
505
|
-
|
|
505
|
+
type tDependencies = Record<string, string>;
|
|
506
|
+
interface tPackage {
|
|
507
|
+
name: string;
|
|
508
|
+
version: string;
|
|
509
|
+
dependencies: tDependencies;
|
|
510
|
+
}
|
|
511
|
+
declare function version_details(appPackage: tPackage): string[];
|
|
512
|
+
|
|
513
|
+
export { DesignParam, EBVolume, EExtrude, EFormat, Figure, PType, Point, ShapePoint, aBFromLaLbAa, aCFromLaLbLc, adjustCenter, adjustInit, adjustRect, adjustScale, adjustTranslate, adjustZero, bisector, canvas2point, canvasTranslatePolar, checkGeom, circleCenter, colors, contour, contourCircle, copyLayers, createParamFile, degToRad, designParam, ffix, figure, fileBin, fileBinContent, fileMime, fileSuffix, fileTextContent, fround, initGeom, initLayers, lbFromLaAaAb, lcFromLaLbAc, line, linePP, mergeFaces, oneDesignParam, pCheckbox, pDropdown, pNumber, paramListToVal, parseParamFile, point, point2canvas, prefixLog, radToDeg, radius2canvas, roundZero, type tAllLink, type tAllPageDef, type tBVolume, type tCanvasAdjust, type tContour, type tDesignParamList, type tExtrude, type tFaces, type tGeom, type tGeomFunc, type tInherit, type tLayers, type tPackage, type tPageDef, type tParamDef, type tParamVal, type tParamValInFile, type tPosiOrien, type tSubDesign, type tSubInst, type tVolume, vector, version_details, withinPiPi, withinZero2Pi };
|
package/dist/index.js
CHANGED
|
@@ -3788,6 +3788,20 @@ function parseParamFile(fContentStr) {
|
|
|
3788
3788
|
}
|
|
3789
3789
|
return [rObj, rlog];
|
|
3790
3790
|
}
|
|
3791
|
+
|
|
3792
|
+
// src/version_details.ts
|
|
3793
|
+
function version_details(appPackage) {
|
|
3794
|
+
const rStr = [];
|
|
3795
|
+
rStr.push("version details:");
|
|
3796
|
+
rStr.push(`${appPackage.name} : ${appPackage.version}`);
|
|
3797
|
+
rStr.push("dependencies:");
|
|
3798
|
+
const depList = Object.keys(appPackage.dependencies);
|
|
3799
|
+
for (const [idx, depN] of depList.entries()) {
|
|
3800
|
+
const depK = depN;
|
|
3801
|
+
rStr.push(`${idx + 1} : ${depN} : ${appPackage.dependencies[depK]}`);
|
|
3802
|
+
}
|
|
3803
|
+
return rStr;
|
|
3804
|
+
}
|
|
3791
3805
|
export {
|
|
3792
3806
|
EBVolume,
|
|
3793
3807
|
EExtrude,
|
|
@@ -3842,6 +3856,7 @@ export {
|
|
|
3842
3856
|
radius2canvas,
|
|
3843
3857
|
roundZero,
|
|
3844
3858
|
vector,
|
|
3859
|
+
version_details,
|
|
3845
3860
|
withinPiPi,
|
|
3846
3861
|
withinZero2Pi
|
|
3847
3862
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "geometrix",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.13",
|
|
4
4
|
"description": "The 2D geometry engine of the parametrix",
|
|
5
5
|
"private": false,
|
|
6
6
|
"repository": {
|
|
@@ -45,18 +45,18 @@
|
|
|
45
45
|
"@zip.js/zip.js": "^2.7.32"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@types/node": "^20.10.
|
|
49
|
-
"@typescript-eslint/eslint-plugin": "^6.
|
|
50
|
-
"@typescript-eslint/parser": "^6.
|
|
48
|
+
"@types/node": "^20.10.7",
|
|
49
|
+
"@typescript-eslint/eslint-plugin": "^6.18.0",
|
|
50
|
+
"@typescript-eslint/parser": "^6.18.0",
|
|
51
51
|
"eslint": "^8.56.0",
|
|
52
52
|
"eslint-config-prettier": "^9.1.0",
|
|
53
53
|
"npm-run-all": "^4.1.5",
|
|
54
54
|
"prettier": "^3.1.1",
|
|
55
55
|
"shx": "^0.3.4",
|
|
56
|
-
"svgo": "^3.
|
|
56
|
+
"svgo": "^3.2.0",
|
|
57
57
|
"tsup": "^8.0.1",
|
|
58
58
|
"typescript": "^5.3.3",
|
|
59
|
-
"vitest": "^1.1.
|
|
59
|
+
"vitest": "^1.1.3"
|
|
60
60
|
},
|
|
61
61
|
"exports": {
|
|
62
62
|
".": {
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
},
|
|
67
67
|
"files": [
|
|
68
68
|
"dist",
|
|
69
|
+
"!dist/**/*.map",
|
|
69
70
|
"!dist/**/*.test.*",
|
|
70
71
|
"!dist/**/*.spec.*"
|
|
71
72
|
],
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/angle_utils.ts","../src/canvas_utils.ts","../src/triangle_utils.ts","../src/point.ts","../src/line.ts","../src/vector.ts","../src/segment.ts","../src/write_svg.ts","../src/write_dxf.ts","../src/prepare_pax.ts","../src/contour.ts","../src/figure.ts","../src/designParams.ts","../src/volume.ts","../src/aaParamGeom.ts","../src/write_pax.ts","../src/arc_to_stroke.ts","../src/write_openscad.ts","../src/write_openjscad.ts","../src/aaExportContent.ts","../src/aaExportFile.ts","../src/paramFile.ts"],"sourcesContent":["// angle_utils.ts\n// some useful functions manipulating angles\n// angle_utils.ts has no dependency\n\nconst tolerance = 10 ** -4;\n\n/* utils for angles */\n\nfunction degToRad(degrees: number): number {\n\treturn degrees * (Math.PI / 180);\n}\n\nfunction radToDeg(rad: number): number {\n\treturn rad / (Math.PI / 180);\n}\n\nfunction roundZero(ix: number): number {\n\tlet rx = ix;\n\tif (Math.abs(rx) < tolerance) {\n\t\trx = 0;\n\t}\n\treturn rx;\n}\n\nfunction withinZero2Pi(ia: number): number {\n\tlet ra = ia % (2 * Math.PI);\n\tif (ra < 0) {\n\t\t//console.log(`dbg026: ${ra}`);\n\t\tra += 2 * Math.PI;\n\t}\n\treturn ra;\n}\n\nfunction withinPiPi(ia: number): number {\n\tlet ra = withinZero2Pi(ia);\n\tif (ra > Math.PI) {\n\t\tra -= 2 * Math.PI;\n\t}\n\treturn ra;\n}\n\nfunction withinZeroPi(ia: number): number {\n\tlet ra = ia % Math.PI;\n\tif (ra < 0) {\n\t\tra += Math.PI;\n\t}\n\treturn ra;\n}\n\nfunction withinHPiHPi(ia: number): number {\n\tlet ra = withinZeroPi(ia);\n\tif (ra > Math.PI / 2) {\n\t\tra -= Math.PI;\n\t}\n\treturn ra;\n}\n\nfunction orientedArc(aStart: number, aStop: number, ccw: boolean): number {\n\tconst arc = withinPiPi(aStop) - withinPiPi(aStart);\n\tconst arc2 = ccw ? withinZero2Pi(arc) : withinZero2Pi(arc) - 2 * Math.PI;\n\treturn arc2;\n}\n\nfunction isWithin(aNew: number, aStart: number, aStop: number, ccw: boolean): boolean {\n\tlet rYes = false;\n\tif (roundZero(withinPiPi(aNew - aStart)) === 0) {\n\t\trYes = true;\n\t} else if (roundZero(withinPiPi(aNew - aStop)) === 0) {\n\t\trYes = true;\n\t} else {\n\t\tconst arcOrig = orientedArc(aStart, aStop, ccw);\n\t\tconst arcNew = orientedArc(aStart, aNew, ccw);\n\t\tif (Math.abs(arcNew) < Math.abs(arcOrig)) {\n\t\t\trYes = true;\n\t\t}\n\t}\n\treturn rYes;\n}\n\nfunction ffix(ifloat: number): string {\n\treturn ifloat.toFixed(2);\n}\n\n/* export */\n\nexport {\n\ttolerance,\n\tdegToRad,\n\tradToDeg,\n\troundZero,\n\twithinZero2Pi,\n\twithinPiPi,\n\twithinZeroPi,\n\twithinHPiHPi,\n\torientedArc,\n\tisWithin,\n\tffix\n};\n","// canvas_utils.ts\n// helper interfaces and functions to work with HtmlCanvas\n// used by point.ts, line.ts, vector.ts, contour.ts and figure.ts\n\nimport { roundZero } from './angle_utils';\n\nconst colors = {\n\tpoint: 'grey',\n\tline: 'grey',\n\tvector: 'DarkTurquoise',\n\tcontour: 'green',\n\tmain: 'SteelBlue',\n\tmainB: 'SlateGrey',\n\tsecond: 'Violet',\n\tsecondB: 'SlateGrey',\n\tdynamics: 'Tomato',\n\truler: 'blue',\n\torigin: 'red',\n\treference: 'blue',\n\tmouse: 'yellow'\n};\n\ninterface tCanvasAdjust {\n\tinit: number;\n\txMin: number;\n\tyMin: number;\n\txyDiff: number;\n\tshiftX: number;\n\tshiftY: number;\n\tscaleX: number;\n\tscaleY: number;\n}\n\nfunction point2canvas(px: number, py: number, iAdjust: tCanvasAdjust): [number, number] {\n\tconst cx2 = iAdjust.shiftX + (px - iAdjust.xMin) * iAdjust.scaleX;\n\tconst cy2 = iAdjust.shiftY + (py - iAdjust.yMin) * iAdjust.scaleY;\n\treturn [cx2, cy2];\n}\nfunction canvas2point(cx: number, cy: number, iAdjust: tCanvasAdjust): [number, number] {\n\tconst px2 = (cx - iAdjust.shiftX) / iAdjust.scaleX + iAdjust.xMin;\n\tconst py2 = (cy - iAdjust.shiftY) / iAdjust.scaleY + iAdjust.yMin;\n\treturn [px2, py2];\n}\nfunction canvasTranslatePolar(cx: number, cy: number, ia: number, il: number): [number, number] {\n\tconst cx2 = cx + il * Math.cos(ia);\n\tconst cy2 = cy - il * Math.sin(ia);\n\treturn [cx2, cy2];\n}\nfunction radius2canvas(iRadius: number, iAdjust: tCanvasAdjust): number {\n\tif (roundZero(iAdjust.scaleX - Math.abs(iAdjust.scaleY)) !== 0) {\n\t\tthrow `err683: iAdjust.scaleX and scaleY differ ${iAdjust.scaleX} ${iAdjust.scaleY}`;\n\t}\n\tconst rRadius = iRadius * iAdjust.scaleX;\n\treturn rRadius;\n}\n\nfunction adjustZero(): tCanvasAdjust {\n\tconst rAdjustZero = {\n\t\tinit: 0,\n\t\txMin: 0,\n\t\tyMin: 0,\n\t\txyDiff: 1,\n\t\tshiftX: 0,\n\t\tshiftY: 0,\n\t\tscaleX: 1,\n\t\tscaleY: 1\n\t};\n\treturn rAdjustZero;\n}\nfunction adjustInit(\n\txMin: number,\n\txMax: number,\n\tyMin: number,\n\tyMax: number,\n\tcWidth: number,\n\tcHeight: number\n): tCanvasAdjust {\n\tconst rAdjust: tCanvasAdjust = adjustZero();\n\tconst xDiff = Math.max(xMax - xMin, 1);\n\tconst yDiff = Math.max(yMax - yMin, 1);\n\tconst xScale = cWidth / xDiff;\n\tconst yScale = cHeight / yDiff;\n\tlet xyScale = 0.9 * xScale;\n\tlet xyDiff = xDiff;\n\tif (yScale < xScale) {\n\t\txyScale = 0.9 * yScale;\n\t\txyDiff = yDiff;\n\t}\n\trAdjust.init = 1;\n\trAdjust.xMin = xMin;\n\trAdjust.yMin = yMin;\n\trAdjust.xyDiff = xyDiff;\n\trAdjust.shiftX = 0.05 * cWidth;\n\trAdjust.scaleX = xyScale;\n\trAdjust.shiftY = cHeight - 0.05 * cHeight;\n\trAdjust.scaleY = -1 * xyScale;\n\treturn rAdjust;\n}\nfunction adjustCenter(px: number, py: number, iAdjust: tCanvasAdjust): tCanvasAdjust {\n\tconst rAdjust: tCanvasAdjust = structuredClone(iAdjust);\n\trAdjust.xMin = px - rAdjust.xyDiff / 2;\n\trAdjust.yMin = py - rAdjust.xyDiff / 2;\n\treturn rAdjust;\n}\nfunction adjustRect(\n\tp1x: number,\n\tp1y: number,\n\tp2x: number,\n\tp2y: number,\n\tcWidth: number,\n\tcHeight: number\n): tCanvasAdjust {\n\tconst xMin = Math.min(p1x, p2x);\n\tconst xMax = Math.max(p1x, p2x);\n\tconst yMin = Math.min(p1y, p2y);\n\tconst yMax = Math.max(p1y, p2y);\n\tconst rAdjust = adjustInit(xMin, xMax, yMin, yMax, cWidth, cHeight);\n\treturn rAdjust;\n}\nfunction adjustScale(iFactor: number, iAdjust: tCanvasAdjust): tCanvasAdjust {\n\tconst rAdjust: tCanvasAdjust = structuredClone(iAdjust);\n\tconst shift = (1 - iFactor) / 2;\n\trAdjust.xMin += shift * iAdjust.xyDiff;\n\trAdjust.yMin += shift * iAdjust.xyDiff;\n\trAdjust.xyDiff *= iFactor;\n\trAdjust.scaleX *= 1.0 / iFactor;\n\trAdjust.scaleY *= 1.0 / iFactor;\n\treturn rAdjust;\n}\nfunction adjustTranslate(\n\tp1x: number,\n\tp1y: number,\n\tp2x: number,\n\tp2y: number,\n\tiAdjust: tCanvasAdjust\n): tCanvasAdjust {\n\tconst rAdjust: tCanvasAdjust = structuredClone(iAdjust);\n\tconst xDiff = p2x - p1x;\n\tconst yDiff = p2y - p1y;\n\t//console.log(`dbg118: ${xDiff} ${yDiff}`);\n\trAdjust.xMin += -xDiff;\n\trAdjust.yMin += -yDiff;\n\treturn rAdjust;\n}\n\nexport type { tCanvasAdjust };\nexport {\n\tcolors,\n\tpoint2canvas,\n\tcanvas2point,\n\tcanvasTranslatePolar,\n\tradius2canvas,\n\tadjustZero,\n\tadjustInit,\n\tadjustCenter,\n\tadjustRect,\n\tadjustScale,\n\tadjustTranslate\n};\n","// triangle_utils.ts\n// some functions around triangle\n// triangle_utils.ts dependences on angle_utils.ts\n\n//import { degToRad, radToDeg, roundZero, withinZero2Pi, withinPiPi, withinZeroPi, withinHPiHPi } from './angle_utils';\nimport { roundZero, withinZeroPi, withinPiPi } from './angle_utils';\n\n/* right triangle\n *\tsides: la [hypothenuse], lb, lc\n *\tangles: aA [right angle], aB, aC\n * */\n\nfunction rightTriLaFromLbLc(ilb: number, ilc: number): number {\n\treturn Math.sqrt(ilb ** 2 + ilc ** 2);\n}\n\nfunction rightTriLbFromLaLc(ila: number, ilc: number): number {\n\tlet rlb = 0;\n\tif (ilc > ila) {\n\t\tthrow `err539: ila < ilc ${ila} ${ilc}`;\n\t} else {\n\t\trlb = Math.sqrt(ila ** 2 - ilc ** 2);\n\t}\n\treturn rlb;\n}\n\n/* any triangle\n * sides: la, lb, lc\n * angles: aA, aB, aC\n * */\n\nfunction lcFromLaLbAc(la: number, lb: number, ac: number) {\n\tconst rlc = Math.sqrt(la ** 2 + lb ** 2 - 2 * la * lb * Math.cos(ac));\n\treturn rlc;\n}\n\nfunction aCFromLaLbLc(la: number, lb: number, lc: number) {\n\tlet rac = 0;\n\tconst l3 = [la, lb, lc];\n\tfor (let i = 0; i < l3.length; i++) {\n\t\tif (l3[i] < 0) {\n\t\t\tthrow `err209: l3[${i}] = ${l3[i]}`;\n\t\t}\n\t}\n\tconst l3s = l3.sort(function (a, b) {\n\t\treturn b - a;\n\t});\n\t//console.log(l3s);\n\tif (l3s[0] > l3s[1] + l3s[2]) {\n\t\tthrow `err839: impossible triangle with length ${la}, ${lb} and ${lc}`;\n\t} else {\n\t\trac = Math.acos((la ** 2 + lb ** 2 - lc ** 2) / (2 * la * lb));\n\t}\n\treturn rac;\n}\n\nfunction aCFromAaAb(iaA: number, iaB: number) {\n\tlet rac = 0;\n\tconst aA = Math.abs(withinPiPi(iaA));\n\tconst aB = Math.abs(withinPiPi(iaB));\n\tconst sum = aA + aB;\n\tif (sum > Math.PI) {\n\t\tthrow `err739: impossible triangle with angles ${iaA} and ${iaB}`;\n\t} else {\n\t\trac = Math.PI - sum;\n\t}\n\treturn rac;\n}\n\nfunction lbFromLaAaAb(ila: number, iaA: number, iaB: number) {\n\tlet rlb = 0;\n\tconst args = [ila, iaA, iaB];\n\tfor (let i = 0; i < args.length; i++) {\n\t\tif (roundZero(args[i]) === 0 || args[i] < 0) {\n\t\t\tthrow `err329: negative or zero triangle-args ${i} : ${args[i]}`;\n\t\t}\n\t}\n\tconst aA = withinZeroPi(iaA);\n\tconst aB = withinZeroPi(iaB);\n\tconst sum = aA + aB;\n\tif (sum > Math.PI) {\n\t\tthrow `err939: impossible triangle with angles ${iaA} and ${iaB}`;\n\t} else {\n\t\trlb = (ila * Math.sin(iaB)) / Math.sin(iaA);\n\t}\n\treturn rlb;\n}\n\n// it works only with angle within -PI/2 and PI/2 because arcsinus()\nfunction aBFromLaLbAa(ila: number, ilb: number, iaA: number) {\n\tlet rab = 0;\n\tconst args = [ila, ilb, iaA];\n\tfor (let i = 0; i < args.length; i++) {\n\t\tif (args[i] <= 0) {\n\t\t\tthrow `err429: negative or zero triangle-args ${i} : ${args[i]}`;\n\t\t}\n\t}\n\trab = Math.asin((ilb * Math.sin(iaA)) / ila);\n\treturn rab;\n}\n\n/* export */\n\nexport {\n\trightTriLaFromLbLc,\n\trightTriLbFromLaLc,\n\tlcFromLaLbAc,\n\taCFromLaLbLc,\n\taCFromAaAb,\n\tlbFromLaAaAb,\n\taBFromLaLbAa\n};\n","// point.ts\n// point.ts deals with points\n// point.ts depends on canvas_utils.ts\n\nimport type { tCanvasAdjust } from './canvas_utils';\n//import { colorCanvasPoint } from '$lib/style/colors.scss';\nimport { colors, point2canvas } from './canvas_utils';\nimport { roundZero, withinPiPi } from './angle_utils';\n\ntype tPolar = [number, number]; // angle, distance\nenum ShapePoint {\n\teDefault,\n\teCircle,\n\teCross,\n\teSquare,\n\teBigSquare,\n\teTwoTri,\n\teTri1,\n\teTri2,\n\teTri3,\n\teTri4\n}\n\n/* Base classes */\nclass Point {\n\tcx: number;\n\tcy: number;\n\tshape: ShapePoint;\n\tconstructor(ix: number, iy: number, ishape = ShapePoint.eDefault) {\n\t\tthis.cx = ix;\n\t\tthis.cy = iy;\n\t\tthis.shape = ishape;\n\t}\n\tdraw(\n\t\tctx: CanvasRenderingContext2D,\n\t\tcAdjust: tCanvasAdjust,\n\t\tcolor: string = colors.point,\n\t\tishape = ShapePoint.eDefault\n\t) {\n\t\tif (isFinite(this.cx) && isFinite(this.cy)) {\n\t\t\tconst radius = ctx.canvas.width * (0.7 / 100);\n\t\t\tconst radius2 = 2 * radius;\n\t\t\tconst [cx2, cy2] = point2canvas(this.cx, this.cy, cAdjust);\n\t\t\t//console.log(`dbg493: ${cx2} ${cy2}`);\n\t\t\tlet shape = ishape;\n\t\t\tif (shape === ShapePoint.eDefault) {\n\t\t\t\tshape = this.shape;\n\t\t\t}\n\t\t\tctx.beginPath();\n\t\t\tswitch (shape) {\n\t\t\t\tcase ShapePoint.eCross:\n\t\t\t\t\tctx.moveTo(cx2 - radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2 + radius2, cy2);\n\t\t\t\t\tctx.moveTo(cx2, cy2 - radius2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 + radius2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ShapePoint.eSquare:\n\t\t\t\t\tctx.rect(cx2 - radius, cy2 - radius, 2 * radius, 2 * radius);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ShapePoint.eBigSquare:\n\t\t\t\t\tctx.rect(cx2 - 2 * radius, cy2 - 2 * radius, 4 * radius, 4 * radius);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ShapePoint.eTwoTri:\n\t\t\t\t\tctx.moveTo(cx2 - radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2 + radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 + radius2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 - radius2);\n\t\t\t\t\tctx.lineTo(cx2 - radius2, cy2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ShapePoint.eTri1:\n\t\t\t\t\tctx.moveTo(cx2 - radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2 + radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 - radius2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 + radius2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ShapePoint.eTri2:\n\t\t\t\t\tctx.moveTo(cx2 + radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2 - radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 - radius2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 + radius2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ShapePoint.eTri3:\n\t\t\t\t\tctx.moveTo(cx2 + radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2 - radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 + radius2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 - radius2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ShapePoint.eTri4:\n\t\t\t\t\tctx.moveTo(cx2 - radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2 + radius2, cy2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 + radius2);\n\t\t\t\t\tctx.lineTo(cx2, cy2 - radius2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ShapePoint.eCircle:\n\t\t\t\tdefault:\n\t\t\t\t\tctx.arc(cx2, cy2, radius, 0, 2 * Math.PI);\n\t\t\t}\n\t\t\tctx.strokeStyle = color;\n\t\t\tctx.stroke();\n\t\t} else {\n\t\t\tconsole.log(`INFO489: point not draw because of infinity ${this.cx} ${this.cy}`);\n\t\t}\n\t}\n\tdistanceOrig(): number {\n\t\treturn Math.sqrt(this.cx ** 2 + this.cy ** 2);\n\t}\n\tangleOrig(): number {\n\t\treturn Math.atan2(this.cy, this.cx);\n\t}\n\tgetPolar(): tPolar {\n\t\treturn [this.angleOrig(), this.distanceOrig()];\n\t}\n\tsetPolar(ia: number, il: number): Point {\n\t\treturn new Point(il * Math.cos(ia), il * Math.sin(ia));\n\t}\n\ttranslate(ix: number, iy: number): Point {\n\t\treturn new Point(this.cx + ix, this.cy + iy);\n\t}\n\ttranslatePolar(ia: number, il: number): Point {\n\t\treturn new Point(this.cx + il * Math.cos(ia), this.cy + il * Math.sin(ia));\n\t}\n\tclone(ishape = ShapePoint.eDefault): Point {\n\t\treturn new Point(this.cx, this.cy, ishape);\n\t}\n\trotateOrig(ia: number): Point {\n\t\t// rotation with the origin as center\n\t\tconst polar = this.getPolar();\n\t\treturn this.setPolar(polar[0] + ia, polar[1]);\n\t}\n\tscaleOrig(ir: number): Point {\n\t\tconst polar = this.getPolar();\n\t\treturn this.setPolar(polar[0], polar[1] * ir);\n\t}\n\trotate(ic: Point, ia: number): Point {\n\t\tconst p1 = this.translate(-1 * ic.cx, -1 * ic.cy);\n\t\tconst polar = p1.getPolar();\n\t\tconst p2 = this.setPolar(polar[0] + ia, polar[1]);\n\t\treturn p2.translate(ic.cx, ic.cy);\n\t}\n\tscale(ic: Point, ir: number): Point {\n\t\tconst p1 = this.translate(-1 * ic.cx, -1 * ic.cy);\n\t\tconst polar = p1.getPolar();\n\t\tconst p2 = this.setPolar(polar[0], polar[1] * ir);\n\t\treturn p2.translate(ic.cx, ic.cy);\n\t}\n\t// point comparison\n\tisEqual(ic: Point): boolean {\n\t\tconst rb = roundZero(this.cx - ic.cx) === 0 && roundZero(this.cy - ic.cy) === 0;\n\t\treturn rb;\n\t}\n\t// measurement\n\tdistanceToPoint(p2: Point): number {\n\t\tconst rd = Math.sqrt((p2.cx - this.cx) ** 2 + (p2.cy - this.cy) ** 2);\n\t\treturn rd;\n\t}\n\tangleToPoint(p2: Point): number {\n\t\tif (roundZero(this.distanceToPoint(p2)) === 0) {\n\t\t\tthrow `err434: no angle because points identical ${this.cx} ${p2.cx} ${this.cy} ${p2.cy}`;\n\t\t}\n\t\tconst ra = Math.atan2(p2.cy - this.cy, p2.cx - this.cx);\n\t\treturn ra;\n\t}\n\tangleFromToPoints(p2: Point, p3: Point): number {\n\t\tconst ap2 = this.angleToPoint(p2);\n\t\tconst ap3 = this.angleToPoint(p3);\n\t\tconst ra = withinPiPi(ap3 - ap2);\n\t\treturn ra;\n\t}\n\t// from 2 points create a new point\n\tmiddlePoint(p2: Point): Point {\n\t\tconst rx = (this.cx + p2.cx) / 2;\n\t\tconst ry = (this.cy + p2.cy) / 2;\n\t\treturn new Point(rx, ry);\n\t}\n\tequidistantPoint(p2: Point, dist: number, p3: Point): Point {\n\t\tconst lp1p2h = this.distanceToPoint(p2) / 2;\n\t\tif (this.isEqual(p2)) {\n\t\t\tthrow `err633: no equidistance because identical point ${this.cx} ${this.cy}`;\n\t\t}\n\t\tif (dist < lp1p2h) {\n\t\t\tthrow `err392: equidistance ${dist} smaller than lp1p2h ${lp1p2h}`;\n\t\t}\n\t\tconst pbi = this.middlePoint(p2);\n\t\tconst abi = this.angleToPoint(p2) + Math.PI / 2;\n\t\tconst oppos = Math.sqrt(dist ** 2 - lp1p2h ** 2);\n\t\tconst rp1 = pbi.translatePolar(abi, oppos);\n\t\tconst rp2 = pbi.translatePolar(abi + Math.PI, oppos);\n\t\tconst dp1 = p3.distanceToPoint(rp1);\n\t\tconst dp2 = p3.distanceToPoint(rp2);\n\t\tif (oppos !== 0 && dp1 === dp2) {\n\t\t\tthrow `err284: magnet point p3 is on line p1p2. cx ${p3.cx} cy: ${p3.cy}`;\n\t\t}\n\t\tlet rp = rp1;\n\t\tif (dp2 < dp1) {\n\t\t\trp = rp2;\n\t\t}\n\t\treturn rp;\n\t}\n}\n\nfunction point(ix: number, iy: number, ishape = ShapePoint.eDefault) {\n\treturn new Point(ix, iy, ishape);\n}\n\nfunction pointMinMax(aPoint: Point[]): [number, number, number, number] {\n\tlet xMin = 0;\n\tlet xMax = 0;\n\tlet yMin = 0;\n\tlet yMax = 0;\n\tif (aPoint.length > 0) {\n\t\t// the first point of the list should not contain infinity\n\t\tconst p0 = aPoint[0];\n\t\tif (\n\t\t\tp0.cx === Number.NEGATIVE_INFINITY ||\n\t\t\tp0.cx === Number.POSITIVE_INFINITY ||\n\t\t\tp0.cy === Number.NEGATIVE_INFINITY ||\n\t\t\tp0.cy === Number.POSITIVE_INFINITY\n\t\t) {\n\t\t\tthrow `err292: pointMinMax first point with infinity: ${p0.cx} ${p0.cy}`;\n\t\t}\n\t\txMin = aPoint[0].cx;\n\t\txMax = aPoint[0].cx;\n\t\tyMin = aPoint[0].cy;\n\t\tyMax = aPoint[0].cy;\n\t\tfor (const p of aPoint) {\n\t\t\tif (p.cx !== Number.NEGATIVE_INFINITY) {\n\t\t\t\txMin = Math.min(xMin, p.cx);\n\t\t\t}\n\t\t\tif (p.cx !== Number.POSITIVE_INFINITY) {\n\t\t\t\txMax = Math.max(xMax, p.cx);\n\t\t\t}\n\t\t\tif (p.cy !== Number.NEGATIVE_INFINITY) {\n\t\t\t\tyMin = Math.min(yMin, p.cy);\n\t\t\t}\n\t\t\tif (p.cy !== Number.POSITIVE_INFINITY) {\n\t\t\t\tyMax = Math.max(yMax, p.cy);\n\t\t\t}\n\t\t}\n\t}\n\treturn [xMin, xMax, yMin, yMax];\n}\n\n/* export */\n\nexport type { tPolar };\nexport { ShapePoint, Point, point, pointMinMax };\n","// line.ts\n// line.ts deals with lines\n// line.ts depends on angle_utils.ts, triangle_utils.ts and point.ts\n\nimport type { tCanvasAdjust } from './canvas_utils';\n//import type { tPolar } from './point';\n//import { colorCanvasPoint } from '$lib/style/colors.scss';\nimport { colors, point2canvas } from './canvas_utils';\nimport {\n\t//degToRad,\n\t//radToDeg,\n\troundZero,\n\t//withinZero2Pi,\n\twithinPiPi,\n\twithinZeroPi,\n\twithinHPiHPi\n} from './angle_utils';\nimport {\n\t//rightTriLaFromLbLc,\n\t//rightTriLbFromLaLc,\n\t//lcFromLaLbAc,\n\t//aCFromLaLbLc,\n\t//aCFromAaAb\n\tlbFromLaAaAb\n\t//aBFromLaLbAa\n} from './triangle_utils';\nimport { point, Point } from './point';\n\ninterface tAffine {\n\tquasiVertical: boolean;\n\tha: number;\n\thb: number;\n\tva: number;\n\tvb: number;\n}\n\n/* Base classes */\n\nclass Line {\n\tcx: number;\n\tcy: number;\n\tca: number;\n\tconstructor(ix: number, iy: number, ia: number) {\n\t\tthis.cx = ix;\n\t\tthis.cy = iy;\n\t\tthis.ca = ia;\n\t}\n\tdraw(ctx: CanvasRenderingContext2D, cAdjust: tCanvasAdjust, color: string = colors.line) {\n\t\tconst display_length = ctx.canvas.width * 2;\n\t\tconst [cx1, cy1] = point2canvas(\n\t\t\tthis.cx - display_length * Math.cos(this.ca),\n\t\t\tthis.cy - display_length * Math.sin(this.ca),\n\t\t\tcAdjust\n\t\t);\n\t\tconst [cx2, cy2] = point2canvas(\n\t\t\tthis.cx + 2 * display_length * Math.cos(this.ca),\n\t\t\tthis.cy + 2 * display_length * Math.sin(this.ca),\n\t\t\tcAdjust\n\t\t);\n\t\tctx.beginPath();\n\t\tctx.moveTo(cx1, cy1);\n\t\tctx.lineTo(cx2, cy2);\n\t\tctx.strokeStyle = color;\n\t\tctx.stroke();\n\t}\n\tsetFromPoints(p1: Point, p2: Point) {\n\t\tthis.cx = p1.cx;\n\t\tthis.cy = p1.cy;\n\t\tthis.ca = p1.angleToPoint(p2);\n\t\treturn this;\n\t}\n\tgetAffine(): tAffine {\n\t\tconst rAffine: tAffine = { quasiVertical: false, ha: 0, hb: 0, va: 0, vb: 0 };\n\t\tconst angleZeroHPi = Math.abs(withinHPiHPi(this.ca));\n\t\tif (angleZeroHPi > Math.PI / 4) {\n\t\t\t// x = va * y + vb\n\t\t\trAffine.quasiVertical = true;\n\t\t\trAffine.va = -1 * Math.tan(withinHPiHPi(this.ca - Math.PI / 2));\n\t\t\trAffine.vb = this.cx - rAffine.va * this.cy;\n\t\t} else {\n\t\t\t// y = ha * x + hb\n\t\t\trAffine.ha = Math.tan(withinHPiHPi(this.ca));\n\t\t\trAffine.hb = this.cy - rAffine.ha * this.cx;\n\t\t}\n\t\treturn rAffine;\n\t}\n\tsetAffine(iAffine: tAffine): Line {\n\t\tconst rLine = new Line(0, 0, 0);\n\t\tif (iAffine.quasiVertical) {\n\t\t\trLine.ca = Math.PI / 2 - Math.atan(iAffine.va);\n\t\t\trLine.cx = iAffine.vb;\n\t\t\trLine.cy = 0;\n\t\t} else {\n\t\t\trLine.ca = Math.atan(iAffine.ha);\n\t\t\trLine.cx = 0;\n\t\t\trLine.cy = iAffine.hb;\n\t\t}\n\t\treturn rLine;\n\t}\n\t// intersection\n\tintersection(il: Line): Point {\n\t\tif (this.isParallel(il)) {\n\t\t\tthrow `err902: no intersection, lines are parallel ca1: ${this.ca} ca2: ${il.ca}`;\n\t\t}\n\t\tlet rx = 0;\n\t\tlet ry = 0;\n\t\tconst affin1 = this.getAffine();\n\t\tconst affin2 = il.getAffine();\n\t\tif (affin1.quasiVertical) {\n\t\t\tif (affin2.quasiVertical) {\n\t\t\t\t// x = va1 * y + vb1; x = va2 * y + vb2\n\t\t\t\t// y = (vb1 - vb2) / (va2 - va1)\n\t\t\t\try = (affin1.vb - affin2.vb) / (affin2.va - affin1.va);\n\t\t\t\trx = affin1.va * ry + affin1.vb;\n\t\t\t} else {\n\t\t\t\t// x = va1 * y + vb1; y = ha2 * x + hb2\n\t\t\t\t// x = va1 * (ha2 * x + hb2) + vb1; x = ((va1 * hb2) + vb1) / (1 - va1 * ha2)\n\t\t\t\trx = (affin1.va * affin2.hb + affin1.vb) / (1 - affin1.va * affin2.ha);\n\t\t\t\try = affin2.ha * rx + affin2.hb;\n\t\t\t}\n\t\t} else {\n\t\t\tif (affin2.quasiVertical) {\n\t\t\t\t// y = ha1 * x + hb1; x = va2 * y + vb2\n\t\t\t\t// y = ha1 * (va2 * y + vb2) + hb1; y = ((ha1 * vb2) + hb1) / (1 - ha1 * va2)\n\t\t\t\try = (affin1.ha * affin2.vb + affin1.hb) / (1 - affin1.ha * affin2.va);\n\t\t\t\trx = affin2.va * ry + affin2.vb;\n\t\t\t} else {\n\t\t\t\t// y = ha1 * x + hb1; y = ha2 * x + hb2\n\t\t\t\t// y = (hb1 - hb2) / (ha2 - ha1)\n\t\t\t\trx = (affin1.hb - affin2.hb) / (affin2.ha - affin1.ha);\n\t\t\t\try = affin1.ha * rx + affin1.hb;\n\t\t\t}\n\t\t}\n\t\tconst rp = point(rx, ry);\n\t\treturn rp;\n\t}\n\tgetAxisXIntersection(): number {\n\t\tconst c_axisX = new Line(0, 0, 0);\n\t\tconst rp = this.intersection(c_axisX);\n\t\treturn rp.cx;\n\t}\n\tgetAxisYIntersection(): number {\n\t\tconst c_axisY = new Line(0, 0, Math.PI / 2);\n\t\tconst rp = this.intersection(c_axisY);\n\t\treturn rp.cy;\n\t}\n\tgetAxisXIntersecTri(): number {\n\t\tlet rX = Infinity;\n\t\tif (roundZero(withinHPiHPi(this.ca)) !== 0) {\n\t\t\tconst p1 = new Point(this.cx, this.cy);\n\t\t\tconst l1ca = withinZeroPi(this.ca);\n\t\t\tconst aC = p1.angleOrig();\n\t\t\tconst la = p1.distanceOrig();\n\t\t\tif (roundZero(la) === 0) {\n\t\t\t\trX = 0;\n\t\t\t} else if (roundZero(withinHPiHPi(l1ca - aC)) === 0) {\n\t\t\t\trX = 0;\n\t\t\t} else {\n\t\t\t\tconst aA = Math.min(l1ca, Math.PI - l1ca);\n\t\t\t\tconst aB = withinPiPi(l1ca - aC);\n\t\t\t\tconst aB2 = Math.min(Math.abs(aB), Math.PI - Math.abs(aB));\n\t\t\t\trX = Math.sign(aB) * lbFromLaAaAb(la, aA, aB2);\n\t\t\t}\n\t\t}\n\t\treturn rX;\n\t}\n\tgetAxisYIntersecTri(): number {\n\t\tlet rY = Infinity;\n\t\tif (roundZero(withinHPiHPi(this.ca - Math.PI / 2)) !== 0) {\n\t\t\tconst p1 = new Point(this.cx, this.cy);\n\t\t\tconst l1ca = withinHPiHPi(this.ca);\n\t\t\tconst aC = p1.angleOrig();\n\t\t\tconst la = p1.distanceOrig();\n\t\t\tconst angleDiff = withinHPiHPi(l1ca - aC);\n\t\t\tif (roundZero(la) === 0) {\n\t\t\t\trY = 0;\n\t\t\t} else if (roundZero(angleDiff) === 0) {\n\t\t\t\trY = 0;\n\t\t\t} else {\n\t\t\t\tconst aA = withinZeroPi(l1ca - Math.PI / 2);\n\t\t\t\tconst aB = -1 * withinPiPi(l1ca - aC);\n\t\t\t\tconst aA2 = Math.min(aA, Math.PI - aA);\n\t\t\t\tconst aB2 = Math.min(Math.abs(aB), Math.PI - Math.abs(aB));\n\t\t\t\trY = Math.sign(aB) * lbFromLaAaAb(la, aA2, aB2);\n\t\t\t}\n\t\t}\n\t\treturn rY;\n\t}\n\tangleOrig(): number {\n\t\t// compute direction, i.e. top-side or bottom-side\n\t\tconst p1 = new Point(this.cx, this.cy);\n\t\tconst aC = p1.angleOrig();\n\t\tconst l1ca = withinHPiHPi(this.ca);\n\t\tconst aB = -1 * withinPiPi(l1ca - aC);\n\t\tlet direction = 0;\n\t\tif (aB < 0) {\n\t\t\tdirection = -Math.PI;\n\t\t}\n\t\t// end of direction calculation\n\t\tconst ra = withinZeroPi(Math.PI / 2 + this.ca) + direction;\n\t\treturn ra;\n\t}\n\tdistanceOrig(): number {\n\t\tconst a1 = this.angleOrig();\n\t\tconst p1 = new Point(this.cx, this.cy);\n\t\tconst a2 = p1.angleOrig();\n\t\tconst la = p1.distanceOrig();\n\t\tconst a12 = withinHPiHPi(a2 - a1);\n\t\tconst rd = la * Math.cos(a12);\n\t\treturn rd;\n\t}\n\tprojectOrig(): Point {\n\t\tconst pa = this.angleOrig();\n\t\tconst pl = this.distanceOrig();\n\t\treturn point(0, 0).setPolar(pa, pl);\n\t}\n\t// methods inherited from point\n\ttranslate(ix: number, iy: number): Line {\n\t\treturn new Line(this.cx + ix, this.cy + iy, this.ca);\n\t}\n\trotateOrig(ia: number): Line {\n\t\t// rotation with the origin as center\n\t\tconst lPoint2 = new Point(this.cx, this.cy).rotateOrig(ia);\n\t\treturn new Line(lPoint2.cx, lPoint2.cy, withinPiPi(this.ca + ia));\n\t}\n\tscaleOrig(ir: number): Line {\n\t\tconst lPoint2 = new Point(this.cx, this.cy).scaleOrig(ir);\n\t\treturn new Line(lPoint2.cx, lPoint2.cy, this.ca);\n\t}\n\trotate(ic: Point, ia: number): Line {\n\t\tconst lPoint2 = new Point(this.cx, this.cy).rotate(ic, ia);\n\t\treturn new Line(lPoint2.cx, lPoint2.cy, withinPiPi(this.ca + ia));\n\t}\n\tscale(ic: Point, ir: number): Line {\n\t\tconst lPoint2 = new Point(this.cx, this.cy).scale(ic, ir);\n\t\treturn new Line(lPoint2.cx, lPoint2.cy, this.ca);\n\t}\n\tclone(): Line {\n\t\tconst lPoint2 = new Point(this.cx, this.cy);\n\t\treturn new Line(lPoint2.cx, lPoint2.cy, this.ca);\n\t}\n\t// end of methods from point\n\t// line creation\n\tlineOrthogonal(ic: Point): Line {\n\t\treturn new Line(ic.cx, ic.cy, this.ca + Math.PI / 2);\n\t}\n\tlineParallel(ic: Point): Line {\n\t\treturn new Line(ic.cx, ic.cy, this.ca);\n\t}\n\t// orthogonal projection\n\tdistanceToPoint(ic: Point): number {\n\t\tlet rd = 0;\n\t\tconst p1 = new Point(this.cx, this.cy);\n\t\tconst lp1ic = p1.distanceToPoint(ic);\n\t\tif (roundZero(lp1ic) !== 0) {\n\t\t\tconst aC = p1.angleToPoint(ic);\n\t\t\tconst aB = withinHPiHPi(aC - this.ca);\n\t\t\trd = lp1ic * Math.abs(Math.sin(aB));\n\t\t}\n\t\treturn rd;\n\t}\n\tprojectPoint(ic: Point): Point {\n\t\tlet rd = 0;\n\t\tconst p1 = new Point(this.cx, this.cy);\n\t\tconst lp1ic = p1.distanceToPoint(ic);\n\t\tif (roundZero(lp1ic) !== 0) {\n\t\t\tconst aC = p1.angleToPoint(ic);\n\t\t\tconst aB = withinPiPi(aC - this.ca);\n\t\t\trd = lp1ic * Math.cos(aB);\n\t\t}\n\t\tconst rp = p1.translatePolar(this.ca, rd);\n\t\treturn rp;\n\t}\n\t// line comparison\n\tisParallel(il: Line): boolean {\n\t\tconst rb = roundZero(withinHPiHPi(this.ca - il.ca)) === 0;\n\t\treturn rb;\n\t}\n\tisOrthogonal(il: Line): boolean {\n\t\tconst rb = roundZero(withinHPiHPi(Math.PI / 2 + this.ca - il.ca)) === 0;\n\t\treturn rb;\n\t}\n\tisEqual(il: Line): boolean {\n\t\tconst p2 = point(il.cx, il.cy);\n\t\tconst dist = this.distanceToPoint(p2);\n\t\tconst rb = roundZero(dist) === 0 && this.isParallel(il);\n\t\treturn rb;\n\t}\n\t// bisector\n\tbisector(il: Line, ip: Point): Line {\n\t\tconst pInter = this.intersection(il);\n\t\tconst a1t = withinZeroPi(this.ca);\n\t\tconst a2t = withinZeroPi(il.ca);\n\t\tconst a1 = Math.min(a1t, a2t);\n\t\tconst a2 = Math.max(a1t, a2t);\n\t\tconst aList = [a1, a2, a1 + Math.PI, a2 + Math.PI, a1];\n\t\tconst aRef = pInter.angleToPoint(ip);\n\t\tlet idx = 0;\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst aDiff1 = withinPiPi(aList[i] - aRef);\n\t\t\tconst aDiff2 = withinPiPi(aList[i + 1] - aRef);\n\t\t\tif (aDiff1 === 0 || aDiff2 === 0) {\n\t\t\t\tthrow `err419: bad reference point for bisecor ${ip.cx} ${ip.cy}`;\n\t\t\t}\n\t\t\tif (aDiff1 < 0 && aDiff2 > 0) {\n\t\t\t\tidx = i;\n\t\t\t}\n\t\t}\n\t\tconst a0 = withinZeroPi((a1 + a2) / 2);\n\t\tconst ca = a0 + (idx * Math.PI) / 2;\n\t\treturn new Line(pInter.cx, pInter.cy, ca);\n\t}\n\t// parallel distance\n\tlineParallelDistance(iDist: number, ipMagnet: Point, ipMagnet2: Point): Line {\n\t\tconst p1 = point(this.cx, this.cy);\n\t\tconst p2a = p1.translatePolar(this.ca + Math.PI / 2, iDist);\n\t\tconst p2b = p1.translatePolar(this.ca - Math.PI / 2, iDist);\n\t\tlet p2 = p2b;\n\t\tlet pMagnet = ipMagnet;\n\t\tif (roundZero(this.distanceToPoint(pMagnet)) === 0) {\n\t\t\tpMagnet = ipMagnet2;\n\t\t}\n\t\tif (pMagnet.distanceToPoint(p2a) < pMagnet.distanceToPoint(p2b)) {\n\t\t\tp2 = p2a;\n\t\t}\n\t\treturn new Line(p2.cx, p2.cy, this.ca);\n\t}\n}\n\nfunction line(ix: number, iy: number, ia: number): Line {\n\treturn new Line(ix, iy, ia);\n}\n\nfunction linePP(ip1: Point, ip2: Point): Line {\n\tconst rline = line(0, 0, 0).setFromPoints(ip1, ip2);\n\treturn rline;\n}\n\nfunction bisector(ip1: Point, ip2: Point): Line {\n\tif (ip1.isEqual(ip2)) {\n\t\tthrow `err546: no bisector with two same points cx: ${ip1.cx} cy: ${ip1.cy}`;\n\t}\n\tconst pbi = ip1.middlePoint(ip2);\n\tconst abi = withinZeroPi(ip1.angleToPoint(ip2) + Math.PI / 2);\n\treturn line(pbi.cx, pbi.cy, abi);\n}\nfunction circleCenter(ip1: Point, ip2: Point, ip3: Point): Point {\n\tif (ip1.isEqual(ip2) || ip2.isEqual(ip3) || ip1.isEqual(ip3)) {\n\t\tthrow `err833: no bisector with two same points cx: ${ip1.cx} cy: ${ip1.cy}`;\n\t}\n\tconst bisec1 = bisector(ip1, ip2);\n\tconst bisec2 = bisector(ip2, ip3);\n\tconst rp = bisec1.intersection(bisec2);\n\treturn rp;\n}\n\n/* export */\n\nexport { Line, line, linePP, bisector, circleCenter };\n","// vector.ts\n// vector.ts deals with vectors\n// vector.ts depends on canvas_utils.ts, angle_utils.ts, points.ts and line.ts\n// vector.ts id used by figure.ts\n\nimport type { tCanvasAdjust } from './canvas_utils';\n//import { colorCanvasPoint } from '$lib/style/colors.scss';\nimport { colors, point2canvas, canvasTranslatePolar } from './canvas_utils';\nimport {\n\t//degToRad,\n\t//radToDeg,\n\troundZero,\n\t//withinZero2Pi,\n\twithinPiPi\n\t//withinZeroPi,\n\t//withinHPiHPi\n} from './angle_utils';\n//import {\n//rightTriLaFromLbLc,\n//rightTriLbFromLaLc,\n//lcFromLaLbAc,\n//aCFromLaLbLc,\n//aCFromAaAb,\n//lbFromLaAaAb,\n//aBFromLaLbAa\n//} from './triangle_utils';\n//import type { tPolar } from './point';\nimport type { Point } from './point';\n\ntype tCartesian = [number, number]; // angle, distance\n\n/* Base classes */\nclass Vector {\n\tca: number;\n\tcl: number;\n\tdrawPoint: Point;\n\tconstructor(ia: number, il: number, iDrawPoint: Point) {\n\t\tthis.ca = ia;\n\t\tthis.cl = il;\n\t\tthis.drawPoint = iDrawPoint;\n\t}\n\tdraw(ctx: CanvasRenderingContext2D, cAdjust: tCanvasAdjust, color: string = colors.vector) {\n\t\tconst radius = ctx.canvas.width * (0.7 / 100);\n\t\tconst [cx2, cy2] = point2canvas(this.drawPoint.cx, this.drawPoint.cy, cAdjust);\n\t\tconst [cx3, cy3] = canvasTranslatePolar(cx2, cy2, this.ca + Math.PI / 2, 2 * radius);\n\t\tconst [cx4, cy4] = canvasTranslatePolar(cx2, cy2, this.ca - Math.PI / 2, 2 * radius);\n\t\tconst p3 = this.drawPoint.translatePolar(this.ca, this.cl);\n\t\tconst [cx5, cy5] = point2canvas(p3.cx, p3.cy, cAdjust);\n\t\tconst [cx6, cy6] = canvasTranslatePolar(cx5, cy5, this.ca + (3 * Math.PI) / 4, 4 * radius);\n\t\tconst [cx7, cy7] = canvasTranslatePolar(cx5, cy5, this.ca + (5 * Math.PI) / 4, 4 * radius);\n\t\tctx.beginPath();\n\t\tctx.moveTo(cx3, cy3);\n\t\tctx.lineTo(cx4, cy4);\n\t\tctx.moveTo(cx2, cy2);\n\t\tctx.lineTo(cx5, cy5);\n\t\tctx.lineTo(cx6, cy6);\n\t\tctx.moveTo(cx5, cy5);\n\t\tctx.lineTo(cx7, cy7);\n\t\tctx.strokeStyle = color;\n\t\tctx.stroke();\n\t}\n\tgetCartesian(): tCartesian {\n\t\treturn [this.cl * Math.cos(this.ca), this.cl * Math.sin(this.ca)];\n\t}\n\tsetCartesian(ix: number, iy: number): Vector {\n\t\treturn new Vector(Math.atan2(iy, ix), Math.sqrt(ix ** 2 + iy ** 2), this.drawPoint);\n\t}\n\ttranslatePoint(ip: Point): Point {\n\t\tconst [x1, y1] = this.getCartesian();\n\t\treturn ip.translate(x1, y1);\n\t}\n\tadd(iVect: Vector): Vector {\n\t\tconst [x1, y1] = this.getCartesian();\n\t\tconst [x2, y2] = iVect.getCartesian();\n\t\tconst rVect = this.setCartesian(x1 + x2, y1 + y2);\n\t\treturn rVect;\n\t}\n\taddCart(ix: number, iy: number): Vector {\n\t\tconst [x1, y1] = this.getCartesian();\n\t\tconst rVect = this.setCartesian(x1 + ix, y1 + iy);\n\t\treturn rVect;\n\t}\n\t// transforms\n\ttranslate(ix: number, iy: number): Vector {\n\t\tconst rVec = new Vector(this.ca, this.cl, this.drawPoint.translate(ix, iy));\n\t\treturn rVec;\n\t}\n\trotate(ic: Point, ia: number): Vector {\n\t\tconst rVec = new Vector(this.ca + ia, this.cl, this.drawPoint.rotate(ic, ia));\n\t\treturn rVec;\n\t}\n\tclone(): Vector {\n\t\tconst rVec = new Vector(this.ca, this.cl, this.drawPoint.clone());\n\t\treturn rVec;\n\t}\n\t// point comparison\n\tisEqual(iVect: Vector): boolean {\n\t\tconst [x1, y1] = this.getCartesian();\n\t\tconst [x2, y2] = iVect.getCartesian();\n\t\tconst rb = roundZero(x2 - x1) === 0 && roundZero(y2 - y1) === 0;\n\t\treturn rb;\n\t}\n\t// dot product\n\tdotProduct(iVect: Vector): number {\n\t\tconst angle = withinPiPi(iVect.ca - this.ca);\n\t\treturn this.cl * iVect.cl * Math.cos(angle);\n\t}\n\t// cross product\n\tcrossProduct(iVect: Vector): number {\n\t\tconst angle = withinPiPi(iVect.ca - this.ca);\n\t\treturn this.cl * iVect.cl * Math.sin(angle);\n\t}\n}\n\nfunction vector(ia: number, il: number, iDrawPoint: Point) {\n\treturn new Vector(ia, il, iDrawPoint);\n}\n\n/* export */\n\nexport type { tCartesian };\nexport { Vector, vector };\n","// segment.ts\n// segment.ts deals with segments and arcs for helping the module contour.ts\n// segment.ts depends on point.ts, line.ts and vector.ts\n// segment.ts is used by contour.ts\n\n//import type { tCanvasAdjust } from './canvas_utils';\n//import type { tPolar } from './point';\n//import { colorCanvasPoint } from '$lib/style/colors.scss';\nimport {\n\ttolerance,\n\t//degToRad,\n\t//radToDeg,\n\troundZero,\n\twithinZero2Pi,\n\twithinPiPi,\n\t//withinZeroPi,\n\t//withinHPiHPi,\n\tisWithin,\n\tffix\n} from './angle_utils';\n//import { colors, point2canvas, radius2canvas } from './canvas_utils';\nimport {\n\t//rightTriLaFromLbLc,\n\trightTriLbFromLaLc,\n\t//lcFromLaLbAc,\n\taCFromLaLbLc\n\t//aCFromAaAb,\n\t//lbFromLaAaAb,\n\t//aBFromLaLbAa\n} from './triangle_utils';\nimport { ShapePoint, point, Point } from './point';\n//import { line, linePP, bisector, circleCenter } from './line';\nimport { line, linePP, Line } from './line';\n//import { vector, Vector } from './vector';\n\nenum SegEnum {\n\teStroke,\n\teArc,\n\tePointed,\n\teRounded,\n\teWidened,\n\teWideAcc, // Widened Access\n\teStart\n}\n\nfunction isSeg(iSegEnum: SegEnum) {\n\tlet rIsSeg = false;\n\tif (iSegEnum === SegEnum.eStroke || iSegEnum === SegEnum.eArc) {\n\t\trIsSeg = true;\n\t}\n\treturn rIsSeg;\n}\nfunction isAddPoint(iSegEnum: SegEnum) {\n\tlet rIsOther = false;\n\tif (isSeg(iSegEnum) || iSegEnum === SegEnum.eStart) {\n\t\trIsOther = true;\n\t}\n\treturn rIsOther;\n}\nfunction isActiveCorner(iSegEnum: SegEnum) {\n\tlet rIsActiveCorner = false;\n\tif (\n\t\tiSegEnum === SegEnum.eRounded ||\n\t\tiSegEnum === SegEnum.eWidened ||\n\t\tiSegEnum === SegEnum.eWideAcc\n\t) {\n\t\trIsActiveCorner = true;\n\t}\n\treturn rIsActiveCorner;\n}\nfunction isCorner(iSegEnum: SegEnum) {\n\tlet rIsCorner = false;\n\tif (iSegEnum === SegEnum.ePointed || isActiveCorner(iSegEnum)) {\n\t\trIsCorner = true;\n\t}\n\treturn rIsCorner;\n}\n\n/* Segment class */\n\nclass Segment1 {\n\tsType: SegEnum;\n\tpx: number;\n\tpy: number;\n\tradius: number;\n\tarcLarge: boolean;\n\tarcCcw: boolean;\n\tconstructor(\n\t\tiType: SegEnum,\n\t\tix: number,\n\t\tiy: number,\n\t\tiRadius: number,\n\t\tiArcLarge = false,\n\t\tiArcCcw = false\n\t) {\n\t\tthis.sType = iType;\n\t\tthis.px = ix;\n\t\tthis.py = iy;\n\t\tthis.radius = iRadius;\n\t\tthis.arcLarge = iArcLarge;\n\t\tthis.arcCcw = iArcCcw;\n\t}\n\tclone(): Segment1 {\n\t\tconst rseg1 = new Segment1(\n\t\t\tthis.sType,\n\t\t\tthis.px,\n\t\t\tthis.py,\n\t\t\tthis.radius,\n\t\t\tthis.arcLarge,\n\t\t\tthis.arcCcw\n\t\t);\n\t\treturn rseg1;\n\t}\n}\nclass Segment2 {\n\tsType: SegEnum;\n\tp1: Point;\n\tp2: Point;\n\tpc: Point;\n\tradius: number;\n\ta1: number;\n\ta2: number;\n\tarcCcw: boolean;\n\tconstructor(\n\t\tiType: SegEnum,\n\t\tip1: Point,\n\t\tip2: Point,\n\t\tipc: Point,\n\t\tiRadius: number,\n\t\tia1: number,\n\t\tia2: number,\n\t\tiArcCcw = false\n\t) {\n\t\tthis.sType = iType;\n\t\tthis.p1 = ip1;\n\t\tthis.p2 = ip2;\n\t\tthis.pc = ipc;\n\t\tthis.radius = iRadius;\n\t\tthis.a1 = ia1;\n\t\tthis.a2 = ia2;\n\t\tthis.arcCcw = iArcCcw;\n\t}\n}\n\nclass SegDbg {\n\tdebugPoints: Point[];\n\tdebugLines: Line[];\n\tlogMessage: string;\n\tconstructor() {\n\t\tthis.debugPoints = [];\n\t\tthis.debugLines = [];\n\t\tthis.logMessage = '';\n\t}\n\taddPoint(ip: Point) {\n\t\tthis.debugPoints.push(ip);\n\t}\n\tgetPoints(): Point[] {\n\t\treturn this.debugPoints;\n\t}\n\tclearPoints() {\n\t\tthis.debugPoints = [];\n\t}\n\taddLine(il: Line) {\n\t\tthis.debugLines.push(il);\n\t}\n\tgetLines(): Line[] {\n\t\treturn this.debugLines;\n\t}\n\tclearLines() {\n\t\tthis.debugLines = [];\n\t}\n\taddMsg(iMsg: string) {\n\t\tthis.logMessage += iMsg;\n\t}\n\tgetMsg(): string {\n\t\treturn this.logMessage;\n\t}\n\tclearMsg() {\n\t\tthis.logMessage = '';\n\t}\n}\nconst gSegDbg = new SegDbg();\n\nfunction arcSeg1To2(px1: number, py1: number, iSeg1: Segment1): Segment2 {\n\tif (iSeg1.sType !== SegEnum.eArc) {\n\t\tthrow `err202: arcSeg1To2 has unexpected type ${iSeg1.sType}`;\n\t}\n\tconst p1 = point(px1, py1);\n\tconst p2 = point(iSeg1.px, iSeg1.py);\n\tconst lp1p2h = p1.distanceToPoint(p2) / 2;\n\tif (p1.isEqual(p2)) {\n\t\tthrow `err638: no equidistance because identical point ${p1.cx} ${p2.cy}`;\n\t}\n\tlet oppos = 0;\n\tif (roundZero(iSeg1.radius - lp1p2h) === 0) {\n\t\toppos = 0;\n\t} else if (iSeg1.radius < lp1p2h) {\n\t\t//console.log(`dbg398: ${p1.cx} ${p1.cy} ${iSeg1.px} ${iSeg1.py}`);\n\t\tthrow `err399: radius ${iSeg1.radius} smaller than lp1p2h ${lp1p2h}`;\n\t} else {\n\t\toppos = rightTriLbFromLaLc(iSeg1.radius, lp1p2h);\n\t}\n\tconst pbi = p1.middlePoint(p2);\n\tconst abi = p1.angleToPoint(p2) + Math.PI / 2;\n\tconst rp1 = pbi.translatePolar(abi, oppos);\n\tconst rp2 = pbi.translatePolar(abi + Math.PI, oppos);\n\tlet rp3 = rp1;\n\tif ((!iSeg1.arcLarge && !iSeg1.arcCcw) || (iSeg1.arcLarge && iSeg1.arcCcw)) {\n\t\trp3 = rp2;\n\t}\n\tconst a1 = rp3.angleToPoint(p1);\n\tconst a2 = rp3.angleToPoint(p2);\n\tconst rSeg2 = new Segment2(SegEnum.eArc, p1, p2, rp3, iSeg1.radius, a1, a2, iSeg1.arcCcw);\n\treturn rSeg2;\n}\nfunction arcSeg2To1(iSeg2: Segment2): Segment1 {\n\tlet a12 = withinZero2Pi(iSeg2.a2 - iSeg2.a1);\n\tif (!iSeg2.arcCcw) {\n\t\ta12 = 2 * Math.PI - a12;\n\t}\n\tlet large = false;\n\tif (a12 > Math.PI) {\n\t\tlarge = true;\n\t}\n\tconst rSeg1 = new Segment1(\n\t\tSegEnum.eArc,\n\t\tiSeg2.p2.cx,\n\t\tiSeg2.p2.cy,\n\t\tiSeg2.radius,\n\t\tlarge,\n\t\tiSeg2.arcCcw\n\t);\n\treturn rSeg1;\n}\n\ninterface tPrepare {\n\ts1: Segment2;\n\ts2: Segment2;\n\ts3: Segment2;\n\tra: number;\n\tp1: Point;\n\tp2: Point;\n\tp3: Point;\n\tp4: Point;\n\tp5: Point;\n\tp6: Point;\n\tat1: number;\n\tat3: number;\n\tabi: number;\n\taph: number;\n}\nfunction prepare(s1: Segment2, s2: Segment2, s3: Segment2): tPrepare {\n\tconst p1 = s1.p1;\n\tconst p2 = s1.p2;\n\tconst p2b = s3.p1;\n\tconst p3 = s3.p2;\n\tif (!p2.isEqual(p2b)) {\n\t\tthrow `err309: makeCorner-prepare p2 and p2b differ px ${p2.cx} ${p2b.cx} py ${p2.cy} ${p2b.cy}`;\n\t}\n\tlet aTangent1 = p2.angleToPoint(p1);\n\tif (s1.sType === SegEnum.eArc) {\n\t\tconst sign = s1.arcCcw ? 1 : -1;\n\t\taTangent1 = s1.a2 - (sign * Math.PI) / 2;\n\t}\n\tlet aTangent3 = p2.angleToPoint(p3);\n\tif (s3.sType === SegEnum.eArc) {\n\t\tconst sign = s3.arcCcw ? 1 : -1;\n\t\taTangent3 = s3.a1 + (sign * Math.PI) / 2;\n\t}\n\tconst a123 = aTangent3 - aTangent1;\n\tconst a123b = withinPiPi(a123); // the sign might change\n\tlet aPeakHalf = a123b / 2;\n\tif (roundZero(aPeakHalf) === 0) {\n\t\tconst tolerance2 = tolerance * 10 ** -2;\n\t\tif (s1.sType === SegEnum.eStroke && s3.sType === SegEnum.eArc) {\n\t\t\taPeakHalf = s3.arcCcw ? tolerance2 : -tolerance2;\n\t\t} else if (s1.sType === SegEnum.eArc && s3.sType === SegEnum.eStroke) {\n\t\t\taPeakHalf = s1.arcCcw ? tolerance2 : -tolerance2;\n\t\t} else if (s1.sType === SegEnum.eStroke && s3.sType === SegEnum.eStroke) {\n\t\t\tthrow `err402: prepare aPeakHalf too closed to zero ${aPeakHalf}`;\n\t\t}\n\t\t// eArc && eArc : nothing special\n\t}\n\tconst aBisector = aTangent1 + aPeakHalf;\n\tconst p6 = p2.translatePolar(aBisector, s2.radius);\n\tconst rPre: tPrepare = {\n\t\ts1: s1,\n\t\ts2: s2,\n\t\ts3: s3,\n\t\tra: s2.radius,\n\t\tp1: p1,\n\t\tp2: p2,\n\t\tp3: p3,\n\t\tp4: s1.pc,\n\t\tp5: s3.pc,\n\t\tp6: p6,\n\t\tat1: aTangent1,\n\t\tat3: aTangent3,\n\t\tabi: aBisector,\n\t\taph: aPeakHalf\n\t};\n\treturn rPre;\n}\n\nfunction modifRadius(iaph: number, iseg: Segment2, iradius: number): number {\n\tif (iseg.sType !== SegEnum.eArc) {\n\t\tthrow `err510: modifRadius with wrong type ${iseg.sType}`;\n\t}\n\tconst bisector = iaph > 0 ? 1 : -1;\n\tconst arcCcw = iseg.arcCcw ? 1 : -1;\n\tconst sign = roundZero(iaph) === 0 ? 1 : bisector * arcCcw;\n\tconst rmr = iseg.radius + sign * iradius;\n\tif (rmr <= 0) {\n\t\tthrow `err621: modifRadius with negative modified lenght ${rmr}`;\n\t}\n\treturn rmr;\n}\nfunction closestPoint(ica: number, dist: number, pB: Point, p6: Point): Point {\n\tconst p7a = pB.translatePolar(ica, dist);\n\tconst p7b = pB.translatePolar(ica + Math.PI, dist);\n\tconst d67a = p6.distanceToPoint(p7a);\n\tconst d67b = p6.distanceToPoint(p7b);\n\tconst rp7 = d67a < d67b ? p7a : p7b;\n\treturn rp7;\n}\nfunction closestPoint2(p4: Point, a45: number, a547: number, dist: number, p6: Point): number {\n\tconst p7a = p4.translatePolar(a45 - a547, dist);\n\tconst p7b = p4.translatePolar(a45 + a547, dist);\n\tconst d67a = p6.distanceToPoint(p7a);\n\tconst d67b = p6.distanceToPoint(p7b);\n\tconst sign = d67a < d67b ? -1 : 1;\n\treturn sign;\n}\nfunction newStrokeFirst(iseg: Segment2, ip: Point): Segment2 {\n\tconst p8 = ip.clone();\n\tconst p1 = iseg.p1.clone();\n\tconst p2 = iseg.p2;\n\t// few checks\n\tif (iseg.sType !== SegEnum.eStroke) {\n\t\tthrow `err103: newStrokeFirst unexpected sType ${iseg.sType}`;\n\t}\n\tconst distLine = linePP(p1, p2).distanceToPoint(p8);\n\tif (roundZero(distLine) !== 0) {\n\t\tthrow `err104: newStrokeFirst new point not aligned ${distLine} ${p8.cx} ${p8.cy}`;\n\t}\n\tconst a2 = p1.angleToPoint(p2);\n\tconst a8 = p1.angleToPoint(p8);\n\tif (roundZero(withinPiPi(a8 - a2)) !== 0) {\n\t\tthrow `err105: newStrokeFirst new point miss aligned ${a2} ${a8} ${p8.cx} ${p8.cy}`;\n\t}\n\tconst l18 = p1.distanceToPoint(p8);\n\tconst l12 = p1.distanceToPoint(p2);\n\tif (l12 < l18) {\n\t\tthrow `err106: newStrokeFirst new point out of scope ${l12} ${l18} ${p8.cx} ${p8.cy}`;\n\t}\n\t// end of few checks\n\tconst p0 = point(0, 0);\n\tconst rNewSeg = new Segment2(SegEnum.eStroke, p1, p8, p0, 0, 0, 0, false);\n\treturn rNewSeg;\n}\nfunction newStrokeSecond(iseg: Segment2, ip: Point): Segment2 {\n\tconst p9 = ip.clone();\n\tconst p3 = iseg.p2.clone();\n\tconst p2 = iseg.p1;\n\t// few checks\n\tif (iseg.sType !== SegEnum.eStroke) {\n\t\tthrow `err203: newStrokeSecond unexpected sType ${iseg.sType}`;\n\t}\n\tconst distLine = linePP(p3, p2).distanceToPoint(p9);\n\tif (roundZero(distLine) !== 0) {\n\t\tthrow `err204: newStrokeSecond new point not aligned ${distLine} ${p9.cx} ${p9.cy}`;\n\t}\n\tconst a2 = p3.angleToPoint(p2);\n\tconst a9 = p3.angleToPoint(p9);\n\tif (roundZero(withinPiPi(a9 - a2)) !== 0) {\n\t\tthrow `err205: newStrokeSecond new point miss aligned ${a2} ${a9} ${p9.cx} ${p9.cy}`;\n\t}\n\tconst l39 = p3.distanceToPoint(p9);\n\tconst l32 = p3.distanceToPoint(p2);\n\tif (l32 < l39) {\n\t\tthrow `err206: newStrokeSecond new point out of scope ${l32} ${l39} ${p9.cx} ${p9.cy}`;\n\t}\n\t// end of few checks\n\tconst p0 = point(0, 0);\n\tconst rNewSeg = new Segment2(SegEnum.eStroke, p9, p3, p0, 0, 0, 0, false);\n\treturn rNewSeg;\n}\nfunction newArcFirst(iseg: Segment2, ip: Point): Segment2 {\n\tif (iseg.sType !== SegEnum.eArc) {\n\t\tthrow `err203: newArcFirst unexpected sType ${iseg.sType}`;\n\t}\n\tconst p1 = iseg.p1.clone();\n\tconst p4 = iseg.pc.clone();\n\tconst p8 = ip.clone();\n\tconst a48 = p4.angleToPoint(p8);\n\t// check arc angle are properly reduced\n\tif (!isWithin(a48, iseg.a1, iseg.a2, iseg.arcCcw)) {\n\t\tthrow `err908: newArcFirst a48 out of scope ${a48} ${iseg.a1} ${iseg.a2} ${iseg.arcCcw}`;\n\t}\n\tconst rNewSeg = new Segment2(SegEnum.eArc, p1, p8, p4, iseg.radius, iseg.a1, a48, iseg.arcCcw);\n\treturn rNewSeg;\n}\nfunction newArcSecond(iseg: Segment2, ip: Point): Segment2 {\n\tif (iseg.sType !== SegEnum.eArc) {\n\t\tthrow `err204: newArcSecond unexpected sType ${iseg.sType}`;\n\t}\n\tconst p3 = iseg.p2.clone();\n\tconst p5 = iseg.pc.clone();\n\tconst p9 = ip.clone();\n\tconst a59 = p5.angleToPoint(p9);\n\t// check arc angle are properly reduced\n\tif (!isWithin(a59, iseg.a1, iseg.a2, iseg.arcCcw)) {\n\t\tthrow `err907: newArcSecond a59 out of scope ${a59} ${iseg.a1} ${iseg.a2} ${iseg.arcCcw}`;\n\t}\n\tconst rNewSeg = new Segment2(SegEnum.eArc, p9, p3, p5, iseg.radius, a59, iseg.a2, iseg.arcCcw);\n\treturn rNewSeg;\n}\nfunction newRounded(\n\tip8: Point,\n\tip9: Point,\n\tip7: Point,\n\tra: number,\n\taph: number,\n\tabi: number\n): Segment2 {\n\tconst p8 = ip8.clone();\n\tconst p9 = ip9.clone();\n\tconst p7 = ip7.clone();\n\t// few checks\n\tconst l78 = p7.distanceToPoint(p8);\n\tconst l79 = p7.distanceToPoint(p9);\n\tif (roundZero(l78 - ra) !== 0 || roundZero(l79 - ra) !== 0) {\n\t\tthrow `err610: newRounded not on circle ${ra} ${l78} ${l79}`;\n\t}\n\tconst a78 = p7.angleToPoint(p8);\n\tconst a79 = p7.angleToPoint(p9);\n\tconst a873 = withinPiPi(a78 - abi + Math.PI);\n\tconst a973 = withinPiPi(a79 - abi + Math.PI);\n\tif (Math.abs(a973 - a873) > Math.PI + tolerance) {\n\t\tgSegDbg.addMsg(\n\t\t\t`warn882: newRounded a873 or a972 larger than PI/2 ` +\n\t\t\t\t`${ffix(a873)} ${ffix(a973)} at ${ffix(p7.cx)} ${ffix(p7.cy)}\\n`\n\t\t);\n\t}\n\t// end of few checks\n\tconst ccw2 = aph > 0 ? false : true;\n\tconst rNewSeg = new Segment2(SegEnum.eArc, p8, p9, p7, ra, a78, a79, ccw2);\n\treturn rNewSeg;\n}\nfunction roundStrokeStroke(ag: tPrepare): Segment2[] {\n\tconst l7 = Math.abs(ag.ra / Math.sin(ag.aph));\n\tconst l7b = l7 * Math.cos(ag.aph);\n\tconst p7 = ag.p2.translatePolar(ag.abi, l7);\n\t//const p8 = linePP(ag.p1, ag.p2).projectPoint(p7);\n\t//const p9 = linePP(ag.p2, ag.p3).projectPoint(p7);\n\t//const p8 = p7.translatePolar(a78, ag.ra);\n\t//const p9 = p7.translatePolar(a79, ag.ra);\n\tconst p8 = ag.p2.translatePolar(ag.at1, l7b);\n\tconst p9 = ag.p2.translatePolar(ag.at3, l7b);\n\tconst rsegs: Segment2[] = [];\n\trsegs.push(newStrokeFirst(ag.s1, p8));\n\trsegs.push(newRounded(p8, p9, p7, ag.ra, ag.aph, ag.abi));\n\trsegs.push(newStrokeSecond(ag.s3, p9));\n\treturn rsegs;\n}\nfunction roundStrokeArc(ag: tPrepare): Segment2[] {\n\tconst lStroke = linePP(ag.p1, ag.p2);\n\tconst lStrokep = lStroke.lineParallelDistance(ag.ra, ag.p6, ag.p5);\n\tconst pB = lStrokep.projectPoint(ag.p5);\n\t//gSegDbg.addPoint(ag.p6.clone(ShapePoint.eTwoTri));\n\t//gSegDbg.addPoint(ag.p5.clone(ShapePoint.eTri1));\n\t//gSegDbg.addPoint(pB.clone(ShapePoint.eTri2));\n\tconst lB5 = pB.distanceToPoint(ag.p5);\n\tconst ml = modifRadius(ag.aph, ag.s3, ag.ra);\n\tconst lB7 = rightTriLbFromLaLc(ml, lB5);\n\t//console.log(`dbg678: ${lB5} ${ml} ${lB7}`);\n\tconst p7 = closestPoint(lStrokep.ca, lB7, pB, ag.p6);\n\tconst a57 = ag.p5.angleToPoint(p7);\n\tconst p9 = ag.p5.translatePolar(a57, ag.s3.radius);\n\tconst a127 = ag.p2.angleFromToPoints(ag.p1, p7);\n\tconst l27 = Math.abs(ag.ra / Math.sin(a127));\n\tconst l28 = l27 * Math.cos(a127);\n\tconst a28 = ag.p2.angleToPoint(ag.p1);\n\tconst p8 = ag.p2.translatePolar(a28, l28);\n\t//gSegDbg.addPoint(p7.clone(ShapePoint.eTri3));\n\t//gSegDbg.addPoint(p8.clone(ShapePoint.eTri4));\n\t//gSegDbg.addPoint(p9.clone(ShapePoint.eCross));\n\tconst rsegs: Segment2[] = [];\n\trsegs.push(newStrokeFirst(ag.s1, p8));\n\trsegs.push(newRounded(p8, p9, p7, ag.ra, ag.aph, ag.abi));\n\trsegs.push(newArcSecond(ag.s3, p9));\n\t//rsegs.push(newStrokeFirst(ag.s1, ag.p2));\n\t//rsegs.push(newArcSecond(ag.s3, ag.p2));\n\treturn rsegs;\n}\nfunction roundArcStroke(ag: tPrepare): Segment2[] {\n\tconst lStroke = linePP(ag.p3, ag.p2);\n\tconst lStrokep = lStroke.lineParallelDistance(ag.ra, ag.p6, ag.p4);\n\tconst pB = lStrokep.projectPoint(ag.p4);\n\tconst lB4 = pB.distanceToPoint(ag.p4);\n\tconst ml = modifRadius(ag.aph, ag.s1, ag.ra);\n\tconst lB7 = rightTriLbFromLaLc(ml, lB4);\n\tconst p7 = closestPoint(lStrokep.ca, lB7, pB, ag.p6);\n\tconst a47 = ag.p4.angleToPoint(p7);\n\tconst p8 = ag.p4.translatePolar(a47, ag.s1.radius);\n\tconst a327 = ag.p2.angleFromToPoints(ag.p3, p7);\n\tconst l27 = Math.abs(ag.ra / Math.sin(a327));\n\tconst l29 = l27 * Math.cos(a327);\n\tconst a29 = ag.p2.angleToPoint(ag.p3);\n\tconst p9 = ag.p2.translatePolar(a29, l29);\n\t//gSegDbg.addPoint(p7.clone(ShapePoint.eTri3));\n\t//gSegDbg.addPoint(p8.clone(ShapePoint.eTri4));\n\t//gSegDbg.addPoint(p9.clone(ShapePoint.eCross));\n\tconst rsegs: Segment2[] = [];\n\trsegs.push(newArcFirst(ag.s1, p8));\n\trsegs.push(newRounded(p8, p9, p7, ag.ra, ag.aph, ag.abi));\n\trsegs.push(newStrokeSecond(ag.s3, p9));\n\t//rsegs.push(newArcFirst(ag.s1, ag.p2));\n\t//rsegs.push(newStrokeSecond(ag.s3, ag.p2));\n\treturn rsegs;\n}\nfunction roundArcArc(ag: tPrepare): Segment2[] {\n\tconst mr1 = modifRadius(ag.aph, ag.s1, ag.ra);\n\tconst mr3 = modifRadius(ag.aph, ag.s3, ag.ra);\n\tconst lp4p5 = ag.p4.distanceToPoint(ag.p5);\n\tconst a45 = ag.p4.angleToPoint(ag.p5);\n\tconst a547 = aCFromLaLbLc(lp4p5, mr1, mr3);\n\tconst sign1 = closestPoint2(ag.p4, a45, a547, mr1, ag.p6);\n\tconst a47 = a45 + sign1 * a547;\n\tconst p7 = ag.p4.translatePolar(a47, mr1);\n\tconst p8 = ag.p4.translatePolar(a47, ag.s1.radius);\n\tconst a54 = Math.PI + a45;\n\tconst a457 = aCFromLaLbLc(lp4p5, mr3, mr1);\n\t//const a457b = aBFromLaLbAa(mr3, mr1, a547); // a bad alternative using arcsinus!\n\t//if (roundZero(a457 - a457b) !== 0) {\n\t//\tgSegDbg.addMsg(`dbg356: ${a457b} ${a457} ${mr3} ${mr1} ${a547}\\n`);\n\t//}\n\tconst sign2 = closestPoint2(ag.p5, a54, a457, mr3, ag.p6);\n\tconst a57 = a54 + sign2 * a457;\n\tconst p7b = ag.p5.translatePolar(a57, mr3);\n\tif (!p7b.isEqual(p7)) {\n\t\tthrow `err909: roundArcArc p7 anf p7b differ ${p7.cx} ${p7b.cx} ${p7.cy} ${p7b.cy} ${ShapePoint.eDefault}`;\n\t}\n\tconst p9 = ag.p5.translatePolar(a57, ag.s3.radius);\n\t//gSegDbg.addPoint(p7.clone(ShapePoint.eTri1));\n\t//gSegDbg.addPoint(p7b.clone(ShapePoint.eSquare));\n\t//gSegDbg.addPoint(p8.clone(ShapePoint.eTri3));\n\t//gSegDbg.addPoint(p9.clone(ShapePoint.eTri4));\n\tconst rsegs: Segment2[] = [];\n\trsegs.push(newArcFirst(ag.s1, p8));\n\trsegs.push(newRounded(p8, p9, p7, ag.ra, ag.aph, ag.abi));\n\trsegs.push(newArcSecond(ag.s3, p9));\n\t//rsegs.push(newArcFirst(ag.s1, ag.p2));\n\t//rsegs.push(newArcSecond(ag.s3, ag.p2));\n\treturn rsegs;\n}\nfunction widenCorner(ag: tPrepare): Segment2[] {\n\tconst a68 = ag.abi - 2 * ag.aph;\n\tconst a69 = ag.abi + 2 * ag.aph;\n\tlet p8 = ag.p6.translatePolar(a68, ag.ra);\n\tlet p9 = ag.p6.translatePolar(a69, ag.ra);\n\tif (ag.s1.sType === SegEnum.eArc) {\n\t\tconst a246 = ag.p4.angleFromToPoints(ag.p2, ag.p6);\n\t\tconst a42 = ag.p4.angleToPoint(ag.p2);\n\t\tconst a46 = a42 + 2 * a246;\n\t\tp8 = ag.p4.translatePolar(a46, ag.s1.radius);\n\t}\n\tif (ag.s3.sType === SegEnum.eArc) {\n\t\tconst a256 = ag.p5.angleFromToPoints(ag.p2, ag.p6);\n\t\tconst a52 = ag.p5.angleToPoint(ag.p2);\n\t\tconst a56 = a52 + 2 * a256;\n\t\tp9 = ag.p5.translatePolar(a56, ag.s3.radius);\n\t}\n\tconst ccw2 = ag.aph > 0 ? false : true;\n\tconst segCorner = new Segment2(SegEnum.eArc, p8, p9, ag.p6, ag.ra, a68, a69, ccw2);\n\t//gSegDbg.addPoint(ag.p6.clone(ShapePoint.eTwoTri));\n\tconst rsegs: Segment2[] = [];\n\tif (ag.s1.sType === SegEnum.eStroke) {\n\t\trsegs.push(newStrokeFirst(ag.s1, p8));\n\t} else if (ag.s1.sType === SegEnum.eArc) {\n\t\trsegs.push(newArcFirst(ag.s1, p8));\n\t}\n\trsegs.push(segCorner);\n\tif (ag.s3.sType === SegEnum.eStroke) {\n\t\trsegs.push(newStrokeSecond(ag.s3, p9));\n\t} else if (ag.s3.sType === SegEnum.eArc) {\n\t\trsegs.push(newArcSecond(ag.s3, p9));\n\t}\n\treturn rsegs;\n}\nfunction wideAccessSide(sign: number, one: Segment2, p8one: Point, ag: tPrepare): Point[] {\n\tlet p8a = p8one;\n\tlet p8b = p8one;\n\tconst a268 = ag.p6.angleFromToPoints(ag.p2, p8one);\n\tif (Math.abs(a268) > Math.PI / 2) {\n\t\tp8b = ag.p6.translatePolar(ag.abi + (sign * Math.PI) / 2, ag.ra);\n\t\t//gSegDbg.addPoint(p8b.clone(ShapePoint.eSquare));\n\t\tconst l2 = line(p8b.cx, p8b.cy, ag.abi);\n\t\t//gSegDbg.addLine(l2);\n\t\tif (one.sType === SegEnum.eStroke) {\n\t\t\tconst l1 = linePP(one.p1, one.p2);\n\t\t\tp8a = l1.intersection(l2);\n\t\t} else if (one.sType === SegEnum.eArc) {\n\t\t\tconst ph = l2.projectPoint(one.pc);\n\t\t\t//gSegDbg.addPoint(ph.clone(ShapePoint.eSquare));\n\t\t\t//gSegDbg.addPoint(one.pc.clone(ShapePoint.eSquare));\n\t\t\t//gSegDbg.addLine(linePP(one.pc, ph));\n\t\t\tconst lh4 = ph.distanceToPoint(one.pc);\n\t\t\tif (lh4 < one.radius) {\n\t\t\t\tconst lh8a = rightTriLbFromLaLc(one.radius, lh4);\n\t\t\t\tp8a = closestPoint(ag.abi, lh8a, ph, p8one);\n\t\t\t} else {\n\t\t\t\tgSegDbg.addMsg(\n\t\t\t\t\t`warn222: wideAccess not possible on arc ` +\n\t\t\t\t\t\t`${ffix(one.radius)} ${ffix(lh4)} at ${ffix(p8one.cx)} ${ffix(p8one.cy)}\\n`\n\t\t\t\t);\n\t\t\t\tp8a = p8one;\n\t\t\t\tp8b = p8one;\n\t\t\t}\n\t\t}\n\t}\n\treturn [p8a, p8b];\n}\nfunction wideAccessCorner(ag: tPrepare): Segment2[] {\n\tconst ones = widenCorner(ag);\n\tconst sign1 = ones[1].arcCcw ? 1 : -1;\n\tconst [p8a, p8b] = wideAccessSide(sign1, ag.s1, ones[1].p1, ag);\n\tconst [p9a, p9b] = wideAccessSide(-sign1, ag.s3, ones[1].p2, ag);\n\t//gSegDbg.addPoint(p8a.clone(ShapePoint.eTri1));\n\t//gSegDbg.addPoint(p8b.clone(ShapePoint.eTri2));\n\t//gSegDbg.addPoint(p9b.clone(ShapePoint.eTri3));\n\t//gSegDbg.addPoint(p9a.clone(ShapePoint.eTri4));\n\tconst rsegs: Segment2[] = [];\n\tif (p8a.isEqual(p8b)) {\n\t\trsegs.push(ones[0]);\n\t} else {\n\t\tif (ag.s1.sType === SegEnum.eStroke) {\n\t\t\trsegs.push(newStrokeFirst(ag.s1, p8a));\n\t\t} else if (ag.s1.sType === SegEnum.eArc) {\n\t\t\trsegs.push(newArcFirst(ag.s1, p8a));\n\t\t}\n\t\tconst p0 = point(0, 0);\n\t\tconst newStroke = new Segment2(SegEnum.eStroke, p8a, p8b, p0, 0, 0, 0, false);\n\t\trsegs.push(newStroke);\n\t}\n\trsegs.push(newRounded(p8b, p9b, ag.p6, ag.ra, ag.aph, ag.abi));\n\tif (p9a.isEqual(p9b)) {\n\t\trsegs.push(ones[2]);\n\t} else {\n\t\tconst p0 = point(0, 0);\n\t\tconst newStroke = new Segment2(SegEnum.eStroke, p9b, p9a, p0, 0, 0, 0, false);\n\t\trsegs.push(newStroke);\n\t\tif (ag.s3.sType === SegEnum.eStroke) {\n\t\t\trsegs.push(newStrokeSecond(ag.s3, p9a));\n\t\t} else if (ag.s3.sType === SegEnum.eArc) {\n\t\t\trsegs.push(newArcSecond(ag.s3, p9a));\n\t\t}\n\t}\n\t//rsegs.push(ones[0]);\n\t//rsegs.push(ones[1]);\n\t//rsegs.push(ones[2]);\n\treturn rsegs;\n}\nfunction makeCorner(s1: Segment2, s2: Segment2, s3: Segment2): Segment2[] {\n\tconst preArg = prepare(s1, s2, s3);\n\tconst rsegs: Segment2[] = [];\n\tif (s2.sType === SegEnum.eRounded) {\n\t\tif (s1.sType === SegEnum.eStroke && s3.sType === SegEnum.eStroke) {\n\t\t\trsegs.push(...roundStrokeStroke(preArg));\n\t\t} else if (s1.sType === SegEnum.eStroke && s3.sType === SegEnum.eArc) {\n\t\t\trsegs.push(...roundStrokeArc(preArg));\n\t\t} else if (s1.sType === SegEnum.eArc && s3.sType === SegEnum.eStroke) {\n\t\t\trsegs.push(...roundArcStroke(preArg));\n\t\t} else if (s1.sType === SegEnum.eArc && s3.sType === SegEnum.eArc) {\n\t\t\trsegs.push(...roundArcArc(preArg));\n\t\t} else {\n\t\t\tthrow `err123: makeCorner unexpected s1s3.sType ${s1.sType} ${s3.sType}`;\n\t\t}\n\t} else if (s2.sType === SegEnum.eWidened) {\n\t\trsegs.push(...widenCorner(preArg));\n\t} else if (s2.sType === SegEnum.eWideAcc) {\n\t\trsegs.push(...wideAccessCorner(preArg));\n\t} else {\n\t\tthrow `err723: makeCorner unexpected s2.sType ${s2.sType}`;\n\t}\n\treturn rsegs;\n}\n\nexport {\n\tSegEnum,\n\tisSeg,\n\tisAddPoint,\n\tisActiveCorner,\n\tisCorner,\n\tSegment1,\n\tSegment2,\n\tgSegDbg,\n\tarcSeg1To2,\n\tarcSeg2To1,\n\tmakeCorner\n};\n","// write_svg.ts\n\n// floating precision for svg export\nfunction ff(ifloat: number): string {\n\treturn ifloat.toFixed(4);\n}\n\nfunction svgCircleString(cx: number, cy: number, radius: number, color = ''): string {\n\tlet sColor = color;\n\tif (sColor === '') {\n\t\tsColor = 'black';\n\t}\n\tconst rSvg = `<circle cx=\"${ff(cx)}\" cy=\"${ff(cy)}\" r=\"${ff(\n\t\tradius\n\t)}\" stroke=\"${sColor}\" stroke-width=\"1\" fill=\"none\" />`;\n\treturn rSvg;\n}\n\nclass SvgPath {\n\tpathD: string;\n\tconstructor() {\n\t\tthis.pathD = '';\n\t}\n\taddStart(px: number, py: number) {\n\t\tthis.pathD = `M ${ff(px)} ${ff(py)}`;\n\t}\n\taddStroke(px: number, py: number) {\n\t\tthis.pathD += ` L ${ff(px)} ${ff(py)}`;\n\t}\n\taddArc(px: number, py: number, radius: number, large: boolean, ccw: boolean) {\n\t\tconst aRadius = ff(radius);\n\t\tconst aLarge = large ? 1 : 0;\n\t\tconst aCcw = ccw ? 1 : 0;\n\t\tthis.pathD += ` A ${aRadius} ${aRadius} 0 ${aLarge} ${aCcw} ${ff(px)} ${ff(py)}`;\n\t}\n\tstringify(color = ''): string {\n\t\tlet sColor = color;\n\t\tif (sColor === '') {\n\t\t\tsColor = 'black';\n\t\t}\n\t\tconst rSvg = `<path d=\"${this.pathD} Z\" stroke=\"${sColor}\" stroke-width=\"1\" fill=\"none\" />`;\n\t\treturn rSvg;\n\t}\n}\nfunction svgPath(): SvgPath {\n\tconst rSvgPath = new SvgPath();\n\treturn rSvgPath;\n}\n\nclass SvgWriter {\n\tsvgStr: string;\n\tpayloadStr: string;\n\tgroupActive: boolean;\n\tconstructor() {\n\t\tthis.payloadStr = '';\n\t\tthis.svgStr = '';\n\t\tthis.groupActive = false;\n\t}\n\taddHeader(xMin: number, xWidth: number, yMin: number, yHeight: number) {\n\t\tconst viewBoxValues = `${xMin} ${yMin} ${xWidth} ${yHeight}`;\n\t\tthis.svgStr = `<svg width=\"${xWidth}\" height=\"${yHeight}\" viewBox=\"${viewBoxValues}\" xmlns=\"http://www.w3.org/2000/svg\">`;\n\t}\n\taddSvgString(svgString: string) {\n\t\tthis.payloadStr += svgString;\n\t}\n\taddGroup(groupId: string) {\n\t\tif (this.groupActive) {\n\t\t\tthrow `err321: group must be closed before opening a new one`;\n\t\t}\n\t\tthis.groupActive = true;\n\t\tthis.payloadStr += `<g id=\"${groupId}\">`;\n\t}\n\tcloseGroup() {\n\t\tif (!this.groupActive) {\n\t\t\tthrow `err331: group is not active so can not be closed`;\n\t\t}\n\t\tthis.groupActive = false;\n\t\tthis.payloadStr += `</g>`;\n\t}\n\tcloseSvg() {\n\t\tif (this.svgStr === '') {\n\t\t\tthrow `err301: no header set for the svg`;\n\t\t}\n\t\tif (this.groupActive) {\n\t\t\tthrow `err311: group is not closed`;\n\t\t}\n\t\tthis.svgStr += this.payloadStr;\n\t\tthis.svgStr += '</svg>';\n\t}\n\tstringify(): string {\n\t\tthis.closeSvg();\n\t\treturn this.svgStr;\n\t}\n}\nfunction svgWriter(): SvgWriter {\n\tconst rSvgWrite = new SvgWriter();\n\treturn rSvgWrite;\n}\n\nexport type { SvgWriter };\nexport { svgWriter, svgPath, svgCircleString };\n","// write_dxf.ts\n\nimport { radToDeg, withinZero2Pi } from './angle_utils';\n\n// floating precision for dxf export\nfunction ff(ifloat: number): string {\n\treturn ifloat.toFixed(4);\n}\n\nclass DxfSeg {\n\tarc: boolean;\n\tp1x: number;\n\tp1y: number;\n\tradius: number;\n\ta1: number;\n\ta2: number;\n\tp2x: number;\n\tp2y: number;\n\tconstructor(\n\t\tarc: boolean,\n\t\tp1x: number,\n\t\tp1y: number,\n\t\tradius: number,\n\t\ta1: number,\n\t\ta2: number,\n\t\tp2x: number,\n\t\tp2y: number\n\t) {\n\t\tthis.arc = arc;\n\t\tthis.p1x = p1x;\n\t\tthis.p1y = p1y;\n\t\tthis.radius = radius;\n\t\tthis.a1 = a1;\n\t\tthis.a2 = a2;\n\t\tthis.p2x = p2x;\n\t\tthis.p2y = p2y;\n\t}\n}\nfunction dxfSegLine(p1x: number, p1y: number, p2x: number, p2y: number): DxfSeg {\n\tconst rDxfSeg = new DxfSeg(false, p1x, p1y, 0, 0, 0, p2x, p2y);\n\treturn rDxfSeg;\n}\nfunction dxfSegArc(\n\tp1x: number,\n\tp1y: number,\n\tradius: number,\n\taa1: number,\n\taa2: number,\n\tarcCcw: boolean\n): DxfSeg {\n\t//const a1 = aa1;\n\t//const a2 = aa2;\n\tconst a1 = arcCcw ? aa1 : aa2;\n\tconst a2 = arcCcw ? aa2 : aa1;\n\t// DXF angles are in degree and preferably positive\n\tconst b1 = radToDeg(withinZero2Pi(a1));\n\tconst b2 = radToDeg(withinZero2Pi(a2));\n\tconst rDxfSeg = new DxfSeg(true, p1x, p1y, radius, b1, b2, 0, 0);\n\treturn rDxfSeg;\n}\nfunction dxfSegCircle(p1x: number, p1y: number, radius: number): DxfSeg {\n\tconst rDxfSeg = new DxfSeg(false, p1x, p1y, radius, 0, 0, 0, 0);\n\treturn rDxfSeg;\n}\n\nclass DxfWrite {\n\tdxfStr: string;\n\tconstructor() {\n\t\tthis.dxfStr = '0\\nSECTION\\n2\\nENTITIES\\n';\n\t}\n\taddCircle(cx: number, cy: number, radius: number) {\n\t\tthis.dxfStr += '0\\nCIRCLE\\n8\\nPARAMETRIX\\n';\n\t\tthis.dxfStr += `10\\n${ff(cx)}\\n20\\n${ff(cy)}\\n40\\n${ff(radius)}\\n`;\n\t}\n\taddLine(p1x: number, p1y: number, p2x: number, p2y: number) {\n\t\tthis.dxfStr += '0\\nLINE\\n8\\nPARAMETRIX\\n';\n\t\tthis.dxfStr += `10\\n${ff(p1x)}\\n20\\n${ff(p1y)}\\n11\\n${ff(p2x)}\\n21\\n${ff(p2y)}\\n`;\n\t}\n\taddArc(cx: number, cy: number, ra: number, a1: number, a2: number) {\n\t\tthis.dxfStr += '0\\nARC\\n8\\nPARAMETRIX\\n';\n\t\tthis.dxfStr += `10\\n${ff(cx)}\\n20\\n${ff(cy)}\\n40\\n${ff(ra)}\\n50\\n${ff(a1)}\\n51\\n${ff(\n\t\t\ta2\n\t\t)}\\n`;\n\t}\n\tclose() {\n\t\tthis.dxfStr += '0\\nENDSEC\\n0\\nEOF\\n';\n\t}\n\tstringify(): string {\n\t\tthis.close();\n\t\treturn this.dxfStr;\n\t}\n}\n\nfunction dxfWriter() {\n\tconst rDxfWrite = new DxfWrite();\n\treturn rDxfWrite;\n}\n\nexport type { DxfSeg };\nexport { dxfSegLine, dxfSegArc, dxfSegCircle, dxfWriter };\n","// prepare_pax.ts\n\n// floating precision for pax export\nfunction ff(ifloat: number): number {\n\t//const rFloat = ifloat.toFixed(4);\n\t//const c10 = 10000;\n\t//const rFloat = Math.round(ifloat * c10) / c10;\n\tconst rFloat = ifloat; // no rounding\n\treturn rFloat;\n}\n\ninterface tPaxContourCircle {\n\tcircle: boolean;\n\tcx: number;\n\tcy: number;\n\tradius: number;\n}\n\nenum PSeg {\n\teStart,\n\teStroke,\n\teArc\n}\n// for start and stroke\ninterface tPaxSegSt {\n\ttyp: PSeg;\n\tpx: number;\n\tpy: number;\n}\ninterface tPaxSegArc {\n\ttyp: PSeg;\n\tpx: number;\n\tpy: number;\n\tradius: number;\n\tlarge: boolean;\n\tccw: boolean;\n}\ntype tPaxSeg = tPaxSegSt | tPaxSegArc;\ninterface tPaxContourPath {\n\tcircle: boolean;\n\tseg: tPaxSeg[];\n}\ntype tPaxContour = tPaxContourPath | tPaxContourCircle;\n\nfunction paxCircle(cx: number, cy: number, radius: number): tPaxContourCircle {\n\tconst rPax: tPaxContourCircle = {\n\t\tcircle: true,\n\t\tcx: ff(cx),\n\t\tcy: ff(cy),\n\t\tradius: ff(radius)\n\t};\n\treturn rPax;\n}\n\nclass PaxPath {\n\tseg: tPaxSeg[];\n\tconstructor() {\n\t\tthis.seg = [];\n\t}\n\taddStart(px: number, py: number) {\n\t\tthis.seg = [];\n\t\tconst one: tPaxSegSt = {\n\t\t\ttyp: PSeg.eStart,\n\t\t\tpx: px,\n\t\t\tpy: py\n\t\t};\n\t\tthis.seg.push(one);\n\t}\n\taddStroke(px: number, py: number) {\n\t\tconst one: tPaxSegSt = {\n\t\t\ttyp: PSeg.eStroke,\n\t\t\tpx: px,\n\t\t\tpy: py\n\t\t};\n\t\tthis.seg.push(one);\n\t}\n\taddArc(cx: number, cy: number, radius: number, large: boolean, ccw: boolean) {\n\t\tconst one: tPaxSegArc = {\n\t\t\ttyp: PSeg.eArc,\n\t\t\tpx: cx,\n\t\t\tpy: cy,\n\t\t\tradius: radius,\n\t\t\tlarge: large,\n\t\t\tccw: ccw\n\t\t};\n\t\tthis.seg.push(one);\n\t}\n\ttoJson(): tPaxContourPath {\n\t\tconst rPaxC: tPaxContourPath = {\n\t\t\tcircle: false,\n\t\t\tseg: this.seg\n\t\t};\n\t\treturn rPaxC;\n\t}\n}\nfunction paxPath(): PaxPath {\n\tconst rPaxPath = new PaxPath();\n\treturn rPaxPath;\n}\n\nexport type { tPaxSegArc, tPaxSeg, tPaxContourPath, tPaxContourCircle, tPaxContour };\nexport { PSeg, paxPath, paxCircle };\n","// contour.ts\n// contour.ts deals with open and closed path composed of segments and arcs\n// contour.ts depends on point.ts, line.ts, vector.ts and segment.ts\n// contour.ts is used by figure.ts\n\nimport type { tCanvasAdjust } from './canvas_utils';\n//import type { tPolar } from './point';\n//import { colorCanvasPoint } from '$lib/style/colors.scss';\nimport {\n\t//degToRad,\n\t//radToDeg,\n\troundZero,\n\t//withinZero2Pi,\n\twithinPiPi,\n\t//withinZeroPi,\n\t//withinHPiHPi,\n\tffix\n} from './angle_utils';\nimport { colors, point2canvas, radius2canvas } from './canvas_utils';\n//import {\n//\t//rightTriLaFromLbLc,\n//\trightTriLbFromLaLc\n//\t//lcFromLaLbAc,\n//\t//aCFromLaLbLc,\n//\t//aCFromAaAb,\n//\t//lbFromLaAaAb,\n//\t//aBFromLaLbAa\n//} from './triangle_utils';\nimport { point, Point } from './point';\nimport { line, Line, bisector, circleCenter } from './line';\n//import { vector, Vector } from './vector';\nimport * as segLib from './segment';\nimport { svgPath, svgCircleString } from './write_svg';\nimport type { DxfSeg } from './write_dxf';\nimport { dxfSegLine, dxfSegArc, dxfSegCircle } from './write_dxf';\nimport type { tPaxContourPath, tPaxContourCircle, tPaxContour } from './prepare_pax';\nimport { paxPath, paxCircle } from './prepare_pax';\n\n/* AContour abstract class */\n\nabstract class AContour {\n\tabstract circle: boolean;\n\tabstract imposedColor: string;\n\tabstract draw(ctx: CanvasRenderingContext2D, cAdjust: tCanvasAdjust, color: string): void;\n\tabstract extractSkeleton(): AContour;\n\tabstract generateContour(): AContour;\n\tabstract generatePoints(): Point[];\n\tabstract generateLines(): Line[];\n\tabstract check(): string;\n\tabstract toSvg(yCeiling: number, color?: string): string;\n\tabstract toDxfSeg(): DxfSeg[];\n\tabstract toPax(): tPaxContour;\n}\n\n/* Contour class */\n\nclass Contour extends AContour {\n\tcircle = false;\n\tsegments: segLib.Segment1[];\n\tpoints: Point[];\n\tdebugPoints: Point[];\n\tdebugLines: Line[];\n\tlastPoint: Point;\n\timposedColor: string;\n\tconstructor(ix: number, iy: number, icolor = '') {\n\t\tsuper();\n\t\tthis.segments = [new segLib.Segment1(segLib.SegEnum.eStart, ix, iy, 0)];\n\t\tthis.points = [];\n\t\tthis.debugPoints = [];\n\t\tthis.debugLines = [];\n\t\tthis.lastPoint = point(ix, iy);\n\t\tthis.imposedColor = icolor;\n\t}\n\tsetLastPoint(ix: number, iy: number) {\n\t\tthis.lastPoint = point(ix, iy);\n\t}\n\tgetLastPoint(): Point {\n\t\treturn this.lastPoint;\n\t}\n\taddPointA(ax: number, ay: number): Contour {\n\t\tif (this.points.length > 2) {\n\t\t\tthrow `err311: contour add too much point ${ax} ${ay}`;\n\t\t}\n\t\tthis.points.push(point(ax, ay));\n\t\treturn this;\n\t}\n\taddPointAP(aa: number, al: number): Contour {\n\t\tconst p1 = point(0, 0).translatePolar(aa, al);\n\t\tthis.addPointA(p1.cx, p1.cy);\n\t\treturn this;\n\t}\n\taddPointR(rx: number, ry: number): Contour {\n\t\tconst plast = this.getLastPoint();\n\t\tconst p1 = plast.translate(rx, ry);\n\t\tthis.addPointA(p1.cx, p1.cy);\n\t\treturn this;\n\t}\n\taddPointRP(ra: number, rl: number): Contour {\n\t\tconst plast = this.getLastPoint();\n\t\tconst p1 = plast.translatePolar(ra, rl);\n\t\tthis.addPointA(p1.cx, p1.cy);\n\t\treturn this;\n\t}\n\taddSeg(iSeg: segLib.Segment1): Contour {\n\t\tthis.segments.push(iSeg);\n\t\treturn this;\n\t}\n\taddSegStroke(): Contour {\n\t\tif (this.points.length !== 1) {\n\t\t\tthrow `err554: contour addSegStroke with unexpected points.length ${this.points.length}`;\n\t\t}\n\t\tconst p1 = this.points.pop();\n\t\tif (p1 !== undefined) {\n\t\t\tconst seg = new segLib.Segment1(segLib.SegEnum.eStroke, p1.cx, p1.cy, 0);\n\t\t\tif (!p1.isEqual(this.getLastPoint())) {\n\t\t\t\tthis.addSeg(seg);\n\t\t\t\tthis.setLastPoint(p1.cx, p1.cy);\n\t\t\t}\n\t\t\t// else no warning in order to avoid warning in gears\n\t\t} else {\n\t\t\tthrow `err284: contour p1 is undefined`;\n\t\t}\n\t\treturn this;\n\t}\n\taddSegStrokeA(ax: number, ay: number): Contour {\n\t\tthis.addPointA(ax, ay).addSegStroke();\n\t\treturn this;\n\t}\n\taddSegStrokeAP(aa: number, al: number): Contour {\n\t\tthis.addPointAP(aa, al).addSegStroke();\n\t\treturn this;\n\t}\n\taddSegStrokeR(rx: number, ry: number): Contour {\n\t\tthis.addPointR(rx, ry).addSegStroke();\n\t\treturn this;\n\t}\n\taddSegStrokeRP(ra: number, rl: number): Contour {\n\t\tthis.addPointRP(ra, rl).addSegStroke();\n\t\treturn this;\n\t}\n\taddSegArc(iRadius: number, iLarge: boolean, iCcw: boolean): Contour {\n\t\tif (this.points.length !== 1) {\n\t\t\tthrow `err954: contour addSegArc with unexpected points.length ${this.points.length}`;\n\t\t}\n\t\tconst p1 = this.points.pop();\n\t\tif (p1 !== undefined) {\n\t\t\tconst seg = new segLib.Segment1(\n\t\t\t\tsegLib.SegEnum.eArc,\n\t\t\t\tp1.cx,\n\t\t\t\tp1.cy,\n\t\t\t\tiRadius,\n\t\t\t\tiLarge,\n\t\t\t\tiCcw\n\t\t\t);\n\t\t\tif (!p1.isEqual(this.getLastPoint())) {\n\t\t\t\tthis.addSeg(seg);\n\t\t\t\tthis.setLastPoint(p1.cx, p1.cy);\n\t\t\t} else {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`warn144: addSegArc last and new point identical ${ffix(p1.cx)} ${ffix(p1.cy)}`\n\t\t\t\t);\n\t\t\t}\n\t\t\t//this.debugPoints.push(p1);\n\t\t} else {\n\t\t\tthrow `err482: contour p1 is undefined`;\n\t\t}\n\t\treturn this;\n\t}\n\taddSegArc2(): Contour {\n\t\tif (this.points.length !== 2) {\n\t\t\tthrow `err958: contour addSegArc2 with unexpected points.length ${this.points.length}`;\n\t\t}\n\t\tconst p2 = this.points.pop();\n\t\tconst p1 = this.points.pop();\n\t\tif (p1 !== undefined && p2 !== undefined) {\n\t\t\tconst p0 = this.getLastPoint();\n\t\t\tconst p3 = circleCenter(p0, p1, p2);\n\t\t\tconst radius = p3.distanceToPoint(p0);\n\t\t\tconst p0p2middle = p0.middlePoint(p2);\n\t\t\tconst a0 = p0p2middle.angleToPoint(p0);\n\t\t\tconst a1 = p0p2middle.angleToPoint(p1);\n\t\t\tconst a3 = p0p2middle.angleToPoint(p3);\n\t\t\tconst a01 = withinPiPi(a1 - a0);\n\t\t\tconst a03 = withinPiPi(a3 - a0);\n\t\t\tlet large = false;\n\t\t\tlet ccw = false;\n\t\t\tif (Math.sign(a03) * Math.sign(a01) > 0) {\n\t\t\t\tlarge = true;\n\t\t\t}\n\t\t\tif (Math.sign(a01) > 0) {\n\t\t\t\tccw = true;\n\t\t\t}\n\t\t\t//console.log(`dbg437: ${radius.toFixed(2)} ${large} ${ccw}`);\n\t\t\tthis.addPointA(p2.cx, p2.cy).addSegArc(radius, large, ccw);\n\t\t\tthis.debugPoints.push(p1);\n\t\t\t//this.debugPoints.push(p2);\n\t\t} else {\n\t\t\tthrow `err488: contour p1 or p2 or seg is undefined`;\n\t\t}\n\t\treturn this;\n\t}\n\taddSegArc3(iTangentAngle1: number, firstNlast: boolean): Contour {\n\t\tif (this.points.length !== 1) {\n\t\t\tthrow `err914: contour addSegArc3 with unexpected points.length ${this.points.length}`;\n\t\t}\n\t\tconst p1 = this.points.pop();\n\t\tif (p1 !== undefined) {\n\t\t\tconst p0 = this.getLastPoint();\n\t\t\tconst lbi = bisector(p0, p1);\n\t\t\tlet pref = p1;\n\t\t\tif (firstNlast) {\n\t\t\t\tpref = p0;\n\t\t\t}\n\t\t\tconst lradial = line(pref.cx, pref.cy, iTangentAngle1 + Math.PI / 2);\n\t\t\tconst pArcCenter = lbi.intersection(lradial);\n\t\t\tconst radius = pArcCenter.distanceToPoint(p0);\n\t\t\tconst pmid = p0.middlePoint(p1);\n\t\t\tconst amid = pref.angleToPoint(pmid);\n\t\t\tconst aref = withinPiPi(iTangentAngle1 - amid);\n\t\t\tlet large = false;\n\t\t\tif (Math.abs(aref) > Math.PI / 2) {\n\t\t\t\tlarge = true;\n\t\t\t}\n\t\t\tlet ccw = false;\n\t\t\tif (aref < 0) {\n\t\t\t\tccw = true;\n\t\t\t}\n\t\t\tif (!firstNlast) {\n\t\t\t\tccw = !ccw;\n\t\t\t}\n\t\t\tthis.addPointA(p1.cx, p1.cy).addSegArc(radius, large, ccw);\n\t\t\tthis.debugPoints.push(pmid);\n\t\t\tthis.debugPoints.push(pArcCenter);\n\t\t} else {\n\t\t\tthrow `err282: contour p1 is undefined`;\n\t\t}\n\t\treturn this;\n\t}\n\taddSeg2Arcs(ita1: number, ita2: number): Contour {\n\t\tif (this.points.length !== 1) {\n\t\t\tthrow `err214: contour addSeg2Arcs with unexpected points.length ${this.points.length}`;\n\t\t}\n\t\tconst p1 = this.points.pop();\n\t\tif (p1 !== undefined) {\n\t\t\tconst p0 = this.getLastPoint();\n\t\t\tconst l01 = p0.distanceToPoint(p1);\n\t\t\tconst a01 = p0.angleToPoint(p1);\n\t\t\tconst a10 = p1.angleToPoint(p0);\n\t\t\tconst au = withinPiPi(ita1 - a01);\n\t\t\tconst av = -1 * withinPiPi(ita2 - a10);\n\t\t\t//console.log(`dbg998: addSeg2Arcs au ${au} av ${av}`);\n\t\t\tif (Math.abs(au) >= Math.PI / 2) {\n\t\t\t\tthrow `err545: addSeg2Arcs with too large au ${au}`;\n\t\t\t}\n\t\t\tif (Math.abs(av) >= Math.PI / 2) {\n\t\t\t\tthrow `err546: addSeg2Arcs with too large av ${av}`;\n\t\t\t}\n\t\t\tif (roundZero(au) === 0) {\n\t\t\t\tthrow `err765: addSeg2Arcs with almost zero au ${au}`;\n\t\t\t}\n\t\t\tif (roundZero(av) === 0) {\n\t\t\t\tthrow `err766: addSeg2Arcs with almost zero av ${av}`;\n\t\t\t}\n\t\t\tif (Math.sign(au) * Math.sign(av) < 1) {\n\t\t\t\tthrow `err767: addSeg2Arcs with au/av bad orientation ${au} ${av}`;\n\t\t\t}\n\t\t\t// l01=BH+HC\n\t\t\t// HG=BH*tan(au/2)=HC*tan(av/2)\n\t\t\t// l01=HG*(1/tan(au/2)+1/tan(av/2))\n\t\t\t// l01*tan(au/2)*tan(av/2)=HG*tan(av/2)+HG*tan(au/2)\n\t\t\t// HG=l01*tan(au/2)*tan(av/2)/(tan(av/2)+tan(au/2))\n\t\t\t// trigonometry half-angle formula: tan(a/2)=(1-cos(a))/sin(a)\n\t\t\t// trigonometry tan(a+b)=(tan(a)+tan(b))/(1-tan(a)*tan(b))\n\t\t\tconst tanu2 = Math.tan(au / 2);\n\t\t\tconst tanv2 = Math.tan(av / 2);\n\t\t\t//const lHG = (l01 * tanu2 * tanv2) / (tanv2 + tanu2); // only for console.log()\n\t\t\t//const lBH = lHG/tanu2;\n\t\t\tconst lBH = (l01 * tanv2) / (tanv2 + tanu2);\n\t\t\t// cos(PI/2-au)=sin(u)=lBH/lJB\n\t\t\t// lJB=lBH/sin(au)\n\t\t\tconst lJB = Math.abs(lBH / Math.sin(au));\n\t\t\t//const lJH = lBH / Math.cotan(au);\n\t\t\tconst lBG = lBH / Math.cos(au / 2);\n\t\t\tconst lHC = (l01 * tanu2) / (tanv2 + tanu2);\n\t\t\tconst lIC = Math.abs(lHC / Math.sin(av));\n\t\t\t//const lCG = lHC / Math.cos(av / 2); // only for console.log()\n\t\t\tconst p2 = p0.translatePolar(a01 + au / 2, lBG);\n\t\t\tlet ccw = false;\n\t\t\tif (Math.sign(au) < 0) {\n\t\t\t\tccw = true;\n\t\t\t}\n\t\t\t//console.log(`dbg401: addSeg2Arcs l01 ${l01} lHG ${lHG}`);\n\t\t\t//console.log(`dbg409: addSeg2Arcs lBH ${lBH} lBG ${lBG} lJB ${lJB}`);\n\t\t\t//console.log(`dbg408: addSeg2Arcs lHC ${lHC} lCG ${lCG} lIC ${lIC}`);\n\t\t\tthis.addPointA(p2.cx, p2.cy).addSegArc(lJB, false, ccw);\n\t\t\tthis.addPointA(p1.cx, p1.cy).addSegArc(lIC, false, ccw);\n\t\t\t//this.debugPoints.push(p2);\n\t\t\tthis.debugPoints.push(p0.translatePolar(a01, lBH)); // H\n\t\t\tthis.debugPoints.push(p0.translatePolar(a01 + au - (Math.sign(au) * Math.PI) / 2, lJB)); // J\n\t\t\t//this.debugPoints.push(p1.translatePolar(a10, lHC)); // H\n\t\t\tthis.debugPoints.push(p1.translatePolar(a10 - av + (Math.sign(au) * Math.PI) / 2, lIC)); // I\n\t\t} else {\n\t\t\tthrow `err182: contour p1 is undefined`;\n\t\t}\n\t\treturn this;\n\t}\n\taddCornerPointed(): Contour {\n\t\tconst seg = new segLib.Segment1(segLib.SegEnum.ePointed, 0, 0, 0);\n\t\tthis.addSeg(seg);\n\t\treturn this;\n\t}\n\taddCornerRounded(iRadius: number): Contour {\n\t\tconst seg = new segLib.Segment1(segLib.SegEnum.eRounded, 0, 0, iRadius);\n\t\tthis.addSeg(seg);\n\t\treturn this;\n\t}\n\taddCornerWidened(iRadius: number): Contour {\n\t\tconst seg = new segLib.Segment1(segLib.SegEnum.eWidened, 0, 0, iRadius);\n\t\tthis.addSeg(seg);\n\t\treturn this;\n\t}\n\taddCornerWideAcc(iRadius: number): Contour {\n\t\tconst seg = new segLib.Segment1(segLib.SegEnum.eWideAcc, 0, 0, iRadius);\n\t\tthis.addSeg(seg);\n\t\treturn this;\n\t}\n\tcloseSegStroke(): Contour {\n\t\tconst px = this.segments[0].px;\n\t\tconst py = this.segments[0].py;\n\t\tthis.addSegStrokeA(px, py);\n\t\treturn this;\n\t}\n\tcloseSegArc(iRadius: number, iLarge: boolean, iCcw: boolean): Contour {\n\t\tconst px = this.segments[0].px;\n\t\tconst py = this.segments[0].py;\n\t\tthis.addPointA(px, py).addSegArc(iRadius, iLarge, iCcw);\n\t\treturn this;\n\t}\n\tclone(): Contour {\n\t\tconst rctr = new Contour(this.segments[0].px, this.segments[0].py);\n\t\tfor (const seg of this.segments) {\n\t\t\tconst nseg = seg.clone();\n\t\t\tif (nseg.sType !== segLib.SegEnum.eStart) {\n\t\t\t\trctr.addSeg(nseg);\n\t\t\t\tif (segLib.isSeg(nseg.sType)) {\n\t\t\t\t\trctr.setLastPoint(nseg.px, nseg.py);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rctr;\n\t}\n\ttranslate(ix: number, iy: number): Contour {\n\t\tconst p0x = this.segments[0].px + ix;\n\t\tconst p0y = this.segments[0].py + iy;\n\t\tconst rctr = new Contour(p0x, p0y);\n\t\tfor (const seg of this.segments) {\n\t\t\tconst nseg = seg.clone();\n\t\t\tif (segLib.isSeg(seg.sType)) {\n\t\t\t\tnseg.px += ix;\n\t\t\t\tnseg.py += iy;\n\t\t\t}\n\t\t\tif (nseg.sType !== segLib.SegEnum.eStart) {\n\t\t\t\trctr.addSeg(nseg);\n\t\t\t\tif (segLib.isSeg(nseg.sType)) {\n\t\t\t\t\trctr.setLastPoint(nseg.px, nseg.py);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rctr;\n\t}\n\ttranslatePolar(ia: number, il: number): Contour {\n\t\treturn this.translate(il * Math.cos(ia), il * Math.sin(ia));\n\t}\n\trotate(ix: number, iy: number, ia: number): Contour {\n\t\tconst ic = point(ix, iy);\n\t\tconst pStart = point(this.segments[0].px, this.segments[0].py);\n\t\tconst pStartRot = pStart.rotate(ic, ia);\n\t\tconst rctr = new Contour(pStartRot.cx, pStartRot.cy);\n\t\tfor (const seg of this.segments) {\n\t\t\tconst nseg = seg.clone();\n\t\t\tif (segLib.isSeg(seg.sType)) {\n\t\t\t\tconst pt = point(nseg.px, nseg.py);\n\t\t\t\tconst ptRot = pt.rotate(ic, ia);\n\t\t\t\tnseg.px = ptRot.cx;\n\t\t\t\tnseg.py = ptRot.cy;\n\t\t\t}\n\t\t\tif (nseg.sType !== segLib.SegEnum.eStart) {\n\t\t\t\trctr.addSeg(nseg);\n\t\t\t\tif (segLib.isSeg(nseg.sType)) {\n\t\t\t\t\trctr.setLastPoint(nseg.px, nseg.py);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rctr;\n\t}\n\tscale(ix: number, iy: number, ir: number, scaleCorner = false): Contour {\n\t\tconst ic = point(ix, iy);\n\t\tconst pStart = point(this.segments[0].px, this.segments[0].py);\n\t\tconst pStartScale = pStart.scale(ic, ir);\n\t\tconst rctr = new Contour(pStartScale.cx, pStartScale.cy);\n\t\tfor (const seg of this.segments) {\n\t\t\tconst nseg = seg.clone();\n\t\t\tif (segLib.isSeg(seg.sType)) {\n\t\t\t\tconst pt = point(nseg.px, nseg.py);\n\t\t\t\tconst ptScale = pt.scale(ic, ir);\n\t\t\t\tnseg.px = ptScale.cx;\n\t\t\t\tnseg.py = ptScale.cy;\n\t\t\t}\n\t\t\tif (seg.sType === segLib.SegEnum.eArc) {\n\t\t\t\tnseg.radius *= ir;\n\t\t\t}\n\t\t\tif (segLib.isActiveCorner(seg.sType) && scaleCorner) {\n\t\t\t\tnseg.radius *= ir;\n\t\t\t}\n\t\t\tif (nseg.sType !== segLib.SegEnum.eStart) {\n\t\t\t\trctr.addSeg(nseg);\n\t\t\t\tif (segLib.isSeg(nseg.sType)) {\n\t\t\t\t\trctr.setLastPoint(nseg.px, nseg.py);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rctr;\n\t}\n\taddPartial(iContour: Contour): Contour {\n\t\tif (this.points.length > 0) {\n\t\t\tthrow `err911: addPartial, points should be used ${this.points.length}`;\n\t\t}\n\t\tfor (const seg of iContour.segments) {\n\t\t\tif (seg.sType !== segLib.SegEnum.eStart) {\n\t\t\t\tthis.addSeg(seg);\n\t\t\t\tif (segLib.isSeg(seg.sType)) {\n\t\t\t\t\tthis.setLastPoint(seg.px, seg.py);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\tdraw(ctx: CanvasRenderingContext2D, cAdjust: tCanvasAdjust, color: string = colors.contour) {\n\t\tconst theColor = this.imposedColor === '' ? color : this.imposedColor;\n\t\tlet px1 = 0;\n\t\tlet py1 = 0;\n\t\tfor (const seg of this.segments) {\n\t\t\tif (seg.sType === segLib.SegEnum.eStroke) {\n\t\t\t\tconst [cx1, cy1] = point2canvas(px1, py1, cAdjust);\n\t\t\t\tconst [cx2, cy2] = point2canvas(seg.px, seg.py, cAdjust);\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(cx1, cy1);\n\t\t\t\tctx.lineTo(cx2, cy2);\n\t\t\t\tctx.strokeStyle = theColor;\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t\tif (seg.sType === segLib.SegEnum.eArc) {\n\t\t\t\ttry {\n\t\t\t\t\tconst seg2 = segLib.arcSeg1To2(px1, py1, seg);\n\t\t\t\t\tconst [cx3, cy3] = point2canvas(seg2.pc.cx, seg2.pc.cy, cAdjust);\n\t\t\t\t\tconst cRadius = radius2canvas(seg.radius, cAdjust);\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(cx3, cy3, cRadius, -seg2.a1, -seg2.a2, seg.arcCcw);\n\t\t\t\t\tctx.strokeStyle = theColor;\n\t\t\t\t\tctx.stroke();\n\t\t\t\t} catch (emsg) {\n\t\t\t\t\tconsole.log('err413: ' + (emsg as string));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (segLib.isAddPoint(seg.sType)) {\n\t\t\t\tpx1 = seg.px;\n\t\t\t\tpy1 = seg.py;\n\t\t\t}\n\t\t}\n\t}\n\textractSkeleton(): Contour {\n\t\tconst seg0 = this.segments[0];\n\t\tconst rContour = new Contour(seg0.px, seg0.py);\n\t\tfor (const seg of this.segments) {\n\t\t\tif (segLib.isSeg(seg.sType)) {\n\t\t\t\trContour.addSeg(seg);\n\t\t\t}\n\t\t}\n\t\treturn rContour;\n\t}\n\tgenerateContour(): Contour {\n\t\tsegLib.gSegDbg.clearPoints();\n\t\tsegLib.gSegDbg.clearLines();\n\t\tconst segStack: segLib.Segment2[] = [];\n\t\tconst segStackEnd: segLib.Segment2[] = [];\n\t\tlet coType = 0;\n\t\tlet px1 = 0;\n\t\tlet py1 = 0;\n\t\tfor (const seg of this.segments) {\n\t\t\tif (seg.sType === segLib.SegEnum.eStroke) {\n\t\t\t\tconst p1 = point(px1, py1);\n\t\t\t\tconst p2 = point(seg.px, seg.py);\n\t\t\t\tconst p0 = point(0, 0);\n\t\t\t\tsegStack.push(new segLib.Segment2(seg.sType, p1, p2, p0, 0, 0, 0, false));\n\t\t\t\tcoType = 1;\n\t\t\t}\n\t\t\tif (seg.sType === segLib.SegEnum.eArc) {\n\t\t\t\tconst seg2 = segLib.arcSeg1To2(px1, py1, seg);\n\t\t\t\tsegStack.push(seg2);\n\t\t\t\tcoType = 1;\n\t\t\t}\n\t\t\tconst segz1 = segStack.at(-1);\n\t\t\tconst segz2 = segStack.at(-2);\n\t\t\tif (segz1 !== undefined && segz2 !== undefined) {\n\t\t\t\tif (segLib.isSeg(segz1.sType) && segLib.isCorner(segz2.sType)) {\n\t\t\t\t\tconst s3 = segStack.pop();\n\t\t\t\t\tconst s2 = segStack.pop();\n\t\t\t\t\tconst s1 = segStack.pop();\n\t\t\t\t\tif (s1 !== undefined && s2 !== undefined && s3 !== undefined) {\n\t\t\t\t\t\tconst segs = segLib.makeCorner(s1, s2, s3);\n\t\t\t\t\t\tsegStack.push(...segs);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow `err603: contour generateContour internal error`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (segLib.isCorner(seg.sType)) {\n\t\t\t\tif (coType === 2) {\n\t\t\t\t\tthrow `err419: generateContour with two consecutive corners ${seg.sType}`;\n\t\t\t\t}\n\t\t\t\tif (coType === 0 && segLib.isActiveCorner(seg.sType) && seg.radius > 0) {\n\t\t\t\t\tconst p0 = point(0, 0);\n\t\t\t\t\tsegStackEnd.push(\n\t\t\t\t\t\tnew segLib.Segment2(seg.sType, p0, p0, p0, seg.radius, 0, 0, false)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (coType === 1 && segLib.isActiveCorner(seg.sType) && seg.radius > 0) {\n\t\t\t\t\tconst p0 = point(0, 0);\n\t\t\t\t\tsegStack.push(\n\t\t\t\t\t\tnew segLib.Segment2(seg.sType, p0, p0, p0, seg.radius, 0, 0, false)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcoType = 2;\n\t\t\t}\n\t\t\tif (segLib.isAddPoint(seg.sType)) {\n\t\t\t\tpx1 = seg.px;\n\t\t\t\tpy1 = seg.py;\n\t\t\t}\n\t\t}\n\t\tif (segStackEnd.length > 0) {\n\t\t\tif (coType === 1) {\n\t\t\t\tsegStack.push(...segStackEnd);\n\t\t\t} else {\n\t\t\t\tthrow `err397: contour generateContour Corners defined at end and begining`;\n\t\t\t}\n\t\t}\n\t\tconst segz1 = segStack.at(-1);\n\t\tif (segz1 !== undefined) {\n\t\t\tif (segLib.isCorner(segz1.sType)) {\n\t\t\t\tconst s3 = segStack[0];\n\t\t\t\tconst s2 = segStack.pop();\n\t\t\t\tconst s1 = segStack.pop();\n\t\t\t\tif (s1 !== undefined && s2 !== undefined && s3 !== undefined) {\n\t\t\t\t\tconst segs = segLib.makeCorner(s1, s2, s3);\n\t\t\t\t\tsegStack.push(...segs.slice(0, -1));\n\t\t\t\t\tconst s4 = segs.at(-1);\n\t\t\t\t\tif (s4 !== undefined) {\n\t\t\t\t\t\tsegStack[0] = s4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow `err606: contour generateContour internal error`;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow `err602: contour generateContour internal error`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst seg0 = segStack[0];\n\t\tconst rContour = new Contour(seg0.p1.cx, seg0.p1.cy, this.imposedColor);\n\t\trContour.debugPoints.push(...segLib.gSegDbg.getPoints());\n\t\trContour.debugLines.push(...segLib.gSegDbg.getLines());\n\t\t//console.log(`dbg290: ${segLib.gSegDbg.debugPoints.length}`);\n\t\tfor (const seg2 of segStack) {\n\t\t\tif (seg2.sType === segLib.SegEnum.eStroke) {\n\t\t\t\trContour.addSegStrokeA(seg2.p2.cx, seg2.p2.cy);\n\t\t\t} else if (seg2.sType === segLib.SegEnum.eArc) {\n\t\t\t\tconst seg1 = segLib.arcSeg2To1(seg2);\n\t\t\t\trContour\n\t\t\t\t\t.addPointA(seg2.p2.cx, seg2.p2.cy)\n\t\t\t\t\t.addSegArc(seg1.radius, seg1.arcLarge, seg1.arcCcw);\n\t\t\t} else {\n\t\t\t\tthrow `err986: contour generateContour unexpected in seg2 Enum ${seg2.sType}`;\n\t\t\t}\n\t\t}\n\t\treturn rContour;\n\t}\n\tgeneratePoints(): Point[] {\n\t\tconst rPoints = [];\n\t\trPoints.push(...this.debugPoints);\n\t\tconst seg0 = this.segments[0];\n\t\trPoints.push(point(seg0.px, seg0.py));\n\t\tlet px1 = 0;\n\t\tlet py1 = 0;\n\t\tfor (const seg of this.segments) {\n\t\t\tif (seg.sType === segLib.SegEnum.eArc) {\n\t\t\t\ttry {\n\t\t\t\t\tconst seg2 = segLib.arcSeg1To2(px1, py1, seg);\n\t\t\t\t\tconst p3 = point(seg2.pc.cx, seg2.pc.cy);\n\t\t\t\t\tconst a12h = withinPiPi((seg2.a2 - seg2.a1) / 2);\n\t\t\t\t\tlet a3 = seg2.a1 + a12h;\n\t\t\t\t\tif (\n\t\t\t\t\t\t(Math.sign(a12h) > 0 && !seg.arcCcw) ||\n\t\t\t\t\t\t(Math.sign(a12h) < 0 && seg.arcCcw)\n\t\t\t\t\t) {\n\t\t\t\t\t\ta3 += Math.PI;\n\t\t\t\t\t}\n\t\t\t\t\tconst p4 = p3.translatePolar(a3, seg.radius);\n\t\t\t\t\trPoints.push(p4);\n\t\t\t\t} catch (emsg) {\n\t\t\t\t\tconsole.log('err453: ' + (emsg as string));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (segLib.isAddPoint(seg.sType)) {\n\t\t\t\tpx1 = seg.px;\n\t\t\t\tpy1 = seg.py;\n\t\t\t\trPoints.push(point(px1, py1));\n\t\t\t}\n\t\t}\n\t\treturn rPoints;\n\t}\n\tgenerateLines(): Line[] {\n\t\tconst rLines = [];\n\t\trLines.push(...this.debugLines);\n\t\treturn rLines;\n\t}\n\tcheckContour(ctr: Contour) {\n\t\tif (ctr.segments[0].sType !== segLib.SegEnum.eStart) {\n\t\t\tthrow `err412: contour check first seg is not eStart ${ctr.segments[0].sType}`;\n\t\t}\n\t\tlet px1 = 0;\n\t\tlet py1 = 0;\n\t\tfor (const seg of ctr.segments) {\n\t\t\tif (seg.sType === segLib.SegEnum.eArc) {\n\t\t\t\ttry {\n\t\t\t\t\tsegLib.arcSeg1To2(px1, py1, seg);\n\t\t\t\t} catch (emsg) {\n\t\t\t\t\tthrow `err778: ${emsg as string}`;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (segLib.isAddPoint(seg.sType)) {\n\t\t\t\tpx1 = seg.px;\n\t\t\t\tpy1 = seg.py;\n\t\t\t}\n\t\t}\n\t\tconst px0 = ctr.segments[0].px;\n\t\tconst py0 = ctr.segments[0].py;\n\t\tif (roundZero(px1 - px0) !== 0 || roundZero(py1 - py0) !== 0) {\n\t\t\tthrow `err414: contour check, contour is not closed px ${px0} ${px1} py ${px0} ${py0}`;\n\t\t}\n\t}\n\tcheck(): string {\n\t\tsegLib.gSegDbg.clearMsg();\n\t\tthis.checkContour(this);\n\t\tconst ctrG = this.generateContour();\n\t\tthis.checkContour(ctrG);\n\t\treturn segLib.gSegDbg.getMsg();\n\t}\n\ttoSvg(yCeiling: number, color = ''): string {\n\t\tconst sPath = svgPath();\n\t\tfor (const seg of this.segments) {\n\t\t\tif (seg.sType === segLib.SegEnum.eStart) {\n\t\t\t\tsPath.addStart(seg.px, yCeiling - seg.py);\n\t\t\t} else if (seg.sType === segLib.SegEnum.eStroke) {\n\t\t\t\tsPath.addStroke(seg.px, yCeiling - seg.py);\n\t\t\t} else if (seg.sType === segLib.SegEnum.eArc) {\n\t\t\t\tsPath.addArc(seg.px, yCeiling - seg.py, seg.radius, seg.arcLarge, !seg.arcCcw);\n\t\t\t} else {\n\t\t\t\tconsole.log(`err631: contour.toSvg has unknown segment type ${seg.sType}`);\n\t\t\t}\n\t\t}\n\t\tconst rSvg = sPath.stringify(color);\n\t\treturn rSvg;\n\t}\n\ttoDxfSeg(): DxfSeg[] {\n\t\tconst rDxfSeg: DxfSeg[] = [];\n\t\tlet px1 = 0;\n\t\tlet py1 = 0;\n\t\tfor (const seg of this.segments) {\n\t\t\tif (seg.sType === segLib.SegEnum.eStroke) {\n\t\t\t\trDxfSeg.push(dxfSegLine(px1, py1, seg.px, seg.py));\n\t\t\t} else if (seg.sType === segLib.SegEnum.eArc) {\n\t\t\t\ttry {\n\t\t\t\t\tconst seg2 = segLib.arcSeg1To2(px1, py1, seg);\n\t\t\t\t\trDxfSeg.push(\n\t\t\t\t\t\tdxfSegArc(seg2.pc.cx, seg2.pc.cy, seg.radius, seg2.a1, seg2.a2, seg2.arcCcw)\n\t\t\t\t\t);\n\t\t\t\t} catch (emsg) {\n\t\t\t\t\tconsole.log('err413: ' + (emsg as string));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (segLib.isAddPoint(seg.sType)) {\n\t\t\t\tpx1 = seg.px;\n\t\t\t\tpy1 = seg.py;\n\t\t\t}\n\t\t}\n\t\treturn rDxfSeg;\n\t}\n\ttoPax(): tPaxContourPath {\n\t\tconst pPath = paxPath();\n\t\tfor (const seg of this.segments) {\n\t\t\tif (seg.sType === segLib.SegEnum.eStart) {\n\t\t\t\tpPath.addStart(seg.px, seg.py);\n\t\t\t} else if (seg.sType === segLib.SegEnum.eStroke) {\n\t\t\t\tpPath.addStroke(seg.px, seg.py);\n\t\t\t} else if (seg.sType === segLib.SegEnum.eArc) {\n\t\t\t\tpPath.addArc(seg.px, seg.py, seg.radius, seg.arcLarge, seg.arcCcw);\n\t\t\t} else {\n\t\t\t\tconsole.log(`err709: contour.toPax has unknown segment type ${seg.sType}`);\n\t\t\t}\n\t\t}\n\t\tconst rPaxC = pPath.toJson();\n\t\treturn rPaxC;\n\t}\n}\n\n/* ContourCircle class */\n\nclass ContourCircle extends AContour {\n\tcircle = true;\n\tpx: number;\n\tpy: number;\n\tradius: number;\n\timposedColor: string;\n\tconstructor(ix: number, iy: number, iRadius: number, icolor = '') {\n\t\tsuper();\n\t\tthis.px = ix;\n\t\tthis.py = iy;\n\t\tthis.radius = iRadius;\n\t\tthis.imposedColor = icolor;\n\t}\n\tclone(): ContourCircle {\n\t\tconst rctr = new ContourCircle(this.px, this.py, this.radius, this.imposedColor);\n\t\treturn rctr;\n\t}\n\ttranslate(ix: number, iy: number): ContourCircle {\n\t\tconst rctr = new ContourCircle(this.px + ix, this.py + iy, this.radius, this.imposedColor);\n\t\treturn rctr;\n\t}\n\ttranslatePolar(ia: number, il: number): ContourCircle {\n\t\treturn this.translate(il * Math.cos(ia), il * Math.sin(ia));\n\t}\n\trotate(ix: number, iy: number, ia: number): ContourCircle {\n\t\tconst ic = point(ix, iy);\n\t\tconst nCenter = point(this.px, this.py).rotate(ic, ia);\n\t\tconst rctr = new ContourCircle(nCenter.cx, nCenter.cy, this.radius, this.imposedColor);\n\t\treturn rctr;\n\t}\n\tdraw(ctx: CanvasRenderingContext2D, cAdjust: tCanvasAdjust, color: string = colors.contour) {\n\t\tconst [cx3, cy3] = point2canvas(this.px, this.py, cAdjust);\n\t\tconst cRadius = radius2canvas(this.radius, cAdjust);\n\t\tconst theColor = this.imposedColor === '' ? color : this.imposedColor;\n\t\tctx.beginPath();\n\t\tctx.arc(cx3, cy3, cRadius, 0, 2 * Math.PI, true);\n\t\tctx.strokeStyle = theColor;\n\t\tctx.stroke();\n\t}\n\textractSkeleton(): ContourCircle {\n\t\tconst rContour = new ContourCircle(this.px, this.py, this.radius);\n\t\treturn rContour;\n\t}\n\tgenerateContour(): ContourCircle {\n\t\tconst rContour = new ContourCircle(this.px, this.py, this.radius, this.imposedColor);\n\t\treturn rContour;\n\t}\n\tgeneratePoints(): Point[] {\n\t\tconst rPoints = [];\n\t\tconst p1 = point(this.px, this.py);\n\t\trPoints.push(p1);\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst p2 = p1.translatePolar((i * Math.PI) / 2, this.radius);\n\t\t\trPoints.push(p2);\n\t\t}\n\t\treturn rPoints;\n\t}\n\tgenerateLines(): Line[] {\n\t\treturn [];\n\t}\n\tcheck(): string {\n\t\treturn '';\n\t}\n\ttoSvg(yCeiling: number, color = ''): string {\n\t\tconst rSvg = svgCircleString(this.px, yCeiling - this.py, this.radius, color);\n\t\treturn rSvg;\n\t}\n\ttoDxfSeg(): DxfSeg[] {\n\t\tconst rDxfSeg: DxfSeg[] = [];\n\t\trDxfSeg.push(dxfSegCircle(this.px, this.py, this.radius));\n\t\treturn rDxfSeg;\n\t}\n\ttoPax(): tPaxContourCircle {\n\t\tconst rPaxC = paxCircle(this.px, this.py, this.radius);\n\t\treturn rPaxC;\n\t}\n}\n\n// instantiation functions\nfunction contour(ix: number, iy: number, icolor = ''): Contour {\n\treturn new Contour(ix, iy, icolor);\n}\nfunction contourCircle(ix: number, iy: number, iRadius: number, icolor = ''): ContourCircle {\n\treturn new ContourCircle(ix, iy, iRadius, icolor);\n}\n\ntype tContour = Contour | ContourCircle;\n\nexport type { tContour };\nexport { Contour, ContourCircle, contour, contourCircle };\n","// figure.ts\n// a minimalistic 2D euclid geometry calculation library\n// figure.ts deals with points, lines, vectors, contours\n// figure.ts gather all other modules of geom\n\nimport type { tCanvasAdjust } from './canvas_utils';\n//import { colorCanvasPoint } from '$lib/style/colors.scss';\nimport { colors, adjustZero, adjustInit } from './canvas_utils';\nimport { withinZero2Pi, withinPiPi, degToRad, radToDeg, roundZero, ffix } from './angle_utils';\nimport { lcFromLaLbAc, aCFromLaLbLc, lbFromLaAaAb, aBFromLaLbAa } from './triangle_utils';\nimport { ShapePoint, Point, point, pointMinMax } from './point';\nimport { Line, line, linePP, bisector, circleCenter } from './line';\nimport { Vector, vector } from './vector';\nimport type { tContour } from './contour';\nimport { contour, contourCircle } from './contour';\n\ninterface tLayers {\n\tpoints: boolean;\n\tlines: boolean;\n\tvectors: boolean;\n\tmain: boolean;\n\tmainB: boolean;\n\tsecond: boolean;\n\tsecondB: boolean;\n\tdynamics: boolean;\n\truler: boolean;\n\trefframe: boolean;\n}\n\nclass Figure {\n\tpointList: Point[];\n\tlineList: Line[];\n\tvectorList: Vector[];\n\tmainList: tContour[];\n\tmainBList: tContour[];\n\tsecondList: tContour[];\n\tsecondBList: tContour[];\n\tdynamicsList: tContour[];\n\txMin: number;\n\txMax: number;\n\tyMin: number;\n\tyMax: number;\n\tconstructor() {\n\t\tthis.pointList = [];\n\t\tthis.lineList = [];\n\t\tthis.vectorList = [];\n\t\tthis.mainList = [];\n\t\tthis.mainBList = [];\n\t\tthis.secondList = [];\n\t\tthis.secondBList = [];\n\t\tthis.dynamicsList = [];\n\t\tthis.xMin = 0;\n\t\tthis.xMax = 0;\n\t\tthis.yMin = 0;\n\t\tthis.yMax = 0;\n\t}\n\taddPoint(ipoint: Point) {\n\t\tthis.pointList.push(ipoint);\n\t}\n\taddPoints(ipoints: Point[]) {\n\t\t//for (const ipt of ipoints) {\n\t\t//\tthis.pointList.push(ipt);\n\t\t//}\n\t\tthis.pointList.push(...ipoints);\n\t}\n\taddLine(iline: Line) {\n\t\tthis.lineList.push(iline);\n\t}\n\taddLines(ilines: Line[]) {\n\t\tfor (const iline of ilines) {\n\t\t\tthis.lineList.push(iline);\n\t\t}\n\t}\n\taddVector(ivector: Vector) {\n\t\tthis.vectorList.push(ivector);\n\t}\n\taddMain(icontour: tContour) {\n\t\tconst roundedContour = icontour.generateContour();\n\t\tthis.addPoints(roundedContour.generatePoints());\n\t\t//this.addPoints(icontour.generatePoints()); // points of the skeleton\n\t\tthis.addLines(roundedContour.generateLines());\n\t\tthis.mainList.push(roundedContour);\n\t\tthis.mainBList.push(icontour.extractSkeleton());\n\t}\n\taddSecond(icontour: tContour) {\n\t\tconst roundedContour = icontour.generateContour();\n\t\tthis.addPoints(roundedContour.generatePoints());\n\t\t//this.addPoints(icontour.generatePoints()); // points of the skeleton\n\t\tthis.addLines(roundedContour.generateLines());\n\t\tthis.secondList.push(roundedContour);\n\t\tthis.secondBList.push(icontour.extractSkeleton());\n\t}\n\taddDynamics(icontour: tContour) {\n\t\tthis.addPoints(icontour.generatePoints());\n\t\tthis.addLines(icontour.generateLines());\n\t\tthis.dynamicsList.push(icontour);\n\t}\n\ttranslate(ix: number, iy: number): Figure {\n\t\tconst rfig = new Figure();\n\t\tfor (const pt of this.pointList) {\n\t\t\trfig.addPoint(pt.translate(ix, iy));\n\t\t}\n\t\tfor (const li of this.lineList) {\n\t\t\trfig.addLine(li.translate(ix, iy));\n\t\t}\n\t\tfor (const vec of this.vectorList) {\n\t\t\trfig.addVector(vec.translate(ix, iy));\n\t\t}\n\t\tfor (const ctr of this.mainList) {\n\t\t\trfig.addMain(ctr.translate(ix, iy));\n\t\t}\n\t\tfor (const ctr of this.secondList) {\n\t\t\trfig.addSecond(ctr.translate(ix, iy));\n\t\t}\n\t\tfor (const ctr of this.dynamicsList) {\n\t\t\trfig.addDynamics(ctr.translate(ix, iy));\n\t\t}\n\t\treturn rfig;\n\t}\n\ttranslatePolar(ia: number, il: number): Figure {\n\t\treturn this.translate(il * Math.cos(ia), il * Math.sin(ia));\n\t}\n\trotate(ix: number, iy: number, ia: number): Figure {\n\t\tconst rfig = new Figure();\n\t\tconst pt0 = point(ix, iy);\n\t\tfor (const pt of this.pointList) {\n\t\t\trfig.addPoint(pt.rotate(pt0, ia));\n\t\t}\n\t\tfor (const li of this.lineList) {\n\t\t\trfig.addLine(li.rotate(pt0, ia));\n\t\t}\n\t\tfor (const vec of this.vectorList) {\n\t\t\trfig.addVector(vec.rotate(pt0, ia));\n\t\t}\n\t\tfor (const ctr of this.mainList) {\n\t\t\trfig.addMain(ctr.rotate(ix, iy, ia));\n\t\t}\n\t\tfor (const ctr of this.secondList) {\n\t\t\trfig.addSecond(ctr.rotate(ix, iy, ia));\n\t\t}\n\t\tfor (const ctr of this.dynamicsList) {\n\t\t\trfig.addDynamics(ctr.rotate(ix, iy, ia));\n\t\t}\n\t\treturn rfig;\n\t}\n\tmergeFigure(ifig: Figure, mainToSecond = false) {\n\t\tfor (const pt of ifig.pointList) {\n\t\t\tthis.addPoint(pt.clone());\n\t\t}\n\t\tfor (const li of ifig.lineList) {\n\t\t\tthis.addLine(li.clone());\n\t\t}\n\t\tfor (const vec of ifig.vectorList) {\n\t\t\tthis.addVector(vec.clone());\n\t\t}\n\t\tfor (const ctr of ifig.mainList) {\n\t\t\tif (mainToSecond) {\n\t\t\t\tthis.addSecond(ctr.clone());\n\t\t\t} else {\n\t\t\t\tthis.addMain(ctr.clone());\n\t\t\t}\n\t\t}\n\t\tfor (const ctr of ifig.secondList) {\n\t\t\tthis.addSecond(ctr.clone());\n\t\t}\n\t\tfor (const ctr of ifig.dynamicsList) {\n\t\t\tthis.addDynamics(ctr.clone());\n\t\t}\n\t}\n\tclear() {\n\t\tthis.pointList = [];\n\t\tthis.lineList = [];\n\t\tthis.vectorList = [];\n\t\tthis.mainList = [];\n\t\tthis.mainBList = [];\n\t\tthis.secondList = [];\n\t\tthis.secondBList = [];\n\t\tthis.dynamicsList = [];\n\t}\n\tgetMinMax() {\n\t\t[this.xMin, this.xMax, this.yMin, this.yMax] = pointMinMax(this.pointList);\n\t\t//console.log(`dbg137: ${this.xMin}, ${this.xMax}, ${this.yMin}, ${this.yMax}`);\n\t}\n\tgetAdjustFull(iCanvasWidth: number, iCanvasHeight: number): tCanvasAdjust {\n\t\t//console.log(`dbg140: ${iCanvasWidth}, ${iCanvasHeight}`);\n\t\tlet rCanvasAdjust: tCanvasAdjust = adjustZero();\n\t\tif (this.pointList.length > 0) {\n\t\t\tthis.getMinMax();\n\t\t\trCanvasAdjust = adjustInit(\n\t\t\t\tthis.xMin,\n\t\t\t\tthis.xMax,\n\t\t\t\tthis.yMin,\n\t\t\t\tthis.yMax,\n\t\t\t\tiCanvasWidth,\n\t\t\t\tiCanvasHeight\n\t\t\t);\n\t\t}\n\t\t//console.log(`dbg150: ${rCanvasAdjust.shiftX}, ${rCanvasAdjust.scaleX}`);\n\t\treturn rCanvasAdjust;\n\t}\n\tgetAdjustZoom(iCanvasWidth: number, iCanvasHeight: number): tCanvasAdjust {\n\t\t//console.log(`dbg140: ${iCanvasWidth}, ${iCanvasHeight}`);\n\t\tlet rCanvasAdjust: tCanvasAdjust = adjustZero();\n\t\tif (this.pointList.length > 0) {\n\t\t\tthis.getMinMax();\n\t\t\tconst xMin = (this.xMin + this.xMax) / 2;\n\t\t\tconst yMin = (this.yMin + this.yMax) / 2;\n\t\t\trCanvasAdjust = adjustInit(\n\t\t\t\txMin,\n\t\t\t\tthis.xMax,\n\t\t\t\tyMin,\n\t\t\t\tthis.yMax,\n\t\t\t\tiCanvasWidth,\n\t\t\t\tiCanvasHeight\n\t\t\t);\n\t\t}\n\t\t//console.log(`dbg150: ${rCanvasAdjust.shiftX}, ${rCanvasAdjust.scaleX}`);\n\t\treturn rCanvasAdjust;\n\t}\n\tquantifyRuler(canvasWidth: number, adjust: tCanvasAdjust) {\n\t\tconst minWidth = canvasWidth / 10;\n\t\tconst lsizep = minWidth / adjust.scaleX;\n\t\tlet lref = 0.0001;\n\t\twhile (lref < lsizep) {\n\t\t\tlref *= 10;\n\t\t}\n\t\tif (lref / 5 > lsizep) {\n\t\t\tlref /= 5;\n\t\t} else if (lref / 2 > lsizep) {\n\t\t\tlref /= 2;\n\t\t}\n\t\tconst lsize = lref * adjust.scaleX; // radius2canvas\n\t\treturn [lref, lsize];\n\t}\n\tdrawRuler(ctx: CanvasRenderingContext2D, adjust: tCanvasAdjust, color: string) {\n\t\tconst [lref, lsize] = this.quantifyRuler(ctx.canvas.width, adjust);\n\t\tconst xpos = ctx.canvas.width - 10 - lsize;\n\t\t//ctx.clearRect(xpos, 5, 100, 25);\n\t\tctx.font = '15px Arial';\n\t\tctx.fillStyle = color;\n\t\tctx.fillText(`${lref.toFixed(4)}`, xpos, 20);\n\t\tctx.beginPath();\n\t\tctx.moveTo(xpos, 25);\n\t\tctx.lineTo(xpos + lsize, 25);\n\t\tctx.lineTo(xpos + lsize, 25 + lsize);\n\t\tctx.strokeStyle = color;\n\t\tctx.stroke();\n\t}\n\tdraw(ctx: CanvasRenderingContext2D, adjust: tCanvasAdjust, layers: tLayers) {\n\t\tif (layers.points) {\n\t\t\tfor (const p of this.pointList) {\n\t\t\t\tp.draw(ctx, adjust);\n\t\t\t}\n\t\t}\n\t\tif (layers.lines) {\n\t\t\tfor (const li of this.lineList) {\n\t\t\t\tli.draw(ctx, adjust);\n\t\t\t}\n\t\t}\n\t\tif (layers.vectors) {\n\t\t\tfor (const li of this.vectorList) {\n\t\t\t\tli.draw(ctx, adjust);\n\t\t\t}\n\t\t}\n\t\tif (layers.main) {\n\t\t\tfor (const li of this.mainList) {\n\t\t\t\tli.draw(ctx, adjust, colors.main);\n\t\t\t}\n\t\t}\n\t\tif (layers.mainB) {\n\t\t\tfor (const li of this.mainBList) {\n\t\t\t\tli.draw(ctx, adjust, colors.mainB);\n\t\t\t}\n\t\t}\n\t\tif (layers.second) {\n\t\t\tfor (const li of this.secondList) {\n\t\t\t\tli.draw(ctx, adjust, colors.second);\n\t\t\t}\n\t\t}\n\t\tif (layers.secondB) {\n\t\t\tfor (const li of this.secondBList) {\n\t\t\t\tli.draw(ctx, adjust, colors.secondB);\n\t\t\t}\n\t\t}\n\t\tif (layers.dynamics) {\n\t\t\tfor (const li of this.dynamicsList) {\n\t\t\t\tli.draw(ctx, adjust, colors.dynamics);\n\t\t\t}\n\t\t}\n\t\tif (layers.ruler) {\n\t\t\tthis.drawRuler(ctx, adjust, colors.ruler);\n\t\t}\n\t\tif (layers.refframe) {\n\t\t\tfor (const i of [10, 100, 200]) {\n\t\t\t\tpoint(i, 0).draw(ctx, adjust, colors.reference, ShapePoint.eCross);\n\t\t\t\tpoint(-i, 0).draw(ctx, adjust, colors.reference, ShapePoint.eCross);\n\t\t\t\tpoint(0, i).draw(ctx, adjust, colors.reference, ShapePoint.eCross);\n\t\t\t\tpoint(0, -i).draw(ctx, adjust, colors.reference, ShapePoint.eCross);\n\t\t\t}\n\t\t\tpoint(0, 0).draw(ctx, adjust, colors.origin, ShapePoint.eCross);\n\t\t}\n\t}\n}\n\nfunction figure() {\n\treturn new Figure();\n}\n\ntype tFaces = Record<string, Figure>;\nfunction mergeFaces(iFaces: tFaces): Figure {\n\tconst rfig = figure();\n\tfor (const face in iFaces) {\n\t\tconst fig = iFaces[face];\n\t\tfor (const ipoint of fig.pointList) {\n\t\t\trfig.pointList.push(ipoint);\n\t\t}\n\t\tfor (const iline of fig.lineList) {\n\t\t\trfig.lineList.push(iline);\n\t\t}\n\t\tfor (const ivector of fig.vectorList) {\n\t\t\trfig.vectorList.push(ivector);\n\t\t}\n\t\tfor (const ctr of fig.mainList) {\n\t\t\trfig.mainList.push(ctr);\n\t\t}\n\t\tfor (const ctr of fig.mainBList) {\n\t\t\trfig.mainBList.push(ctr);\n\t\t}\n\t\tfor (const ctr of fig.secondList) {\n\t\t\trfig.secondList.push(ctr);\n\t\t}\n\t\tfor (const ctr of fig.secondBList) {\n\t\t\trfig.secondBList.push(ctr);\n\t\t}\n\t\tfor (const ctr of fig.dynamicsList) {\n\t\t\trfig.dynamicsList.push(ctr);\n\t\t}\n\t}\n\treturn rfig;\n}\n\nfunction initLayers(): tLayers {\n\tconst layers: tLayers = {\n\t\tpoints: false,\n\t\tlines: false,\n\t\tvectors: false,\n\t\tmain: true,\n\t\tmainB: false,\n\t\tsecond: true,\n\t\tsecondB: false,\n\t\tdynamics: false,\n\t\truler: true,\n\t\trefframe: false\n\t};\n\treturn layers;\n}\nfunction copyLayers(iLayers: tLayers): tLayers {\n\tconst layers: tLayers = {\n\t\tpoints: iLayers.points,\n\t\tlines: iLayers.lines,\n\t\tvectors: iLayers.vectors,\n\t\tmain: iLayers.main,\n\t\tmainB: iLayers.mainB,\n\t\tsecond: iLayers.second,\n\t\tsecondB: iLayers.secondB,\n\t\tdynamics: iLayers.dynamics,\n\t\truler: iLayers.ruler,\n\t\trefframe: iLayers.refframe\n\t};\n\treturn layers;\n}\n\n/* export */\n\nexport type { Point, tContour, tLayers, Figure, tFaces };\nexport {\n\tShapePoint,\n\twithinZero2Pi,\n\twithinPiPi,\n\tdegToRad,\n\tradToDeg,\n\troundZero,\n\tffix,\n\tlcFromLaLbAc,\n\taCFromLaLbLc,\n\tlbFromLaAaAb,\n\taBFromLaLbAa,\n\tpoint,\n\tline,\n\tlinePP,\n\tbisector,\n\tcircleCenter,\n\tvector,\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\tmergeFaces,\n\tinitLayers,\n\tcopyLayers\n};\n","// designParams\n\nenum PType {\n\teNumber,\n\teCheckbox,\n\teDropdown\n}\n\ninterface tParam {\n\tname: string;\n\tunit: string;\n\tinit: number;\n\tmin: number;\n\tmax: number;\n\tstep: number;\n\tdropdown: string[];\n\tpType: PType;\n}\ninterface tSimTime {\n\ttMax: number;\n\ttStep: number;\n\ttUpdate: number; // in ms\n}\ninterface tParamDef {\n\tpartName: string;\n\tparams: tParam[];\n\tparamSvg: Record<string, string>;\n\tsim: tSimTime;\n}\n\ntype tParamVal = Record<string, number>;\ntype tParamChanged = Record<string, boolean>;\n\ninterface tDesignParamOne {\n\tval: number;\n\tinit: number;\n\tchg: boolean;\n}\n\nfunction oneDesignParam(iVal: number, iInit: number, iChg: boolean): tDesignParamOne {\n\tconst oneDP: tDesignParamOne = { val: iVal, init: iInit, chg: iChg };\n\treturn oneDP;\n}\n\ntype tDesignParamList = Record<string, tDesignParamOne>;\n\nfunction paramListToVal(dpList: tDesignParamList): tParamVal {\n\tconst rParamVal: tParamVal = {};\n\tfor (const pa of Object.keys(dpList)) {\n\t\trParamVal[pa] = dpList[pa].val;\n\t}\n\treturn rParamVal;\n}\n\nclass DesignParam {\n\tparamVal: tParamVal = {};\n\tparamInit: tParamVal = {};\n\tparamChanged: tParamChanged = {};\n\tpartName: string;\n\tparamNames: string[];\n\tgetParamName(): string[] {\n\t\tconst rNames: string[] = [];\n\t\tfor (const pName of Object.keys(this.paramVal)) {\n\t\t\trNames.push(pName);\n\t\t}\n\t\treturn rNames;\n\t}\n\tconstructor(iparamDef: tParamDef) {\n\t\tfor (const pi of iparamDef.params) {\n\t\t\tthis.paramVal[pi.name] = pi.init;\n\t\t\tthis.paramInit[pi.name] = pi.init;\n\t\t\tthis.paramChanged[pi.name] = false;\n\t\t}\n\t\tthis.partName = iparamDef.partName;\n\t\tthis.paramNames = this.getParamName();\n\t}\n\tgetPartName(): string {\n\t\treturn this.partName;\n\t}\n\tgetParamVal(): tParamVal {\n\t\treturn this.paramVal;\n\t}\n\tgetVal(iname: string): number {\n\t\tif (this.paramNames.includes(iname)) {\n\t\t\treturn this.paramVal[iname];\n\t\t} else {\n\t\t\tthrow `err140: parameter ${iname} does not exist in design ${this.partName}`;\n\t\t}\n\t}\n\tgetInit(iname: string): number {\n\t\tif (this.paramNames.includes(iname)) {\n\t\t\treturn this.paramInit[iname];\n\t\t} else {\n\t\t\tthrow `err149: parameter ${iname} does not exist in design ${this.partName}`;\n\t\t}\n\t}\n\tgetChanged(iname: string): boolean {\n\t\tif (this.paramNames.includes(iname)) {\n\t\t\treturn this.paramChanged[iname];\n\t\t} else {\n\t\t\tthrow `err156: parameter ${iname} does not exist in design ${this.partName}`;\n\t\t}\n\t}\n\tsetVal(iname: string, ival: number) {\n\t\tif (this.paramNames.includes(iname)) {\n\t\t\tthis.paramVal[iname] = ival;\n\t\t\tthis.paramChanged[iname] = true;\n\t\t} else {\n\t\t\tthrow `err163: parameter ${iname} does not exist in design ${this.partName}`;\n\t\t}\n\t}\n\tapplyParamVal(iValues: tParamVal): string {\n\t\tlet rlog = '';\n\t\tfor (const pa of Object.keys(iValues)) {\n\t\t\tthis.setVal(pa, iValues[pa]);\n\t\t}\n\t\trlog += `info104: apply ${Object.keys(iValues).length} parameters on ${this.partName}\\n`;\n\t\treturn rlog;\n\t}\n\tapplyParamList(iValues: tDesignParamList): string {\n\t\tconst rlog = this.applyParamVal(paramListToVal(iValues));\n\t\treturn rlog;\n\t}\n\tgetDesignParamList(): tDesignParamList {\n\t\tconst rDPList: tDesignParamList = {};\n\t\tfor (const pi of this.paramNames) {\n\t\t\trDPList[pi] = oneDesignParam(this.getVal(pi), this.getInit(pi), this.getChanged(pi));\n\t\t}\n\t\treturn rDPList;\n\t}\n}\n\nfunction designParam(iparamDef: tParamDef): DesignParam {\n\treturn new DesignParam(iparamDef);\n}\n\nfunction pNumber(name: string, unit: string, init: number, min = 0, max = 100, step = 1): tParam {\n\tconst rParam: tParam = {\n\t\tname: name,\n\t\tunit: unit,\n\t\tinit: init,\n\t\tmin: min,\n\t\tmax: max,\n\t\tstep: step,\n\t\tdropdown: [],\n\t\tpType: PType.eNumber\n\t};\n\treturn rParam;\n}\nfunction pCheckbox(name: string, init: boolean): tParam {\n\tconst rParam: tParam = {\n\t\tname: name,\n\t\tunit: 'checkbox',\n\t\tinit: init ? 1 : 0,\n\t\tmin: 0,\n\t\tmax: 1,\n\t\tstep: 1,\n\t\tdropdown: [],\n\t\tpType: PType.eCheckbox\n\t};\n\treturn rParam;\n}\nfunction pDropdown(name: string, values: string[]): tParam {\n\tconst rParam: tParam = {\n\t\tname: name,\n\t\tunit: 'dropdown',\n\t\tinit: 0,\n\t\tmin: 0,\n\t\tmax: values.length - 1,\n\t\tstep: 1,\n\t\tdropdown: values,\n\t\tpType: PType.eDropdown\n\t};\n\treturn rParam;\n}\n\nexport type { tParamDef, tParamVal, tDesignParamList, DesignParam };\nexport { PType, pNumber, pCheckbox, pDropdown, designParam, paramListToVal, oneDesignParam };\n","// volume.ts\n\nimport type { tGeom } from './aaParamGeom';\n\ninterface tInherit {\n\toutName: string;\n\tsubdesign: string;\n\tsubgeom: tGeom;\n\trotate: [number, number, number];\n\ttranslate: [number, number, number];\n}\n\nenum EExtrude {\n\teLinearOrtho,\n\t//eLinear,\n\t//eAlongPath,\n\t//eTwisted,\n\teRotate\n}\n\ninterface tExtrude {\n\toutName: string;\n\tface: string;\n\textrudeMethod: EExtrude;\n\tlength?: number;\n\trotate: [number, number, number];\n\ttranslate: [number, number, number];\n}\n\nenum EBVolume {\n\teIdentity,\n\teIntersection,\n\teUnion,\n\teSubstraction\n}\n\ninterface tBVolume {\n\toutName: string;\n\tboolMethod: EBVolume;\n\tinList: string[];\n}\n\ninterface tVolume {\n\tinherits?: tInherit[];\n\textrudes: tExtrude[];\n\tvolumes: tBVolume[];\n}\n\nexport type { tVolume, tInherit, tExtrude, tBVolume };\nexport { EExtrude, EBVolume };\n","// aaParamGeom.ts\n\nimport type { tParamDef, tParamVal } from './designParams';\nimport type { tFaces } from './figure';\nimport type { tVolume } from './volume';\nimport type { tSubDesign } from './sub_design';\n\ninterface tGeom {\n\tpartName: string;\n\tcalcErr: boolean;\n\tlogstr: string;\n\tfig: tFaces;\n\tvol: tVolume;\n\tsub: tSubDesign;\n}\ntype tGeomFunc = (t: number, ipVal: tParamVal) => tGeom;\n\ninterface tPageDef {\n\tpTitle: string;\n\tpDescription: string;\n\tpDef: tParamDef;\n\tpGeom: tGeomFunc;\n}\ntype tAllPageDef = Record<string, tPageDef>;\ntype tAllLink = Record<string, string>; // partName: its-link\n\nfunction fround(ireal: number, iprecision = 1000.0): number {\n\treturn Math.floor(ireal * iprecision) / iprecision;\n}\n\nfunction initGeom(partName: string): tGeom {\n\tconst rGeom: tGeom = {\n\t\tpartName: partName,\n\t\tcalcErr: true,\n\t\tlogstr: '',\n\t\tfig: {},\n\t\tvol: { extrudes: [], volumes: [] },\n\t\tsub: {}\n\t};\n\treturn rGeom;\n}\n\nfunction checkGeom(iGeom: tGeom) {\n\tif (iGeom.calcErr) {\n\t\tlet errMsg = `err182: Error in sub-design ${iGeom.partName}\\n`;\n\t\terrMsg += prefixLog(iGeom.logstr, iGeom.partName);\n\t\tthrow errMsg;\n\t}\n}\n\nfunction prefixLog(iLog: string, iPartName: string): string {\n\tlet rLog = '';\n\tfor (const oneline of iLog.split('\\n')) {\n\t\tif (oneline !== '') {\n\t\t\trLog += `[${iPartName}]: ${oneline}\\n`;\n\t\t}\n\t}\n\treturn rLog;\n}\n\nexport type { tGeom, tGeomFunc, tPageDef, tAllPageDef, tAllLink };\nexport { fround, initGeom, checkGeom, prefixLog };\n","// write_pax.ts\n\nimport * as segLib from './segment';\nimport type { tFaces } from './figure';\nimport type { tVolume } from './volume';\nimport type { tSubDesign } from './sub_design';\nimport type { tParamVal } from './designParams';\nimport type { tGeom } from './aaParamGeom';\nimport type { tPaxContour } from './prepare_pax';\nimport { PSeg } from './prepare_pax';\nimport type { tContour } from './contour';\n\ntype tPaxFaces = Record<string, tPaxContour[]>;\ninterface tPaxJson {\n\tpartName: string;\n\tparams: tParamVal;\n\tfaces: tPaxFaces;\n\tvolume: tVolume;\n\tsubs: tSubDesign;\n\tlog: string;\n}\n\nclass PaxWrite {\n\t//constructor() {}\n\tfigureToPaxF(aCtr: tContour[]): tPaxContour[] {\n\t\tconst rPaxF: tPaxContour[] = [];\n\t\tfor (const ctr of aCtr) {\n\t\t\trPaxF.push(ctr.toPax());\n\t\t}\n\t\treturn rPaxF;\n\t}\n\tgetFigures(figs: tFaces): tPaxFaces {\n\t\tconst figFaces: tPaxFaces = {};\n\t\tfor (const face in figs) {\n\t\t\tconst figu = this.figureToPaxF(figs[face].mainList);\n\t\t\tfigFaces[face] = figu;\n\t\t}\n\t\treturn figFaces;\n\t}\n\tgetPaxJson(paramVal: tParamVal, geome0: tGeom): tPaxJson {\n\t\tconst rPaxJson = {\n\t\t\tpartName: geome0.partName,\n\t\t\tparams: paramVal,\n\t\t\tfaces: this.getFigures(geome0.fig),\n\t\t\tvolume: geome0.vol,\n\t\t\tsubs: geome0.sub,\n\t\t\tlog: geome0.logstr\n\t\t};\n\t\treturn rPaxJson;\n\t}\n\tgetPaxStr(paramVal: tParamVal, geome0: tGeom): string {\n\t\tconst paxJson = this.getPaxJson(paramVal, geome0);\n\t\tconst rStr = JSON.stringify(paxJson, null, 2);\n\t\treturn rStr;\n\t}\n}\nfunction paxWrite(): PaxWrite {\n\tconst rPaxWrite = new PaxWrite();\n\treturn rPaxWrite;\n}\n\nfunction convTypePaxToSeg1(paxType: PSeg): segLib.SegEnum {\n\tlet rType: segLib.SegEnum = segLib.SegEnum.eStart;\n\tif (paxType === PSeg.eStroke) {\n\t\trType = segLib.SegEnum.eStroke;\n\t} else if (paxType === PSeg.eArc) {\n\t\trType = segLib.SegEnum.eArc;\n\t}\n\treturn rType;\n}\n\nexport type { tPaxFaces, tPaxJson };\nexport { paxWrite, convTypePaxToSeg1 };\n","// arc_to_stroke.ts\n\nimport { orientedArc } from './angle_utils';\n\ntype tAtsPoints = [number, number][];\n\nfunction calcAngleStep(\n\tmax_angle: number,\n\tmax_length: number,\n\tradius: number,\n\tarc_angle: number\n): [number, number] {\n\tlet max_angle2 = Math.PI / 2;\n\tif (max_length < 2 * radius) {\n\t\tmax_angle2 = 2 * Math.asin(max_length / (2 * radius));\n\t}\n\tconst angleStepMax = Math.min(max_angle, max_angle2);\n\t//const angleNb = Math.floor(arc_angle / angleStepMax) + 1;\n\tconst angleNb = Math.ceil(arc_angle / angleStepMax);\n\tconst angleStep = arc_angle / angleNb;\n\t//console.log(`dbg783: ${arc_angle} ${angleStepMax} ${angleNb}`);\n\treturn [angleNb, angleStep];\n}\n\nfunction circle_to_stroke(\n\tcx: number,\n\tcy: number,\n\tradius: number,\n\tmax_angle = Math.PI / 6,\n\tmax_length = 2.0\n): tAtsPoints {\n\tconst [angleNb, angleStep] = calcAngleStep(max_angle, max_length, radius, 2 * Math.PI);\n\tconst rPoints: tAtsPoints = [];\n\tfor (let i = 0; i < angleNb; i++) {\n\t\tconst px = cx + radius * Math.cos(i * angleStep);\n\t\tconst py = cy + radius * Math.sin(i * angleStep);\n\t\trPoints.push([px, py]);\n\t}\n\t// close the contour\n\tconst p0x = rPoints[0][0];\n\tconst p0y = rPoints[0][1];\n\trPoints.push([p0x, p0y]);\n\treturn rPoints;\n}\n\nfunction arc_to_stroke(\n\tcx: number,\n\tcy: number,\n\tradius: number,\n\ta1: number,\n\ta2: number,\n\tccw: boolean,\n\tmax_angle = Math.PI / 6,\n\tmax_length = 2.0\n): tAtsPoints {\n\tconst arc_angle = orientedArc(a1, a2, ccw);\n\tconst [angleNb, angleStep] = calcAngleStep(max_angle, max_length, radius, Math.abs(arc_angle));\n\t//console.log(`dbg054: ${angleNb} ${angleStep}`);\n\tconst angleStepSigned = ccw ? angleStep : -angleStep;\n\tconst angleNb2 = angleNb + 1; // pole and fence\n\tconst rPoints: tAtsPoints = [];\n\t// skip first point\n\tfor (let i = 1; i < angleNb2; i++) {\n\t\tconst angle = a1 + i * angleStepSigned;\n\t\tconst px = cx + radius * Math.cos(angle);\n\t\tconst py = cy + radius * Math.sin(angle);\n\t\trPoints.push([px, py]);\n\t}\n\treturn rPoints;\n}\n\nexport type { tAtsPoints };\nexport { circle_to_stroke, arc_to_stroke };\n","// write_openscad.ts\n\n//import type { tContour } from './contour';\n//import type { tFaces } from './figure';\nimport * as segLib from './segment';\nimport type {\n\ttPaxContour,\n\ttPaxContourCircle,\n\ttPaxContourPath,\n\ttPaxSeg,\n\ttPaxSegArc\n} from './prepare_pax';\nimport { PSeg } from './prepare_pax';\nimport type { tPaxFaces, tPaxJson } from './write_pax';\nimport { convTypePaxToSeg1, paxWrite } from './write_pax';\nimport type { tGeom } from './aaParamGeom';\nimport type { tVolume, tInherit, tExtrude, tBVolume } from './volume';\nimport { EExtrude, EBVolume } from './volume';\n//import { withinZero2Pi, radToDeg } from './angle_utils';\nimport { radToDeg } from './angle_utils';\nimport type { tAtsPoints } from './arc_to_stroke';\nimport { circle_to_stroke, arc_to_stroke } from './arc_to_stroke';\n\ntype tOpenscadSeg = tAtsPoints;\n\nconst approxMaxAngle = Math.PI / 8;\nconst approxMaxLength = 20.0;\n\nfunction oscadSegLine(p2x: number, p2y: number): tOpenscadSeg {\n\tconst rSeg: tOpenscadSeg = [[p2x, p2y]];\n\treturn rSeg;\n}\nfunction oscadSegArc(\n\tcx: number,\n\tcy: number,\n\tradius: number,\n\taa1: number,\n\taa2: number,\n\tarcCcw: boolean\n): tOpenscadSeg {\n\tconst rSeg = arc_to_stroke(cx, cy, radius, aa1, aa2, arcCcw, approxMaxAngle, approxMaxLength);\n\treturn rSeg;\n}\nfunction oscadSegCircle(cx: number, cy: number, radius: number): tOpenscadSeg {\n\tconst rSeg = circle_to_stroke(cx, cy, radius, approxMaxAngle, approxMaxLength);\n\treturn rSeg;\n}\n\nfunction toOpenscadSeg(paxCtr: tPaxSeg[]): tOpenscadSeg {\n\tconst rOscadSeg: tOpenscadSeg = [];\n\tlet px1 = 0;\n\tlet py1 = 0;\n\tfor (const seg of paxCtr) {\n\t\tif (seg.typ === PSeg.eStart) {\n\t\t\trOscadSeg.push(...oscadSegLine(seg.px, seg.py));\n\t\t} else if (seg.typ === PSeg.eStroke) {\n\t\t\trOscadSeg.push(...oscadSegLine(seg.px, seg.py));\n\t\t} else if (seg.typ === PSeg.eArc) {\n\t\t\ttry {\n\t\t\t\tconst sega = seg as tPaxSegArc;\n\t\t\t\tconst seg1 = new segLib.Segment1(\n\t\t\t\t\tconvTypePaxToSeg1(sega.typ),\n\t\t\t\t\tsega.px,\n\t\t\t\t\tsega.py,\n\t\t\t\t\tsega.radius,\n\t\t\t\t\tsega.large,\n\t\t\t\t\tsega.ccw\n\t\t\t\t);\n\t\t\t\tconst seg2 = segLib.arcSeg1To2(px1, py1, seg1);\n\t\t\t\trOscadSeg.push(\n\t\t\t\t\t...oscadSegArc(\n\t\t\t\t\t\tseg2.pc.cx,\n\t\t\t\t\t\tseg2.pc.cy,\n\t\t\t\t\t\tseg1.radius,\n\t\t\t\t\t\tseg2.a1,\n\t\t\t\t\t\tseg2.a2,\n\t\t\t\t\t\tseg2.arcCcw\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (emsg) {\n\t\t\t\tconsole.log('err730: ' + (emsg as string));\n\t\t\t}\n\t\t\t//} else {\n\t\t\t//\tconsole.log(`err725: write_openscad toOpenscadSeg has unknown segment type ${seg.typ}`);\n\t\t}\n\t\t// all segements of Pax must update the last point\n\t\tpx1 = seg.px;\n\t\tpy1 = seg.py;\n\t}\n\treturn rOscadSeg;\n}\n\n// floating precision for OpenScad export\nfunction ff(ifloat: number): string {\n\treturn ifloat.toFixed(4);\n}\n\nclass OpenscadWriteFigure {\n\tpts: string[];\n\tptIdx: string[];\n\tidx: number;\n\tconstructor() {\n\t\tthis.pts = [];\n\t\tthis.ptIdx = [];\n\t\tthis.idx = 0;\n\t}\n\taddContour(ictr: tOpenscadSeg) {\n\t\tconst pts2: string[] = [];\n\t\tconst ptIdx2: string[] = [];\n\t\tfor (const pt of ictr) {\n\t\t\tconst [px, py] = pt;\n\t\t\tpts2.push(`[ ${ff(px)}, ${ff(py)} ]`);\n\t\t\tptIdx2.push(` ${this.idx}`);\n\t\t\tthis.idx += 1;\n\t\t}\n\t\tconst ptStr = `[ ${pts2.join(',')} ]`;\n\t\tconst ptIdxStr = `[ ${ptIdx2.join(',')} ]`;\n\t\tthis.pts.push(ptStr);\n\t\tthis.ptIdx.push(ptIdxStr);\n\t}\n\tgetFigure(faceId: string): string {\n\t\tlet rStr = '';\n\t\tconst aList: string[] = [];\n\t\tconst bList: string[] = [];\n\t\tfor (const idx of this.pts.keys()) {\n\t\t\tconst aId = `ca_${faceId}_${idx}`;\n\t\t\tconst bId = `cb_${faceId}_${idx}`;\n\t\t\trStr += `${aId} = ${this.pts[idx]};\\n`;\n\t\t\trStr += `${bId} = ${this.ptIdx[idx]};\\n`;\n\t\t\taList.push(aId);\n\t\t\tbList.push(bId);\n\t\t}\n\t\tconst aListStr = aList.join(', ');\n\t\tconst bListStr = bList.join(', ');\n\t\trStr += `a_${faceId} = concat(${aListStr});\\n`;\n\t\trStr += `b_${faceId} = [${bListStr}];\\n`;\n\t\treturn rStr;\n\t}\n}\n\nclass OpenscadWrite {\n\t//constructor() {}\n\tgetHeader(): string {\n\t\tconst rStr = '// Generated by Parametrix\\n';\n\t\treturn rStr;\n\t}\n\tgetOneFigure(aCtr: tPaxContour[], faceId: string): string {\n\t\tconst oscadWF = new OpenscadWriteFigure();\n\t\tfor (const paxCtr of aCtr) {\n\t\t\tif (paxCtr.circle === true) {\n\t\t\t\tconst paxCircle = paxCtr as tPaxContourCircle;\n\t\t\t\tconst oscadSeg = oscadSegCircle(paxCircle.cx, paxCircle.cy, paxCircle.radius);\n\t\t\t\toscadWF.addContour(oscadSeg);\n\t\t\t} else {\n\t\t\t\tconst paxPath = paxCtr as tPaxContourPath;\n\t\t\t\tconst oscadSeg = toOpenscadSeg(paxPath.seg);\n\t\t\t\toscadWF.addContour(oscadSeg);\n\t\t\t}\n\t\t}\n\t\tconst rOscadF = oscadWF.getFigure(faceId);\n\t\treturn rOscadF;\n\t}\n\tgetAllFigures(faces: tPaxFaces, partName: string): string {\n\t\tlet rStr = '';\n\t\tfor (const face in faces) {\n\t\t\tconst figu = this.getOneFigure(faces[face], `${partName}_${face}`);\n\t\t\trStr += figu;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetOneExtrude(extrud: tExtrude): string {\n\t\tlet extrudMethod = 'rotate_extrude';\n\t\tlet extrudOption = '';\n\t\tif (extrud.extrudeMethod === EExtrude.eLinearOrtho) {\n\t\t\tif (extrud.length === undefined) {\n\t\t\t\tconsole.log('err103: design error: scad-linear_extrude length undefined!');\n\t\t\t}\n\t\t\textrudMethod = 'linear_extrude';\n\t\t\textrudOption = `height = ${extrud.length}`;\n\t\t}\n\t\tconst rStr = `\nmodule ${extrud.outName} () {\n\ttranslate( [ ${extrud.translate[0]}, ${extrud.translate[1]}, ${extrud.translate[2]} ])\n\t\trotate( [ ${radToDeg(extrud.rotate[0])}, ${radToDeg(extrud.rotate[1])}, ${radToDeg(\n\t\t\textrud.rotate[2]\n\t\t)} ])\n\t\t\t ${extrudMethod}(${extrudOption}) polygon(a_${extrud.face}, b_${extrud.face});\n}\n`;\n\t\treturn rStr;\n\t}\n\tgetAllExtrudes(extrudes: tExtrude[]): string {\n\t\tlet rStr = '';\n\t\tfor (const extrud of extrudes) {\n\t\t\tconst subp = this.getOneExtrude(extrud);\n\t\t\trStr += subp;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetOneVolume(volum: tBVolume): string {\n\t\tlet vMethod = 'identity';\n\t\tswitch (volum.boolMethod) {\n\t\t\tcase EBVolume.eIntersection:\n\t\t\t\tvMethod = 'intersection';\n\t\t\t\tbreak;\n\t\t\tcase EBVolume.eUnion:\n\t\t\t\tvMethod = 'union';\n\t\t\t\tbreak;\n\t\t\tcase EBVolume.eSubstraction:\n\t\t\t\tvMethod = 'difference';\n\t\t\t\tbreak;\n\t\t}\n\t\tconst inList2 = [];\n\t\tfor (const elem of volum.inList) {\n\t\t\tinList2.push(`${elem}();`);\n\t\t}\n\t\tconst inList3 = inList2.join('\\n');\n\t\tlet rStr = `\nmodule ${volum.outName} () {\n\t${vMethod} () {\n\t\t${inList3}\n\t}\n}\n`;\n\t\tif (volum.boolMethod === EBVolume.eIdentity) {\n\t\t\trStr = `\nmodule ${volum.outName} () {\n\t${inList3}\n}\n`;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetAllVolumes(volumes: tBVolume[]): string {\n\t\tlet rStr = '';\n\t\tfor (const volum of volumes) {\n\t\t\tconst subp = this.getOneVolume(volum);\n\t\t\trStr += subp;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetAllSubGeoms(inherits: tInherit[]): tGeom[] {\n\t\tconst rGeoms: tGeom[] = [];\n\t\tfor (const inher of inherits) {\n\t\t\tif (!rGeoms.includes(inher.subgeom)) {\n\t\t\t\trGeoms.push(inher.subgeom);\n\t\t\t}\n\t\t}\n\t\treturn rGeoms;\n\t}\n\tgetOneInherit(inherit: tInherit): string {\n\t\tconst rStr = `\nmodule ${inherit.outName} () {\n\ttranslate( [ ${inherit.translate[0]}, ${inherit.translate[1]}, ${inherit.translate[2]} ])\n\t\trotate( [ ${radToDeg(inherit.rotate[0])}, ${radToDeg(inherit.rotate[1])}, ${radToDeg(\n\t\t\tinherit.rotate[2]\n\t\t)} ])\n\t\t\t ${inherit.subdesign}();\n}\n`;\n\t\treturn rStr;\n\t}\n\tgetAllInherits(inherits: tInherit[]): string {\n\t\tlet rStr = '';\n\t\tfor (const inher of inherits) {\n\t\t\tconst subinhe = this.getOneInherit(inher);\n\t\t\trStr += subinhe;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetVolume(vol: tVolume): string {\n\t\tlet rStr = '';\n\t\tif (vol.inherits !== undefined) {\n\t\t\tconst subGeoms = this.getAllSubGeoms(vol.inherits);\n\t\t\tfor (const oneGeom of subGeoms) {\n\t\t\t\tconst paxJson = paxWrite().getPaxJson({}, oneGeom);\n\t\t\t\trStr += this.getAllFigures(paxJson.faces, paxJson.partName);\n\t\t\t\trStr += this.getVolume(oneGeom.vol);\n\t\t\t}\n\t\t\trStr += this.getAllInherits(vol.inherits);\n\t\t}\n\t\trStr += this.getAllExtrudes(vol.extrudes);\n\t\trStr += this.getAllVolumes(vol.volumes);\n\t\treturn rStr;\n\t}\n\tgetFooter(partName: string): string {\n\t\tconst rStr = `\npax_${partName}();\n`;\n\t\treturn rStr;\n\t}\n\tgetExportFile(pax: tPaxJson) {\n\t\tlet rStr = this.getHeader();\n\t\trStr += this.getAllFigures(pax.faces, pax.partName);\n\t\trStr += this.getVolume(pax.volume);\n\t\trStr += this.getFooter(pax.partName);\n\t\treturn rStr;\n\t}\n}\nfunction oscadWrite() {\n\tconst rOscadWrite = new OpenscadWrite();\n\treturn rOscadWrite;\n}\n\nexport { oscadWrite };\n","// write_openjscad.ts\n\nimport * as segLib from './segment';\nimport type {\n\ttPaxContour,\n\ttPaxContourCircle,\n\ttPaxContourPath,\n\ttPaxSeg,\n\ttPaxSegArc\n} from './prepare_pax';\nimport { PSeg } from './prepare_pax';\nimport type { tPaxFaces, tPaxJson } from './write_pax';\nimport { convTypePaxToSeg1, paxWrite } from './write_pax';\nimport type { tVolume, tInherit, tExtrude, tBVolume } from './volume';\nimport { EExtrude, EBVolume } from './volume';\nimport type { tGeom } from './aaParamGeom';\n//import { withinZero2Pi } from './angle_utils';\nimport type { tAtsPoints } from './arc_to_stroke';\nimport { circle_to_stroke, arc_to_stroke } from './arc_to_stroke';\n\ntype tOpenjscadSeg = tAtsPoints;\n\nconst approxMaxAngle = Math.PI / 8;\nconst approxMaxLength = 20.0;\n\nfunction ojscadSegLine(p2x: number, p2y: number): tOpenjscadSeg {\n\tconst rSeg: tOpenjscadSeg = [[p2x, p2y]];\n\treturn rSeg;\n}\nfunction ojscadSegArc(\n\tcx: number,\n\tcy: number,\n\tradius: number,\n\taa1: number,\n\taa2: number,\n\tarcCcw: boolean\n): tOpenjscadSeg {\n\tconst rSeg = arc_to_stroke(cx, cy, radius, aa1, aa2, arcCcw, approxMaxAngle, approxMaxLength);\n\treturn rSeg;\n}\nfunction toOpenjscadSeg(paxCtr: tPaxSeg[]): tOpenjscadSeg {\n\tconst rOjscadSeg: tOpenjscadSeg = [];\n\tlet px1 = 0;\n\tlet py1 = 0;\n\tfor (const seg of paxCtr) {\n\t\tif (seg.typ === PSeg.eStart) {\n\t\t\trOjscadSeg.push(...ojscadSegLine(seg.px, seg.py));\n\t\t} else if (seg.typ === PSeg.eStroke) {\n\t\t\trOjscadSeg.push(...ojscadSegLine(seg.px, seg.py));\n\t\t} else if (seg.typ === PSeg.eArc) {\n\t\t\ttry {\n\t\t\t\tconst sega = seg as tPaxSegArc;\n\t\t\t\tconst seg1 = new segLib.Segment1(\n\t\t\t\t\tconvTypePaxToSeg1(sega.typ),\n\t\t\t\t\tsega.px,\n\t\t\t\t\tsega.py,\n\t\t\t\t\tsega.radius,\n\t\t\t\t\tsega.large,\n\t\t\t\t\tsega.ccw\n\t\t\t\t);\n\t\t\t\tconst seg2 = segLib.arcSeg1To2(px1, py1, seg1);\n\t\t\t\trOjscadSeg.push(\n\t\t\t\t\t...ojscadSegArc(\n\t\t\t\t\t\tseg2.pc.cx,\n\t\t\t\t\t\tseg2.pc.cy,\n\t\t\t\t\t\tseg1.radius,\n\t\t\t\t\t\tseg2.a1,\n\t\t\t\t\t\tseg2.a2,\n\t\t\t\t\t\tseg2.arcCcw\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (emsg) {\n\t\t\t\tconsole.log('err730: ' + (emsg as string));\n\t\t\t}\n\t\t\t//} else {\n\t\t\t//\tconsole.log(\n\t\t\t//\t\t`err778: write_openjscad toOpenjscadSeg has unknown segment type ${seg.typ}`\n\t\t\t//\t);\n\t\t}\n\t\t// all segements of Pax must update the last point\n\t\tpx1 = seg.px;\n\t\tpy1 = seg.py;\n\t}\n\treturn rOjscadSeg;\n}\nfunction ojscadSegCircle(cx: number, cy: number, radius: number): tOpenjscadSeg {\n\tconst rSeg = circle_to_stroke(cx, cy, radius, approxMaxAngle, approxMaxLength);\n\treturn rSeg;\n}\n\n// floating precision for OpenScad export\nfunction ff(ifloat: number): string {\n\treturn ifloat.toFixed(4);\n}\nclass OjscadWriteFigure {\n\tpts: string[];\n\tconstructor() {\n\t\tthis.pts = [];\n\t}\n\taddContour(ictr: tOpenjscadSeg) {\n\t\tconst pts2: string[] = [];\n\t\tfor (const pt of ictr) {\n\t\t\tconst [px, py] = pt;\n\t\t\tpts2.push(`[ ${ff(px)}, ${ff(py)} ]`);\n\t\t}\n\t\tconst ptStr = `[ ${pts2.join(',')} ]`;\n\t\tthis.pts.push(ptStr);\n\t}\n\tgetFigure(faceId: string): string {\n\t\tlet rStr = '';\n\t\tconst aList: string[] = [];\n\t\tfor (const idx of this.pts.keys()) {\n\t\t\tconst aId = `ctr_${faceId}_${idx}`;\n\t\t\trStr += `const ${aId} = polygon({ points: ${this.pts[idx]} });\\n`;\n\t\t\taList.push(aId);\n\t\t}\n\t\tif (aList.length === 1) {\n\t\t\trStr += `const face_${faceId} = ${aList[0]};\\n`;\n\t\t} else if (aList.length > 1) {\n\t\t\tconst ctrList = aList.join(', ');\n\t\t\trStr += `const face_${faceId} = subtract( ${ctrList} )\\n`;\n\t\t}\n\t\treturn rStr;\n\t}\n}\n\nclass OpenjscadWrite {\n\t//constructor() {}\n\tgetHeader(): string {\n\t\tconst rStr = `// Generated by Parametrix\nconst { polygon } = require('@jscad/modeling').primitives\n//const { subtract } = require('@jscad/modeling').booleans;\nconst { union, intersect, scission, subtract } = require('@jscad/modeling').booleans\nconst { extrudeLinear, extrudeRotate } = require('@jscad/modeling').extrusions;\nconst { translate, rotate } = require('@jscad/modeling').transforms\nconst main = () => {\n`;\n\t\treturn rStr;\n\t}\n\tgetOneFigure(aCtr: tPaxContour[], faceId: string): string {\n\t\tconst ojscadWF = new OjscadWriteFigure();\n\t\tfor (const paxCtr of aCtr) {\n\t\t\tif (paxCtr.circle === true) {\n\t\t\t\tconst paxCircle = paxCtr as tPaxContourCircle;\n\t\t\t\tconst ojscadSeg = ojscadSegCircle(paxCircle.cx, paxCircle.cy, paxCircle.radius);\n\t\t\t\tojscadWF.addContour(ojscadSeg);\n\t\t\t} else {\n\t\t\t\tconst paxPath = paxCtr as tPaxContourPath;\n\t\t\t\tconst ojscadSeg = toOpenjscadSeg(paxPath.seg);\n\t\t\t\tojscadWF.addContour(ojscadSeg);\n\t\t\t}\n\t\t}\n\t\tconst rOjscadF = ojscadWF.getFigure(faceId);\n\t\treturn rOjscadF;\n\t}\n\tgetAllFigures(faces: tPaxFaces, partName: string): string {\n\t\tlet rStr = '';\n\t\tfor (const face in faces) {\n\t\t\tconst figu = this.getOneFigure(faces[face], `${partName}_${face}`);\n\t\t\trStr += figu;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetOneExtrude(extrud: tExtrude): string {\n\t\tlet extrudMethod = 'extrudeRotate';\n\t\tlet extrudOption = '{segments: 32}';\n\t\tif (extrud.extrudeMethod === EExtrude.eLinearOrtho) {\n\t\t\tif (extrud.length === undefined) {\n\t\t\t\tconsole.log('err079: design error: extrudeLinear length undefined!');\n\t\t\t}\n\t\t\textrudMethod = 'extrudeLinear';\n\t\t\textrudOption = `{height: ${extrud.length}}`;\n\t\t}\n\t\tconst rStr = `\nconst ${extrud.outName} =\n\ttranslate( [ ${extrud.translate[0]}, ${extrud.translate[1]}, ${extrud.translate[2]}, ],\n\t\trotate( [ ${extrud.rotate[0]}, ${extrud.rotate[1]}, ${extrud.rotate[2]}, ],\n\t\t\t ${extrudMethod}( ${extrudOption}, face_${extrud.face} )\n\t\t)\n\t);\n`;\n\t\treturn rStr;\n\t}\n\tgetAllExtrudes(extrudes: tExtrude[]): string {\n\t\tlet rStr = '';\n\t\tfor (const extrud of extrudes) {\n\t\t\tconst subp = this.getOneExtrude(extrud);\n\t\t\trStr += subp;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetOneVolume(volum: tBVolume): string {\n\t\tlet vMethod = 'identity';\n\t\tswitch (volum.boolMethod) {\n\t\t\tcase EBVolume.eIntersection:\n\t\t\t\tvMethod = 'intersect';\n\t\t\t\tbreak;\n\t\t\tcase EBVolume.eUnion:\n\t\t\t\tvMethod = 'union';\n\t\t\t\tbreak;\n\t\t\tcase EBVolume.eSubstraction:\n\t\t\t\tvMethod = 'subtract';\n\t\t\t\tbreak;\n\t\t}\n\t\tconst inList2 = volum.inList.join(', ');\n\t\tlet rStr = `const ${volum.outName} = ${vMethod}( ${inList2} );\\n`;\n\t\tif (volum.boolMethod === EBVolume.eIdentity) {\n\t\t\trStr = `const ${volum.outName} = ${volum.inList[0]};\\n`;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetAllVolumes(volumes: tBVolume[]): string {\n\t\tlet rStr = '';\n\t\tfor (const volum of volumes) {\n\t\t\tconst subp = this.getOneVolume(volum);\n\t\t\trStr += subp;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetAllSubGeoms(inherits: tInherit[]): tGeom[] {\n\t\tconst rGeoms: tGeom[] = [];\n\t\tfor (const inher of inherits) {\n\t\t\tif (!rGeoms.includes(inher.subgeom)) {\n\t\t\t\trGeoms.push(inher.subgeom);\n\t\t\t}\n\t\t}\n\t\treturn rGeoms;\n\t}\n\tgetOneInherit(inherit: tInherit): string {\n\t\tconst rStr = `\nconst ${inherit.outName} =\n\ttranslate( [ ${inherit.translate[0]}, ${inherit.translate[1]}, ${inherit.translate[2]}, ],\n\t\trotate( [ ${inherit.rotate[0]}, ${inherit.rotate[1]}, ${inherit.rotate[2]}, ],\n\t\t\t ${inherit.subdesign}\n\t\t)\n\t);\n`;\n\t\treturn rStr;\n\t}\n\tgetAllInherits(inherits: tInherit[]): string {\n\t\tlet rStr = '';\n\t\tfor (const inher of inherits) {\n\t\t\tconst subinhe = this.getOneInherit(inher);\n\t\t\trStr += subinhe;\n\t\t}\n\t\treturn rStr;\n\t}\n\tgetVolume(vol: tVolume): string {\n\t\tlet rStr = '';\n\t\tif (vol.inherits !== undefined) {\n\t\t\tconst subGeoms = this.getAllSubGeoms(vol.inherits);\n\t\t\tfor (const oneGeom of subGeoms) {\n\t\t\t\tconst paxJson = paxWrite().getPaxJson({}, oneGeom);\n\t\t\t\trStr += this.getAllFigures(paxJson.faces, paxJson.partName);\n\t\t\t\trStr += this.getVolume(oneGeom.vol);\n\t\t\t}\n\t\t\trStr += this.getAllInherits(vol.inherits);\n\t\t}\n\t\trStr += this.getAllExtrudes(vol.extrudes);\n\t\trStr += this.getAllVolumes(vol.volumes);\n\t\treturn rStr;\n\t}\n\tgetFooter(partName: string): string {\n\t\tconst rStr = `\n return pax_${partName};\n}\nmodule.exports = { main };\n`;\n\t\treturn rStr;\n\t}\n\tgetExportFile(pax: tPaxJson) {\n\t\tlet rStr = this.getHeader();\n\t\trStr += this.getAllFigures(pax.faces, pax.partName);\n\t\trStr += this.getVolume(pax.volume);\n\t\trStr += this.getFooter(pax.partName);\n\t\treturn rStr;\n\t}\n}\nfunction ojscadWrite() {\n\tconst rOjscadWrite = new OpenjscadWrite();\n\treturn rOjscadWrite;\n}\n\nexport { ojscadWrite };\n","// aaExportContent.ts\n\nimport type { tParamVal } from './designParams';\nimport type { tGeom } from './aaParamGeom';\nimport { colors } from './canvas_utils';\nimport { Point, point, pointMinMax } from './point';\nimport type { tContour } from './contour';\nimport type { Figure } from './figure';\nimport { mergeFaces } from './figure';\nimport type { SvgWriter } from './write_svg';\nimport { svgWriter } from './write_svg';\nimport { dxfWriter } from './write_dxf';\nimport { paxWrite } from './write_pax';\nimport { oscadWrite } from './write_openscad';\nimport { ojscadWrite } from './write_openjscad';\nimport * as zip from '@zip.js/zip.js';\n\n// SVG\nclass MinMaxPoint {\n\txMin: number;\n\txMax: number;\n\tyMin: number;\n\tyMax: number;\n\tfirstDone: boolean;\n\tconstructor() {\n\t\tthis.firstDone = false;\n\t\tthis.xMin = 0;\n\t\tthis.xMax = 0;\n\t\tthis.yMin = 0;\n\t\tthis.yMax = 0;\n\t}\n\taddAContour(aCtr: tContour[]) {\n\t\tif (aCtr.length > 0) {\n\t\t\tconst pts: Point[] = [];\n\t\t\tif (this.firstDone) {\n\t\t\t\tpts.push(point(this.xMin, this.yMin));\n\t\t\t\tpts.push(point(this.xMax, this.yMax));\n\t\t\t}\n\t\t\tfor (const ctr of aCtr) {\n\t\t\t\tpts.push(...ctr.generatePoints());\n\t\t\t}\n\t\t\tconst [Xmin, Xmax, Ymin, Ymax] = pointMinMax(pts);\n\t\t\tthis.xMin = Xmin;\n\t\t\tthis.xMax = Xmax;\n\t\t\tthis.yMin = Ymin;\n\t\t\tthis.yMax = Ymax;\n\t\t}\n\t}\n\tgetViewBox() {\n\t\tconst Xdelta = Math.round((this.xMax - this.xMin) * 1.1) + 10;\n\t\tconst Ydelta = Math.round((this.yMax - this.yMin) * 1.1) + 10;\n\t\tconst Xmin2 = Math.round(this.xMin - Xdelta * 0.05);\n\t\tconst Ymin2 = Math.round(this.yMin - Ydelta * 0.05);\n\t\treturn [Xmin2, Xdelta, Ymin2, Ydelta];\n\t}\n}\n\ninterface tGroup {\n\tgpName: string;\n\tgpColor: string;\n\tctrs: tContour[];\n}\n\nclass SvgWriter2 {\n\tminMax: MinMaxPoint;\n\tgroups: tGroup[];\n\tsvg: SvgWriter;\n\tconstructor() {\n\t\tthis.minMax = new MinMaxPoint();\n\t\tthis.groups = [];\n\t\tthis.svg = svgWriter();\n\t}\n\taddAContour(aCtrs: tContour[], groupId = '', icolor = colors.contour) {\n\t\tthis.minMax.addAContour(aCtrs);\n\t\tconst grp: tGroup = { gpName: groupId, gpColor: icolor, ctrs: aCtrs };\n\t\tthis.groups.push(grp);\n\t}\n\tmakeSvg(yCeiling: number) {\n\t\tfor (const grp of this.groups) {\n\t\t\tif (grp.gpName !== '') {\n\t\t\t\tthis.svg.addGroup(grp.gpName);\n\t\t\t}\n\t\t\tfor (const ctr of grp.ctrs) {\n\t\t\t\tlet ctrColor = ctr.imposedColor;\n\t\t\t\tif (ctrColor === '') {\n\t\t\t\t\tctrColor = grp.gpColor;\n\t\t\t\t}\n\t\t\t\tthis.svg.addSvgString(ctr.toSvg(yCeiling, ctrColor));\n\t\t\t}\n\t\t\tif (grp.gpName !== '') {\n\t\t\t\tthis.svg.closeGroup();\n\t\t\t}\n\t\t}\n\t}\n\tstringify() {\n\t\tconst [Xmin2, Xdelta, Ymin2, Ydelta] = this.minMax.getViewBox();\n\t\tthis.svg.addHeader(Xmin2, Xdelta, Ymin2, Ydelta);\n\t\tthis.makeSvg(this.minMax.yMax + this.minMax.yMin);\n\t\treturn this.svg.stringify();\n\t}\n}\nfunction svgWriter2(): SvgWriter2 {\n\tconst rSvgWriter2 = new SvgWriter2();\n\treturn rSvgWriter2;\n}\nfunction figureToSvg(aCtr: tContour[]): string {\n\tconst sw2 = svgWriter2();\n\tsw2.addAContour(aCtr);\n\treturn sw2.stringify();\n}\nfunction figureToSvgDeco(fig: Figure) {\n\tconst sw2 = svgWriter2();\n\tsw2.addAContour(fig.mainList, 'main', colors.main);\n\tsw2.addAContour(fig.mainBList, 'mainB', colors.mainB);\n\tsw2.addAContour(fig.secondList, 'second', colors.second);\n\tsw2.addAContour(fig.secondBList, 'secondB', colors.secondB);\n\tsw2.addAContour(fig.dynamicsList, 'dynamics', colors.dynamics);\n\tconst rSvgDeco = sw2.stringify();\n\treturn rSvgDeco;\n}\n\n// DXF\nfunction figureToDxf(aCtr: tContour[]): string {\n\tconst dxf = dxfWriter();\n\t//const firstDxfLayer = dxf.addLayer('first');\n\tfor (const ctr of aCtr) {\n\t\tif (ctr.circle) {\n\t\t\tconst seg = ctr.toDxfSeg()[0];\n\t\t\tdxf.addCircle(seg.p1x, seg.p1y, seg.radius);\n\t\t} else {\n\t\t\tfor (const seg of ctr.toDxfSeg()) {\n\t\t\t\tif (seg.arc) {\n\t\t\t\t\tdxf.addArc(seg.p1x, seg.p1y, seg.radius, seg.a1, seg.a2);\n\t\t\t\t} else {\n\t\t\t\t\tdxf.addLine(seg.p1x, seg.p1y, seg.p2x, seg.p2y);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tconst rDxf = dxf.stringify();\n\treturn rDxf;\n}\n\n// PAX\nfunction makePax(paramVal: tParamVal, geome0: tGeom): string {\n\tconst rStr = paxWrite().getPaxStr(paramVal, geome0);\n\treturn rStr;\n}\n\n// OpenSCad\nfunction makeOpenscad(geome0: tGeom): string {\n\tconst paxJson = paxWrite().getPaxJson({}, geome0);\n\tconst rStr = oscadWrite().getExportFile(paxJson);\n\treturn rStr;\n}\n\n// OpenJSCAD\nfunction makeOpenjscad(geome0: tGeom): string {\n\tconst paxJson = paxWrite().getPaxJson({}, geome0);\n\tconst rStr = ojscadWrite().getExportFile(paxJson);\n\treturn rStr;\n}\n\n// ZIP\nasync function makeZip(\n\tparamVal: tParamVal,\n\tgeome0: tGeom,\n\ttSim: number,\n\tgeome1: tGeom\n): Promise<Blob> {\n\t// zip writer preparation\n\tconst zipFileWriter = new zip.BlobWriter('application/zip');\n\tconst zipWriter = new zip.ZipWriter(zipFileWriter);\n\tconst partName = geome0.partName;\n\t// zip payload\n\tconst zParam = new zip.TextReader(JSON.stringify(paramVal, null, 2));\n\tawait zipWriter.add(`param_${partName}.json`, zParam);\n\tconst zLog0 = new zip.TextReader(geome0.logstr);\n\tawait zipWriter.add(`geom_${partName}_log.txt`, zLog0);\n\tconst zLog1 = new zip.TextReader(geome1.logstr);\n\tawait zipWriter.add(`geom_${partName}_t${tSim}_log.txt`, zLog1);\n\tfor (const face in geome0.fig) {\n\t\tconst svgOne = new zip.TextReader(figureToSvg(geome0.fig[face].mainList));\n\t\tawait zipWriter.add(`face_${partName}_${face}.svg`, svgOne);\n\t\tconst dxfOne = new zip.TextReader(figureToDxf(geome0.fig[face].mainList));\n\t\tawait zipWriter.add(`face_${partName}_${face}.dxf`, dxfOne);\n\t\tconst svgOneDeco = new zip.TextReader(figureToSvgDeco(geome0.fig[face]));\n\t\tawait zipWriter.add(`deco_${partName}_${face}.svg`, svgOneDeco);\n\t\tconst svgOneDecoT = new zip.TextReader(figureToSvgDeco(geome1.fig[face]));\n\t\tawait zipWriter.add(`deco_${partName}_${face}_t${tSim}.svg`, svgOneDecoT);\n\t}\n\tconst mergedFace = mergeFaces(geome0.fig);\n\tconst svgMerged = new zip.TextReader(figureToSvg(mergedFace.mainList));\n\tawait zipWriter.add(`face_${partName}_all_merged.svg`, svgMerged);\n\tconst dxfMerged = new zip.TextReader(figureToDxf(mergedFace.mainList));\n\tawait zipWriter.add(`face_${partName}_all_merged.dxf`, dxfMerged);\n\tconst svgMergedDeco = new zip.TextReader(figureToSvgDeco(mergedFace));\n\tawait zipWriter.add(`deco_${partName}_all_merged.svg`, svgMergedDeco);\n\tconst svgMergedDecoT = new zip.TextReader(figureToSvgDeco(mergedFace));\n\tawait zipWriter.add(`deco_${partName}_all_merged_t${tSim}.svg`, svgMergedDecoT);\n\tconst zPax = new zip.TextReader(makePax(paramVal, geome0));\n\tawait zipWriter.add(`${partName}.pax.json`, zPax);\n\tconst zSCad = new zip.TextReader(makeOpenscad(geome0));\n\tawait zipWriter.add(`${partName}_noarc_openscad.scad`, zSCad);\n\tconst zJScad = new zip.TextReader(makeOpenjscad(geome0));\n\tawait zipWriter.add(`${partName}_noarc_jscad.js`, zJScad);\n\t// zip writer finalization\n\tawait zipWriter.close();\n\tconst rFileContent = await zipFileWriter.getData();\n\treturn rFileContent;\n}\n\nexport { figureToSvg, figureToDxf, makePax, makeOpenscad, makeOpenjscad, makeZip };\n","// aaExportFile.ts\n\nimport type { tParamVal } from './designParams';\nimport type { tGeomFunc } from './aaParamGeom';\nimport {\n\tfigureToSvg,\n\tfigureToDxf,\n\tmakePax,\n\tmakeOpenscad,\n\tmakeOpenjscad,\n\tmakeZip\n} from './aaExportContent';\nimport { mergeFaces } from './figure';\n\nenum EFormat {\n\teSVG,\n\teSVGALL,\n\teDXF,\n\teDXFALL,\n\tePAX,\n\teOPENSCAD,\n\teJSCAD,\n\teZIP\n}\n\nfunction fileTextContent(\n\tfgeom: tGeomFunc,\n\tparamVal: tParamVal,\n\teFace: string,\n\texportFormat: EFormat\n): string {\n\tconst geome0 = fgeom(0, paramVal);\n\tlet rFileContent = '';\n\tif (!geome0.calcErr) {\n\t\tconst figList = Object.keys(geome0.fig);\n\t\tif (exportFormat === EFormat.eSVG) {\n\t\t\tif (figList.includes(eFace)) {\n\t\t\t\tconst figu = geome0.fig[eFace];\n\t\t\t\trFileContent = figureToSvg(figu.mainList);\n\t\t\t} else {\n\t\t\t\tconsole.log(`err749: fileTextContent eFace ${eFace} invalid`);\n\t\t\t}\n\t\t} else if (exportFormat === EFormat.eSVGALL) {\n\t\t\tconst figu = mergeFaces(geome0.fig);\n\t\t\trFileContent = figureToSvg(figu.mainList);\n\t\t} else if (exportFormat === EFormat.eDXF) {\n\t\t\tif (figList.includes(eFace)) {\n\t\t\t\tconst figu = geome0.fig[eFace];\n\t\t\t\trFileContent = figureToDxf(figu.mainList);\n\t\t\t} else {\n\t\t\t\tconsole.log(`err759: fileTextContent eFace ${eFace} invalid`);\n\t\t\t}\n\t\t} else if (exportFormat === EFormat.eDXFALL) {\n\t\t\tconst figu = mergeFaces(geome0.fig);\n\t\t\trFileContent = figureToDxf(figu.mainList);\n\t\t} else if (exportFormat === EFormat.ePAX) {\n\t\t\trFileContent = makePax(paramVal, geome0);\n\t\t} else if (exportFormat === EFormat.eOPENSCAD) {\n\t\t\trFileContent = makeOpenscad(geome0);\n\t\t} else if (exportFormat === EFormat.eJSCAD) {\n\t\t\trFileContent = makeOpenjscad(geome0);\n\t\t} else {\n\t\t\tconsole.log(`err912: unknown exportFormat ${exportFormat}`);\n\t\t}\n\t} else {\n\t\tconsole.log('err931: error by calling geome ${geome0.calcErr}');\n\t}\n\treturn rFileContent;\n}\n\nasync function fileBinContent(\n\tfgeom: tGeomFunc,\n\ttSim: number,\n\tparamVal: tParamVal,\n\texportFormat: EFormat\n): Promise<Blob> {\n\tconst geome0 = fgeom(0, paramVal);\n\tconst geome1 = fgeom(tSim, paramVal);\n\tlet rFileContent = new Blob();\n\tif (!geome0.calcErr && !geome1.calcErr) {\n\t\tif (exportFormat === EFormat.eZIP) {\n\t\t\trFileContent = await makeZip(paramVal, geome0, tSim, geome1);\n\t\t} else {\n\t\t\tconsole.log(`err913: unknown exportFormat ${exportFormat}`);\n\t\t}\n\t} else {\n\t\tconsole.log('err932: error by calling geome ${geome0.calcErr} ${geome1.calcErr}');\n\t}\n\treturn rFileContent;\n}\n\nfunction fileMime(exportFormat: EFormat): string {\n\tlet rMime = '';\n\tif (exportFormat === EFormat.eSVG || exportFormat === EFormat.eSVGALL) {\n\t\trMime = 'image/svg+xml';\n\t} else if (exportFormat === EFormat.eDXF || exportFormat === EFormat.eDXFALL) {\n\t\trMime = 'application/dxf';\n\t} else if (exportFormat === EFormat.ePAX) {\n\t\trMime = 'application/json';\n\t\t//rMime = 'text/plain';\n\t} else if (exportFormat === EFormat.eOPENSCAD) {\n\t\trMime = 'text/plain';\n\t} else if (exportFormat === EFormat.eJSCAD) {\n\t\trMime = 'text/plain';\n\t} else if (exportFormat === EFormat.eZIP) {\n\t\trMime = 'application/zip';\n\t\t//} else {\n\t\t//\tconsole.log(`err903: unknown exportFormat ${exportFormat}`);\n\t}\n\treturn rMime;\n}\n\nfunction fileSuffix(exportFormat: EFormat): string {\n\tlet rSuffix = '';\n\tif (exportFormat === EFormat.eSVG || exportFormat === EFormat.eSVGALL) {\n\t\trSuffix = '.svg';\n\t} else if (exportFormat === EFormat.eDXF || exportFormat === EFormat.eDXFALL) {\n\t\trSuffix = '.dxf';\n\t} else if (exportFormat === EFormat.ePAX) {\n\t\trSuffix = '.pax.json';\n\t} else if (exportFormat === EFormat.eOPENSCAD) {\n\t\trSuffix = '_noarc_openscad.scad';\n\t} else if (exportFormat === EFormat.eJSCAD) {\n\t\trSuffix = '_noarc_jscad.js';\n\t} else if (exportFormat === EFormat.eZIP) {\n\t\trSuffix = '.zip';\n\t\t//} else {\n\t\t//\tconsole.log(`err904: unknown exportFormat ${exportFormat}`);\n\t}\n\treturn rSuffix;\n}\n\nfunction fileBin(exportFormat: EFormat): boolean {\n\tlet rBin = false;\n\tif (exportFormat === EFormat.eZIP) {\n\t\trBin = true;\n\t}\n\treturn rBin;\n}\n\nexport { EFormat, fileBinContent, fileTextContent, fileMime, fileSuffix, fileBin };\n","// paramFile.ts\n\nimport type { tParamVal } from './designParams';\n\ninterface tParamValInFile {\n\tlastModif: string;\n\tpVal: tParamVal;\n\tcomment: string;\n}\n\nfunction createParamFile(lastModif: string, idparams: tParamVal, comment: string): string {\n\tconst allVal: tParamValInFile = {\n\t\tlastModif: lastModif,\n\t\tpVal: idparams,\n\t\tcomment: comment\n\t};\n\tconst fContentStr = JSON.stringify(allVal, null, ' ');\n\treturn fContentStr;\n}\n\nfunction parseParamFile(fContentStr: string): [tParamValInFile, string] {\n\tconst wholeJson = JSON.parse(fContentStr) as tParamValInFile;\n\tconst lastModifKey = 'lastModif';\n\tconst pValKey = 'pVal';\n\tconst commentKey = 'comment';\n\tlet rlog = '';\n\tconst rObj: tParamValInFile = { lastModif: '', pVal: {}, comment: '' };\n\tif (Object.hasOwn(wholeJson, lastModifKey)) {\n\t\trObj[lastModifKey] = wholeJson[lastModifKey];\n\t}\n\tif (Object.hasOwn(wholeJson, pValKey)) {\n\t\tconst paNaVa = wholeJson[pValKey];\n\t\tfor (const paNa of Object.keys(paNaVa)) {\n\t\t\tconst paVa = paNaVa[paNa];\n\t\t\t//const paVa = parseFloat(paVaStr);\n\t\t\tif (isNaN(paVa)) {\n\t\t\t\tthrow `err905: ${paVa} is not a number!`;\n\t\t\t}\n\t\t\trObj[pValKey][paNa] = paVa;\n\t\t}\n\t\trlog += `info398: parsing file has found ${Object.keys(rObj[pValKey]).length} parameters\\n`;\n\t} else {\n\t\tthrow `err489: parameter-json-file has no key ${pValKey}\\n`;\n\t}\n\tif (Object.hasOwn(wholeJson, commentKey)) {\n\t\trObj[commentKey] = wholeJson[commentKey];\n\t}\n\treturn [rObj, rlog];\n}\n\nexport type { tParamValInFile };\nexport { createParamFile, parseParamFile };\n"],"mappings":"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","names":["ShapePoint","bisector","ff","ff","ff","segz1","PType","EExtrude","EBVolume","ff","paxCircle","paxPath","approxMaxAngle","approxMaxLength","ff","paxCircle","paxPath","EFormat"]}
|