@lewismoten/gamemaker-sandbox-tools 3.1.0 → 3.4.0
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/CHANGELOG.md +44 -0
- package/NOTICE.md +105 -3
- package/README.md +301 -15
- package/dist/audio-files.js +82 -0
- package/dist/audio.js +23 -138
- package/dist/block-merge.js +43 -0
- package/dist/color-reduce.js +44 -0
- package/dist/colors.js +87 -0
- package/dist/delta.js +75 -0
- package/dist/disk-diff.js +220 -0
- package/dist/drawing.js +83 -869
- package/dist/embroidery/compile.js +85 -0
- package/dist/embroidery/dst.js +79 -0
- package/dist/embroidery/exp.js +26 -0
- package/dist/embroidery/fill.js +49 -0
- package/dist/embroidery/geom.js +82 -0
- package/dist/embroidery/pes.js +79 -0
- package/dist/embroidery/satin.js +29 -0
- package/dist/embroidery/simulate.js +30 -0
- package/dist/embroidery/strokeFont.js +253 -0
- package/dist/embroidery/svg.js +24 -0
- package/dist/embroidery/types.js +13 -0
- package/dist/embroidery/units.js +26 -0
- package/dist/embroidery/validate.js +15 -0
- package/dist/formats/blocks.js +1 -103
- package/dist/formats/character.js +1 -83
- package/dist/formats/cmf.js +1 -37
- package/dist/formats/fli.js +1 -296
- package/dist/formats/fliLimits.js +1 -54
- package/dist/formats/game.js +1 -193
- package/dist/formats/gif.js +1 -125
- package/dist/formats/graphicScripts.js +1 -44
- package/dist/formats/map.js +1 -38
- package/dist/formats/monster.js +1 -69
- package/dist/formats/palette.js +1 -58
- package/dist/formats/recording.js +1 -17
- package/dist/formats/sound.js +1 -44
- package/dist/formats/voc.js +1 -303
- package/dist/gif-shrink.js +56 -0
- package/dist/image/png.js +42 -0
- package/dist/images.js +81 -43
- package/dist/kit/actors.js +19 -0
- package/dist/kit/align.js +204 -0
- package/dist/kit/blit.js +45 -0
- package/dist/kit/blockRoles.js +97 -0
- package/dist/kit/clips.js +40 -0
- package/dist/kit/coverPaint.js +18 -0
- package/dist/kit/disk.js +76 -0
- package/dist/kit/fadeOut.js +13 -0
- package/dist/kit/fliClips.js +133 -0
- package/dist/kit/fliShrink.js +277 -0
- package/dist/kit/gameSim.js +235 -0
- package/dist/kit/hopBot.js +142 -0
- package/dist/kit/levelGen.js +1423 -0
- package/dist/kit/levelGrid.js +33 -0
- package/dist/kit/levelPicture.js +27 -0
- package/dist/kit/menuVersion.js +19 -0
- package/dist/kit/microText.js +35 -0
- package/dist/kit/mumble.js +74 -0
- package/dist/kit/music.js +8 -0
- package/dist/kit/palRamps.js +32 -0
- package/dist/kit/palette.js +49 -0
- package/dist/kit/pcText.js +72 -0
- package/dist/kit/photo.js +150 -0
- package/dist/kit/pixels.js +79 -0
- package/dist/kit/png.js +40 -0
- package/dist/kit/quantize.js +72 -0
- package/dist/kit/raytrace.js +379 -0
- package/dist/kit/recordedDemo.js +10 -0
- package/dist/kit/reel.js +77 -0
- package/dist/kit/road3d.js +67 -0
- package/dist/kit/routeChecks.js +8 -0
- package/dist/kit/saveSlots.js +11 -0
- package/dist/kit/sceneInit.js +13 -0
- package/dist/kit/sceneSim.js +112 -0
- package/dist/kit/screenText.js +15 -0
- package/dist/kit/sdftext.js +237 -0
- package/dist/kit/shading.js +69 -0
- package/dist/kit/song.js +251 -0
- package/dist/kit/songFx.js +179 -0
- package/dist/kit/sound.js +52 -0
- package/dist/kit/synthParts.js +20 -0
- package/dist/kit/tar.js +53 -0
- package/dist/kit/textBounds.js +84 -0
- package/dist/kit/textfit.js +246 -0
- package/dist/kit/transforms.js +57 -0
- package/dist/kit/tune.js +21 -0
- package/dist/look-alike.js +50 -0
- package/dist/menu-version.js +4 -0
- package/dist/mesh/colorBodies.js +137 -0
- package/dist/mesh/decimate.js +207 -0
- package/dist/mesh/meshCheck.js +51 -0
- package/dist/mesh/overhang.js +41 -0
- package/dist/mesh/sampledField.js +12 -0
- package/dist/mesh/stl.js +36 -0
- package/dist/mesh/surfaceNets.js +79 -0
- package/dist/mesh/tetraMesh.js +62 -0
- package/dist/mesh/threeMf.js +58 -0
- package/dist/mesh/zipFile.js +52 -0
- package/dist/microFont.js +101 -0
- package/dist/music/compose.js +72 -0
- package/dist/pack/meshPack.js +198 -0
- package/dist/pack/threeMfPack.js +92 -0
- package/dist/palette-reserve.js +116 -0
- package/dist/palettes.js +138 -0
- package/dist/release-notes.js +40 -0
- package/dist/simulation.js +16 -2774
- package/dist/text.js +74 -0
- package/dist/types/audio.d.ts +4 -0
- package/dist/types/audioFiles.d.ts +22 -0
- package/dist/types/audioWav.d.ts +4 -0
- package/dist/types/blockMerge.d.ts +24 -0
- package/dist/types/colorReduce.d.ts +23 -0
- package/dist/types/{web/packages/tools/src/colors.d.ts → colors.d.ts} +6 -0
- package/dist/types/delta.d.ts +32 -0
- package/dist/types/diskDiff.d.ts +47 -0
- package/dist/types/drawing.d.ts +15 -0
- package/dist/types/embroidery/compile.d.ts +3 -0
- package/dist/types/embroidery/dst.d.ts +13 -0
- package/dist/types/embroidery/exp.d.ts +8 -0
- package/dist/types/embroidery/fill.d.ts +6 -0
- package/dist/types/embroidery/geom.d.ts +19 -0
- package/dist/types/embroidery/pes.d.ts +10 -0
- package/dist/types/embroidery/satin.d.ts +11 -0
- package/dist/types/embroidery/simulate.d.ts +19 -0
- package/dist/types/embroidery/strokeFont.d.ts +20 -0
- package/dist/types/embroidery/svg.d.ts +3 -0
- package/dist/types/embroidery/types.d.ts +70 -0
- package/dist/types/embroidery/units.d.ts +10 -0
- package/dist/types/embroidery/validate.d.ts +22 -0
- package/dist/types/formats/blocks.d.ts +1 -0
- package/dist/types/formats/character.d.ts +1 -0
- package/dist/types/formats/cmf.d.ts +1 -0
- package/dist/types/formats/fli.d.ts +1 -0
- package/dist/types/formats/fliLimits.d.ts +1 -0
- package/dist/types/formats/game.d.ts +1 -0
- package/dist/types/formats/gif.d.ts +1 -0
- package/dist/types/formats/graphicScripts.d.ts +1 -0
- package/dist/types/formats/map.d.ts +1 -0
- package/dist/types/formats/monster.d.ts +1 -0
- package/dist/types/formats/palette.d.ts +1 -0
- package/dist/types/formats/recording.d.ts +1 -0
- package/dist/types/formats/sound.d.ts +1 -0
- package/dist/types/formats/voc.d.ts +1 -0
- package/dist/types/gifShrink.d.ts +8 -0
- package/dist/types/image/animatedGif.d.ts +9 -0
- package/dist/types/image/surface.d.ts +26 -0
- package/dist/types/images.d.ts +13 -0
- package/dist/types/kit/actors.d.ts +7 -0
- package/dist/types/kit/align.d.ts +93 -0
- package/dist/types/kit/audioEvents.d.ts +26 -0
- package/dist/types/kit/blit.d.ts +20 -0
- package/dist/types/kit/blockRoles.d.ts +243 -0
- package/dist/types/{games/kit → kit}/clips.d.ts +1 -1
- package/dist/types/kit/coverPaint.d.ts +7 -0
- package/dist/types/kit/disk.d.ts +15 -0
- package/dist/types/kit/fadeOut.d.ts +12 -0
- package/dist/types/kit/fliClips.d.ts +32 -0
- package/dist/types/kit/fliShrink.d.ts +149 -0
- package/dist/types/{games/kit → kit}/gameSim.d.ts +9 -5
- package/dist/types/kit/hopBot.d.ts +72 -0
- package/dist/types/kit/laserClearance.d.ts +16 -0
- package/dist/types/kit/laserJoints.d.ts +39 -0
- package/dist/types/kit/laserLayout.d.ts +54 -0
- package/dist/types/kit/laserPixels.d.ts +52 -0
- package/dist/types/kit/laserPreview.d.ts +9 -0
- package/dist/types/kit/laserSvg.d.ts +35 -0
- package/dist/types/kit/levelGen/castle.d.ts +17 -0
- package/dist/types/kit/levelGen/dungeon.d.ts +11 -0
- package/dist/types/kit/levelGen/forest.d.ts +17 -0
- package/dist/types/kit/levelGen/furnish.d.ts +31 -0
- package/dist/types/kit/levelGen/grid.d.ts +46 -0
- package/dist/types/kit/levelGen/index.d.ts +138 -0
- package/dist/types/kit/levelGen/interior.d.ts +18 -0
- package/dist/types/kit/levelGen/jumpModel.d.ts +78 -0
- package/dist/types/kit/levelGen/needs.d.ts +44 -0
- package/dist/types/kit/levelGen/overworld.d.ts +21 -0
- package/dist/types/kit/levelGen/platform.d.ts +59 -0
- package/dist/types/kit/levelGen/platformCap.d.ts +13 -0
- package/dist/types/kit/levelGen/platformReach.d.ts +37 -0
- package/dist/types/kit/levelGen/props.d.ts +37 -0
- package/dist/types/kit/levelGen/town.d.ts +24 -0
- package/dist/types/kit/levelGrid.d.ts +16 -0
- package/dist/types/kit/levelPicture.d.ts +9 -0
- package/dist/types/kit/menuVersion.d.ts +7 -0
- package/dist/types/kit/microText.d.ts +18 -0
- package/dist/types/kit/mumble.d.ts +41 -0
- package/dist/types/kit/music.d.ts +1 -0
- package/dist/types/kit/palMerge.d.ts +10 -0
- package/dist/types/kit/palRamps.d.ts +28 -0
- package/dist/types/kit/pcText.d.ts +19 -0
- package/dist/types/kit/photo.d.ts +69 -0
- package/dist/types/kit/png.d.ts +7 -0
- package/dist/types/kit/quantize.d.ts +20 -0
- package/dist/types/kit/raytrace.d.ts +169 -0
- package/dist/types/kit/recordedDemo.d.ts +1 -0
- package/dist/types/kit/road3d.d.ts +71 -0
- package/dist/types/kit/routeChecks.d.ts +6 -0
- package/dist/types/kit/saveSlots.d.ts +17 -0
- package/dist/types/kit/sceneInit.d.ts +11 -0
- package/dist/types/{games/kit → kit}/sceneSim.d.ts +5 -5
- package/dist/types/kit/screenText.d.ts +3 -0
- package/dist/types/kit/sdftext.d.ts +34 -0
- package/dist/types/kit/shading.d.ts +23 -0
- package/dist/types/kit/shareBlocks.d.ts +20 -0
- package/dist/types/kit/song.d.ts +89 -0
- package/dist/types/kit/songFx.d.ts +99 -0
- package/dist/types/kit/synthParts.d.ts +7 -0
- package/dist/types/kit/tar.d.ts +13 -0
- package/dist/types/kit/textfit.d.ts +74 -0
- package/dist/types/kit/transforms.d.ts +8 -0
- package/dist/types/lookAlike.d.ts +31 -0
- package/dist/types/menuVersionEntry.d.ts +1 -0
- package/dist/types/mesh/colorBodies.d.ts +18 -0
- package/dist/types/mesh/decimate.d.ts +10 -0
- package/dist/types/mesh/fieldTrinket.d.ts +40 -0
- package/dist/types/mesh/figureShapes.d.ts +24 -0
- package/dist/types/mesh/mesh.d.ts +9 -0
- package/dist/types/mesh/meshCheck.d.ts +22 -0
- package/dist/types/mesh/overhang.d.ts +24 -0
- package/dist/types/mesh/pixelFigure.d.ts +41 -0
- package/dist/types/mesh/sampledField.d.ts +3 -0
- package/dist/types/mesh/sdfShapes.d.ts +20 -0
- package/dist/types/mesh/stl.d.ts +9 -0
- package/dist/types/mesh/strokeText.d.ts +8 -0
- package/dist/types/mesh/surfaceNets.d.ts +14 -0
- package/dist/types/mesh/tetraMesh.d.ts +4 -0
- package/dist/types/mesh/threeMf.d.ts +12 -0
- package/dist/types/mesh/trinketKinds.d.ts +72 -0
- package/dist/types/mesh/trinketTool.d.ts +26 -0
- package/dist/types/mesh/voxel.d.ts +10 -0
- package/dist/types/mesh/zipFile.d.ts +13 -0
- package/dist/types/microFont.d.ts +6 -0
- package/dist/types/pack/meshPack.d.ts +26 -0
- package/dist/types/pack/threeMfPack.d.ts +11 -0
- package/dist/types/palettePresetData.d.ts +4 -0
- package/dist/types/palettePresets.d.ts +12 -0
- package/dist/types/paletteReserve.d.ts +52 -0
- package/dist/types/palettes.d.ts +4 -0
- package/dist/types/releaseNotes.d.ts +3 -0
- package/dist/types/simulation.d.ts +6 -0
- package/dist/types/{web/packages/tools/src/text.d.ts → text.d.ts} +6 -6
- package/package.json +145 -15
- package/dist/binary-D7wuaC5g.js +0 -120
- package/dist/pixels-DzfIIUOl.js +0 -76
- package/dist/types/games/kit/blit.d.ts +0 -10
- package/dist/types/games/kit/music.d.ts +0 -1
- package/dist/types/games/kit/pcText.d.ts +0 -8
- package/dist/types/games/kit/shading.d.ts +0 -11
- package/dist/types/web/packages/tools/src/audio.d.ts +0 -3
- package/dist/types/web/packages/tools/src/drawing.d.ts +0 -10
- package/dist/types/web/packages/tools/src/images.d.ts +0 -2
- package/dist/types/web/packages/tools/src/microFont.d.ts +0 -1
- package/dist/types/web/packages/tools/src/simulation.d.ts +0 -3
- package/dist/types/web/scripts/cdGames.d.ts +0 -103
- package/dist/types/web/scripts/gameShots.d.ts +0 -12
- package/dist/types/web/scripts/ogImage.d.ts +0 -21
- package/dist/types/web/src/audio/cmfLoad.d.ts +0 -7
- package/dist/types/web/src/audio/cmfPlayer.d.ts +0 -69
- package/dist/types/web/src/audio/context.d.ts +0 -12
- package/dist/types/web/src/audio/engine.d.ts +0 -39
- package/dist/types/web/src/audio/music.worklet.d.ts +0 -14
- package/dist/types/web/src/audio/opl.d.ts +0 -37
- package/dist/types/web/src/audio/output.d.ts +0 -13
- package/dist/types/web/src/desk/boxes/boxFacts.d.ts +0 -85
- package/dist/types/web/src/dosPlayer/fileExtensions.d.ts +0 -44
- package/dist/types/web/src/dosPlayer/patchRules.d.ts +0 -24
- package/dist/types/web/src/dosPlayer/patchTable.d.ts +0 -80
- package/dist/types/web/src/edition.d.ts +0 -6
- package/dist/types/web/src/eggs/eggState.d.ts +0 -26
- package/dist/types/web/src/eggs/eggs.d.ts +0 -31
- package/dist/types/web/src/engine/character.d.ts +0 -30
- package/dist/types/web/src/engine/funcKeys.d.ts +0 -33
- package/dist/types/web/src/engine/game.d.ts +0 -52
- package/dist/types/web/src/engine/keys.d.ts +0 -17
- package/dist/types/web/src/engine/machine.d.ts +0 -99
- package/dist/types/web/src/engine/menus.d.ts +0 -46
- package/dist/types/web/src/engine/monsters.d.ts +0 -19
- package/dist/types/web/src/engine/playGain.d.ts +0 -11
- package/dist/types/web/src/engine/playerLook.d.ts +0 -26
- package/dist/types/web/src/engine/recorder.d.ts +0 -60
- package/dist/types/web/src/engine/render.d.ts +0 -8
- package/dist/types/web/src/engine/scene.d.ts +0 -156
- package/dist/types/web/src/engine/scroll.d.ts +0 -16
- package/dist/types/web/src/engine/showGraphic.d.ts +0 -39
- package/dist/types/web/src/engine/slowPc.d.ts +0 -62
- package/dist/types/web/src/engine/touch.d.ts +0 -33
- package/dist/types/web/src/engine/world.d.ts +0 -215
- package/dist/types/web/src/export/gameAbout.d.ts +0 -15
- package/dist/types/web/src/formats/binary.d.ts +0 -44
- package/dist/types/web/src/formats/blocks.d.ts +0 -52
- package/dist/types/web/src/formats/character.d.ts +0 -65
- package/dist/types/web/src/formats/cmf.d.ts +0 -33
- package/dist/types/web/src/formats/fli.d.ts +0 -45
- package/dist/types/web/src/formats/fliLimits.d.ts +0 -13
- package/dist/types/web/src/formats/game.d.ts +0 -72
- package/dist/types/web/src/formats/gif.d.ts +0 -15
- package/dist/types/web/src/formats/graphicScripts.d.ts +0 -18
- package/dist/types/web/src/formats/highscore.d.ts +0 -10
- package/dist/types/web/src/formats/map.d.ts +0 -24
- package/dist/types/web/src/formats/monster.d.ts +0 -48
- package/dist/types/web/src/formats/palette.d.ts +0 -15
- package/dist/types/web/src/formats/recording.d.ts +0 -7
- package/dist/types/web/src/formats/sound.d.ts +0 -13
- package/dist/types/web/src/formats/voc.d.ts +0 -13
- package/dist/types/web/src/gfx/cp437Glyphs.d.ts +0 -2
- package/dist/types/web/src/gfx/font8x8.d.ts +0 -2
- package/dist/types/web/src/gfx/levelPicture.d.ts +0 -81
- package/dist/types/web/src/gfx/screen.d.ts +0 -46
- package/dist/types/web/src/gfx/titlePicture.d.ts +0 -21
- package/dist/types/web/src/input/chords.d.ts +0 -22
- package/dist/types/web/src/input/deskMouse.d.ts +0 -14
- package/dist/types/web/src/input/keyboard.d.ts +0 -39
- package/dist/types/web/src/input/scancodes.d.ts +0 -3
- package/dist/types/web/src/manual/printables/types.d.ts +0 -277
- package/dist/types/web/src/project/bizarre.d.ts +0 -28
- package/dist/types/web/src/project/companion.d.ts +0 -35
- package/dist/types/web/src/project/diskFacts.d.ts +0 -30
- package/dist/types/web/src/project/files.d.ts +0 -124
- package/dist/types/web/src/project/gameFiles.d.ts +0 -49
- package/dist/types/web/src/project/gamePack.d.ts +0 -17
- package/dist/types/web/src/project/health.d.ts +0 -30
- package/dist/types/web/src/project/secretGames.d.ts +0 -19
- package/dist/types/web/src/project/storage.d.ts +0 -46
- package/dist/types/web/src/project/streamGame.d.ts +0 -38
- package/dist/types/web/src/project/zip.d.ts +0 -33
- package/dist/types/web/src/retro/dos/disks.d.ts +0 -33
- package/dist/types/web/src/retro/text/cp437.d.ts +0 -4
- package/dist/types/web/src/seededRandom.d.ts +0 -6
- package/dist/types/web/src/tinHearts/deskHearts.d.ts +0 -33
- package/dist/types/web/src/tinHearts/manifest.d.ts +0 -30
- package/dist/types/web/src/tinHearts/tinHearts.d.ts +0 -84
- package/dist/types/web/src/walkthrough/format.d.ts +0 -92
- package/dist/types/web/src/walkthrough/madeUpScores.d.ts +0 -6
- package/dist/types/web/src/walkthrough/runtime.d.ts +0 -134
- /package/dist/types/{web/src/assistant → image}/png.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/palette.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/pixels.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/reel.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/sound.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/textBounds.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/tune.d.ts +0 -0
- /package/dist/types/{web/src/audio → music}/compose.d.ts +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { dist as h, evenly as m, inset as l, area as u, inside as d } from "./geom.js";
|
|
2
|
+
import { tatami as a } from "./fill.js";
|
|
3
|
+
import { satinUnderlay as y, satin as w } from "./satin.js";
|
|
4
|
+
import { DEFAULTS as x } from "./types.js";
|
|
5
|
+
class p {
|
|
6
|
+
constructor(t) {
|
|
7
|
+
this.p = t;
|
|
8
|
+
}
|
|
9
|
+
p;
|
|
10
|
+
out = [];
|
|
11
|
+
at;
|
|
12
|
+
before;
|
|
13
|
+
get pos() {
|
|
14
|
+
return this.at;
|
|
15
|
+
}
|
|
16
|
+
/** Sews to `to`, in pieces no longer than the stitch cap. */
|
|
17
|
+
stitchTo(t) {
|
|
18
|
+
const o = this.at;
|
|
19
|
+
if (!o) throw new Error("stitchTo before moveTo");
|
|
20
|
+
const i = Math.ceil(h(o, t) / this.p.maxStitch);
|
|
21
|
+
for (let s = 1; s <= i; s++) this.out.push({ x: o[0] + (t[0] - o[0]) * s / i, y: o[1] + (t[1] - o[1]) * s / i, cmd: "stitch" });
|
|
22
|
+
this.before = o, this.at = t;
|
|
23
|
+
}
|
|
24
|
+
/** Gets to `to`: a plain stitch when it is within `join` mm (and `ok`), else a trim and a jump, with lock stitches around the cut. */
|
|
25
|
+
moveTo(t, o, i = () => !0) {
|
|
26
|
+
const s = this.at;
|
|
27
|
+
return s && h(s, t) <= o && i(s, t) ? (this.stitchTo(t), !1) : (s && (this.lock(), this.out.push({ x: s[0], y: s[1], cmd: "trim" })), this.out.push({ x: t[0], y: t[1], cmd: "jump" }), this.at = t, this.before = void 0, !0);
|
|
28
|
+
}
|
|
29
|
+
/** Tie-off: two tiny stitches back along the stitching just sewn and out again (not out across the design). */
|
|
30
|
+
lock() {
|
|
31
|
+
this.at && this.before && this.tie(this.at, this.before);
|
|
32
|
+
}
|
|
33
|
+
/** Two short out-and-back stitches from `a` toward `b`, which lie along stitching already there or about to be. */
|
|
34
|
+
tie(t, o) {
|
|
35
|
+
const i = Math.min(0.6, h(t, o) / 2);
|
|
36
|
+
if (i < 0.1) return;
|
|
37
|
+
const s = [t[0] + (o[0] - t[0]) / h(t, o) * i, t[1] + (o[1] - t[1]) / h(t, o) * i];
|
|
38
|
+
for (const c of [s, t, s, t]) this.out.push({ x: c[0], y: c[1], cmd: "stitch" });
|
|
39
|
+
}
|
|
40
|
+
colorChange() {
|
|
41
|
+
const t = this.at;
|
|
42
|
+
t && (this.lock(), this.out.push({ x: t[0], y: t[1], cmd: "trim" }, { x: t[0], y: t[1], cmd: "color" })), this.at = void 0;
|
|
43
|
+
}
|
|
44
|
+
end() {
|
|
45
|
+
const t = this.at;
|
|
46
|
+
t && (this.lock(), this.out.push({ x: t[0], y: t[1], cmd: "trim" }, { x: t[0], y: t[1], cmd: "end" }));
|
|
47
|
+
}
|
|
48
|
+
/** Sews the points in order, starting by getting to the first. */
|
|
49
|
+
sew(t, o, i) {
|
|
50
|
+
if (t.length) {
|
|
51
|
+
this.moveTo(t[0], o, i) && t.length > 1 && this.tie(t[0], t[1]);
|
|
52
|
+
for (let s = 1; s < t.length; s++) this.stitchTo(t[s]);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const f = 3;
|
|
57
|
+
function g(n, t, o) {
|
|
58
|
+
const i = o.fillGrow ? t.polys.map((e) => l(e, -o.fillGrow)) : t.polys, s = i.reduce((e, r) => e + Math.abs(u(r)), 0), c = (e, r) => d(i, [(e[0] + r[0]) / 2, (e[1] + r[1]) / 2]);
|
|
59
|
+
for (const e of i) {
|
|
60
|
+
const r = m(l(e, 0.7), o.underlayRun, !0);
|
|
61
|
+
n.sew(r, f);
|
|
62
|
+
}
|
|
63
|
+
if (s > 60) {
|
|
64
|
+
const e = i.map((r) => l(r, 0.9));
|
|
65
|
+
for (const r of a(e, t.angle + 90, 2.2, o.fillLength)) n.sew(r, o.maxStitch, c);
|
|
66
|
+
}
|
|
67
|
+
for (const e of a(i, t.angle, o.fillSpacing, o.fillLength)) n.sew(e, o.maxStitch, c);
|
|
68
|
+
}
|
|
69
|
+
function k(n, t, o) {
|
|
70
|
+
if (t.kind === "fill") return g(n, t, o);
|
|
71
|
+
if (t.kind === "run") return n.sew(m(t.path, o.underlayRun, t.closed), f);
|
|
72
|
+
const i = t.width + o.pullComp;
|
|
73
|
+
for (const s of y(t.path, i, o.underlayRun, !!t.closed)) n.sew(s, f);
|
|
74
|
+
for (const s of w(t.path, i, o.satinDensity, !!t.closed, o.maxSatin)) n.sew(s, f);
|
|
75
|
+
}
|
|
76
|
+
function E(n, t = {}) {
|
|
77
|
+
const o = { ...x, ...t }, i = new p(o);
|
|
78
|
+
return n.blocks.forEach((s, c) => {
|
|
79
|
+
c && i.colorChange();
|
|
80
|
+
for (const e of s.items) k(i, e, o);
|
|
81
|
+
}), i.end(), { name: n.name, threads: n.blocks.map((s) => s.thread), stitches: i.out };
|
|
82
|
+
}
|
|
83
|
+
export {
|
|
84
|
+
E as compile
|
|
85
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { toRecords as g } from "./units.js";
|
|
2
|
+
const p = [
|
|
3
|
+
// [byte, plus bit, minus bit, weight] for x, then y
|
|
4
|
+
[
|
|
5
|
+
[0, 1, 2, 1],
|
|
6
|
+
[1, 1, 2, 3],
|
|
7
|
+
[0, 4, 8, 9],
|
|
8
|
+
[1, 4, 8, 27],
|
|
9
|
+
[2, 4, 8, 81]
|
|
10
|
+
],
|
|
11
|
+
[
|
|
12
|
+
[0, 128, 64, 1],
|
|
13
|
+
[1, 128, 64, 3],
|
|
14
|
+
[0, 32, 16, 9],
|
|
15
|
+
[1, 32, 16, 27],
|
|
16
|
+
[2, 32, 16, 81]
|
|
17
|
+
]
|
|
18
|
+
];
|
|
19
|
+
function x(a, e, f) {
|
|
20
|
+
const r = [0, 0, 3 | f];
|
|
21
|
+
return [a, e].forEach((c, d) => {
|
|
22
|
+
let n = c;
|
|
23
|
+
for (const [o, i, l, s] of [...p[d]].reverse())
|
|
24
|
+
n > s / 2 ? (r[o] |= i, n -= s) : n < -s / 2 && (r[o] |= l, n += s);
|
|
25
|
+
if (n !== 0) throw new Error(`move ${c} does not fit a DST record`);
|
|
26
|
+
}), r;
|
|
27
|
+
}
|
|
28
|
+
const $ = (a, e) => a.slice(0, e).padEnd(e, " ");
|
|
29
|
+
function M(a) {
|
|
30
|
+
const e = [];
|
|
31
|
+
let f = 0, r = 0, c = 0, d = 0, n = 0, o = 0, i = 0;
|
|
32
|
+
const l = (t, m) => {
|
|
33
|
+
e.push(x(t.dx, t.dy, m)), r += t.dx, c += t.dy, d = Math.min(d, r), n = Math.max(n, r), o = Math.min(o, c), i = Math.max(i, c);
|
|
34
|
+
};
|
|
35
|
+
for (const t of g(a))
|
|
36
|
+
t.cmd === "stitch" ? l(t, 0) : t.cmd === "jump" ? l(t, 128) : t.cmd === "trim" ? (l({ dx: 1, dy: 1 }, 128), l({ dx: -1, dy: -1 }, 128)) : t.cmd === "color" && (e.push([0, 0, 195]), f++);
|
|
37
|
+
e.push([0, 0, 243]);
|
|
38
|
+
const s = [
|
|
39
|
+
`LA:${$(a.name.toUpperCase(), 16)}`,
|
|
40
|
+
`ST:${String(e.length).padStart(7, " ")}`,
|
|
41
|
+
`CO:${String(f).padStart(3, " ")}`,
|
|
42
|
+
`+X:${String(n).padStart(5, " ")}`,
|
|
43
|
+
`-X:${String(-d).padStart(5, " ")}`,
|
|
44
|
+
`+Y:${String(i).padStart(5, " ")}`,
|
|
45
|
+
`-Y:${String(-o).padStart(5, " ")}`,
|
|
46
|
+
`AX:${(r >= 0 ? "+" : "-").concat(String(Math.abs(r)).padStart(5, " "))}`,
|
|
47
|
+
`AY:${(c >= 0 ? "+" : "-").concat(String(Math.abs(c)).padStart(5, " "))}`,
|
|
48
|
+
`MX:+${String(0).padStart(5, " ")}`,
|
|
49
|
+
`MY:+${String(0).padStart(5, " ")}`,
|
|
50
|
+
"PD:******"
|
|
51
|
+
].join("\r"), h = new Uint8Array(512 + e.length * 3);
|
|
52
|
+
h.fill(32, 0, 512);
|
|
53
|
+
for (let t = 0; t < s.length; t++) h[t] = s.charCodeAt(t);
|
|
54
|
+
return h[s.length] = 13, h[s.length + 1] = 26, e.forEach((t, m) => h.set(t, 512 + m * 3)), h;
|
|
55
|
+
}
|
|
56
|
+
function w(a) {
|
|
57
|
+
const e = String.fromCharCode(...a.subarray(0, 512)), f = (o) => Number(new RegExp(`${o}:\\s*(\\d+)`).exec(e)?.[1] ?? NaN), r = [];
|
|
58
|
+
let c = 0, d = 0, n = 0;
|
|
59
|
+
for (let o = 512; o + 2 < a.length; o += 3) {
|
|
60
|
+
const i = [a[o], a[o + 1], a[o + 2]];
|
|
61
|
+
if (i[2] === 243) {
|
|
62
|
+
r.push({ x: d / 10, y: n / 10, cmd: "end" });
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
if (i[2] === 195) {
|
|
66
|
+
c++, r.push({ x: d / 10, y: n / 10, cmd: "color" });
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const l = [0, 0];
|
|
70
|
+
p.forEach((s, h) => {
|
|
71
|
+
for (const [t, m, u, S] of s) l[h] += (i[t] & m ? S : 0) - (i[t] & u ? S : 0);
|
|
72
|
+
}), d += l[0], n += l[1], r.push({ x: d / 10, y: n / 10, cmd: i[2] & 128 ? "jump" : "stitch" });
|
|
73
|
+
}
|
|
74
|
+
return { stitches: r, colorChanges: c, label: e.slice(3, 19).trim(), declared: { stitches: f("ST"), colors: f("CO") } };
|
|
75
|
+
}
|
|
76
|
+
export {
|
|
77
|
+
w as readDst,
|
|
78
|
+
M as writeDst
|
|
79
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { toRecords as u } from "./units.js";
|
|
2
|
+
const r = (c) => c & 255;
|
|
3
|
+
function m(c) {
|
|
4
|
+
const o = [];
|
|
5
|
+
for (const t of u(c, 127))
|
|
6
|
+
t.cmd === "stitch" ? o.push(r(t.dx), r(t.dy)) : t.cmd === "jump" ? o.push(128, 4, r(t.dx), r(t.dy)) : t.cmd === "trim" ? o.push(128, 128, 7, 0) : t.cmd === "color" && o.push(128, 1, 0, 0);
|
|
7
|
+
return Uint8Array.from(o);
|
|
8
|
+
}
|
|
9
|
+
const s = (c) => c > 127 ? c - 256 : c;
|
|
10
|
+
function f(c) {
|
|
11
|
+
const o = [];
|
|
12
|
+
let t = 0, i = 0, n = 0;
|
|
13
|
+
for (let e = 0; e < c.length; ) {
|
|
14
|
+
if (c[e] === 128 && e + 1 < c.length) {
|
|
15
|
+
const d = c[e + 1];
|
|
16
|
+
d === 1 ? (t++, o.push({ x: i / 10, y: n / 10, cmd: "color" })) : d === 4 && e + 3 < c.length ? (i += s(c[e + 2]), n += s(c[e + 3]), o.push({ x: i / 10, y: n / 10, cmd: "jump" })) : d === 128 && o.push({ x: i / 10, y: n / 10, cmd: "trim" }), e += 4;
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
i += s(c[e]), n += s(c[e + 1]), o.push({ x: i / 10, y: n / 10, cmd: "stitch" }), e += 2;
|
|
20
|
+
}
|
|
21
|
+
return o.push({ x: i / 10, y: n / 10, cmd: "end" }), { stitches: o, colorChanges: t };
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
f as readExp,
|
|
25
|
+
m as writeExp
|
|
26
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { rotate as M } from "./geom.js";
|
|
2
|
+
function b(r, l, c) {
|
|
3
|
+
const p = -l * Math.PI / 180, s = r.map((o) => o.map((e) => M(e, p))), n = s.flat().map((o) => o[1]), d = Math.min(...n), x = Math.max(...n), m = [];
|
|
4
|
+
for (let o = d + c / 2; o < x; o += c) {
|
|
5
|
+
const e = [];
|
|
6
|
+
for (const t of s)
|
|
7
|
+
for (let h = 0, u = t.length - 1; h < t.length; u = h++) {
|
|
8
|
+
const f = t[h], a = t[u];
|
|
9
|
+
f[1] > o != a[1] > o && e.push(f[0] + (o - f[1]) * (a[0] - f[0]) / (a[1] - f[1]));
|
|
10
|
+
}
|
|
11
|
+
e.sort((t, h) => t - h);
|
|
12
|
+
const i = [];
|
|
13
|
+
for (let t = 0; t + 1 < e.length; t += 2) e[t + 1] - e[t] > 0.3 && i.push({ x0: e[t], x1: e[t + 1], y: o, done: !1 });
|
|
14
|
+
m.push(i);
|
|
15
|
+
}
|
|
16
|
+
return m;
|
|
17
|
+
}
|
|
18
|
+
function k(r, l, c, p) {
|
|
19
|
+
const s = [r.x0];
|
|
20
|
+
for (let n = (Math.floor(r.x0 / c - p) + 1 + p) * c; n < r.x1; n += c) n - r.x0 > 0.7 && r.x1 - n > 0.7 && s.push(n);
|
|
21
|
+
return s.push(r.x1), l || s.reverse(), s.map((n) => [n, r.y]);
|
|
22
|
+
}
|
|
23
|
+
function I(r, l, c, p) {
|
|
24
|
+
const s = b(r, l, c), n = l * Math.PI / 180, d = [];
|
|
25
|
+
for (let x = 0; x < s.length; x++)
|
|
26
|
+
for (const m of s[x]) {
|
|
27
|
+
if (m.done) continue;
|
|
28
|
+
m.done = !0;
|
|
29
|
+
const o = [];
|
|
30
|
+
let e = m, i = !0;
|
|
31
|
+
for (let t = x; ; t++) {
|
|
32
|
+
o.push(...k(e, i, p, t % 3 / 3));
|
|
33
|
+
const h = o[o.length - 1][0];
|
|
34
|
+
let u, f = 8;
|
|
35
|
+
for (const a of s[t + 1] ?? []) {
|
|
36
|
+
if (a.done) continue;
|
|
37
|
+
const g = Math.abs((i ? a.x1 : a.x0) - h);
|
|
38
|
+
g < f && (f = g, u = a);
|
|
39
|
+
}
|
|
40
|
+
if (!u) break;
|
|
41
|
+
u.done = !0, e = u, i = !i;
|
|
42
|
+
}
|
|
43
|
+
d.push(o.map((t) => M(t, n)));
|
|
44
|
+
}
|
|
45
|
+
return d;
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
I as tatami
|
|
49
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const M = (n, o) => Math.hypot(n[0] - o[0], n[1] - o[1]);
|
|
2
|
+
function y(n, o, a, t = 96) {
|
|
3
|
+
return Array.from({ length: t }, (s, e) => [n + a * Math.cos(e / t * Math.PI * 2), o + a * Math.sin(e / t * Math.PI * 2)]);
|
|
4
|
+
}
|
|
5
|
+
function x(n, o, a, t, s, e = Math.PI / 2) {
|
|
6
|
+
const c = [];
|
|
7
|
+
for (let r = 0; r < s * 2; r++) {
|
|
8
|
+
const h = e + r * Math.PI / s, l = r % 2 ? a : t;
|
|
9
|
+
c.push([n + l * Math.cos(h), o + l * Math.sin(h)]);
|
|
10
|
+
}
|
|
11
|
+
return c;
|
|
12
|
+
}
|
|
13
|
+
function I(n, o, a, t, s, e, c = 16) {
|
|
14
|
+
return Array.from({ length: c + 1 }, (r, h) => {
|
|
15
|
+
const l = s + (e - s) * h / c;
|
|
16
|
+
return [n + a * Math.cos(l), o + t * Math.sin(l)];
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function m(n) {
|
|
20
|
+
let o = 0;
|
|
21
|
+
for (let a = 0; a < n.length; a++) {
|
|
22
|
+
const t = n[a], s = n[(a + 1) % n.length];
|
|
23
|
+
o += t[0] * s[1] - s[0] * t[1];
|
|
24
|
+
}
|
|
25
|
+
return o / 2;
|
|
26
|
+
}
|
|
27
|
+
function P(n, o) {
|
|
28
|
+
const a = m(n) >= 0 ? 1 : -1, t = n.length, s = (e, c) => {
|
|
29
|
+
const r = M(e, c) || 1;
|
|
30
|
+
return [-(c[1] - e[1]) / r * a, (c[0] - e[0]) / r * a];
|
|
31
|
+
};
|
|
32
|
+
return n.map((e, c) => {
|
|
33
|
+
const r = s(n[(c + t - 1) % t], e), h = s(e, n[(c + 1) % t]), l = 1 + r[0] * h[0] + r[1] * h[1];
|
|
34
|
+
let u = r[0] + h[0], i = r[1] + h[1];
|
|
35
|
+
l < 0.2 ? (u = r[0], i = r[1]) : (u /= l, i /= l);
|
|
36
|
+
const f = Math.hypot(u, i), g = Math.min(1, 2.5 / (f || 1));
|
|
37
|
+
return [e[0] + u * o * g, e[1] + i * o * g];
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function k(n, o) {
|
|
41
|
+
let a = !1;
|
|
42
|
+
for (const t of n)
|
|
43
|
+
for (let s = 0, e = t.length - 1; s < t.length; e = s++) {
|
|
44
|
+
const c = t[s], r = t[e];
|
|
45
|
+
c[1] > o[1] != r[1] > o[1] && o[0] < (r[0] - c[0]) * (o[1] - c[1]) / (r[1] - c[1]) + c[0] && (a = !a);
|
|
46
|
+
}
|
|
47
|
+
return a;
|
|
48
|
+
}
|
|
49
|
+
function d(n, o, a = !1) {
|
|
50
|
+
const t = a ? [...n, n[0]] : n, s = [t[0]];
|
|
51
|
+
for (let e = 1; e < t.length; e++) {
|
|
52
|
+
const c = t[e - 1], r = t[e], h = Math.max(1, Math.ceil(M(c, r) / o));
|
|
53
|
+
for (let l = 1; l <= h; l++) s.push([c[0] + (r[0] - c[0]) * l / h, c[1] + (r[1] - c[1]) * l / h]);
|
|
54
|
+
}
|
|
55
|
+
return s;
|
|
56
|
+
}
|
|
57
|
+
function A(n, o, a = !1) {
|
|
58
|
+
const t = a ? [...n, n[0]] : n, s = [0];
|
|
59
|
+
for (let l = 1; l < t.length; l++) s.push(s[l - 1] + M(t[l - 1], t[l]));
|
|
60
|
+
const e = s[s.length - 1], c = Math.max(1, Math.round(e / o)), r = [];
|
|
61
|
+
let h = 1;
|
|
62
|
+
for (let l = 0; l <= c; l++) {
|
|
63
|
+
const u = e * l / c;
|
|
64
|
+
for (; h < t.length - 1 && s[h] < u; ) h++;
|
|
65
|
+
const i = s[h] - s[h - 1] || 1, f = (u - s[h - 1]) / i;
|
|
66
|
+
r.push([t[h - 1][0] + (t[h][0] - t[h - 1][0]) * f, t[h - 1][1] + (t[h][1] - t[h - 1][1]) * f]);
|
|
67
|
+
}
|
|
68
|
+
return r;
|
|
69
|
+
}
|
|
70
|
+
const _ = (n, o) => [n[0] * Math.cos(o) - n[1] * Math.sin(o), n[0] * Math.sin(o) + n[1] * Math.cos(o)];
|
|
71
|
+
export {
|
|
72
|
+
I as arc,
|
|
73
|
+
m as area,
|
|
74
|
+
y as circle,
|
|
75
|
+
M as dist,
|
|
76
|
+
A as evenly,
|
|
77
|
+
P as inset,
|
|
78
|
+
k as inside,
|
|
79
|
+
d as resample,
|
|
80
|
+
_ as rotate,
|
|
81
|
+
x as star
|
|
82
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { toRecords as C } from "./units.js";
|
|
2
|
+
const y = 48, M = 38;
|
|
3
|
+
function A(e, w) {
|
|
4
|
+
const [l, i, x, c] = w, n = Math.min((y - 4) / Math.max(1, x - l), (M - 4) / Math.max(1, c - i)), d = (y - (x - l) * n) / 2 - l * n, o = (M - (c - i) * n) / 2 - i * n, f = new Uint8Array(y * M);
|
|
5
|
+
for (const [r, h, m, u] of e) {
|
|
6
|
+
const p = Math.max(1, Math.ceil(Math.hypot(m - r, u - h) * n));
|
|
7
|
+
for (let t = 0; t <= p; t++) {
|
|
8
|
+
const a = Math.round(d + (r + (m - r) * t / p) * n), g = Math.round(o + (h + (u - h) * t / p) * n);
|
|
9
|
+
a >= 0 && a < y && g >= 0 && g < M && (f[g * y + a] = 1);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const s = [];
|
|
13
|
+
for (let r = 0; r < M; r++)
|
|
14
|
+
for (let h = 0; h < y / 8; h++) s.push(Array.from({ length: 8 }, (m, u) => f[r * y + h * 8 + u] << 7 - u).reduce((m, u) => m | u, 0));
|
|
15
|
+
return s;
|
|
16
|
+
}
|
|
17
|
+
function b(e) {
|
|
18
|
+
const w = C(e, 2047), l = [], i = [[]];
|
|
19
|
+
let x = 2, c = 0, n = 0, d = !1;
|
|
20
|
+
const o = { x0: 0, y0: 0, x1: 0, y1: 0 }, f = (t, a) => l.push(128 | a | t >> 8 & 15, t & 255);
|
|
21
|
+
for (const t of w)
|
|
22
|
+
if (t.cmd === "color")
|
|
23
|
+
l.push(254, 176, x), x = x === 2 ? 1 : 2, i.push([]);
|
|
24
|
+
else if (t.cmd === "trim")
|
|
25
|
+
d = !0;
|
|
26
|
+
else if (t.cmd === "end")
|
|
27
|
+
l.push(255);
|
|
28
|
+
else {
|
|
29
|
+
const a = -t.dy;
|
|
30
|
+
if (t.cmd === "jump") {
|
|
31
|
+
const g = d ? 32 : 16;
|
|
32
|
+
f(t.dx & 4095, g), f(a & 4095, g);
|
|
33
|
+
} else t.dx >= -64 && t.dx <= 63 && a >= -64 && a <= 63 ? l.push(t.dx & 127, a & 127) : (f(t.dx & 4095, 0), f(a & 4095, 0));
|
|
34
|
+
t.cmd === "jump" ? d = !1 : i[i.length - 1].push([c, n, c + t.dx, n + a]), c += t.dx, n += a, o.x0 = Math.min(o.x0, c), o.x1 = Math.max(o.x1, c), o.y0 = Math.min(o.y0, n), o.y1 = Math.max(o.y1, n);
|
|
35
|
+
}
|
|
36
|
+
const s = [];
|
|
37
|
+
for (((t) => [...t].forEach((a) => s.push(a.charCodeAt(0))))(`LA:${e.name.slice(0, 16).padEnd(16, " ")}`), s.push(13), s.push(...Array(12).fill(32), 255, 0, 6, M, ...Array(12).fill(32)), s.push(e.threads.length - 1, ...e.threads.map((t) => t.pec ?? 20)); s.length < 464; ) s.push(32);
|
|
38
|
+
const h = s.length + 2, m = [o.x0, o.y0, o.x1, o.y1];
|
|
39
|
+
s.push(0, 0, 0, 0, 0), s.push(49, 255, 240);
|
|
40
|
+
const u = (t) => s.push(t & 255, t >> 8 & 255);
|
|
41
|
+
u(o.x1 - o.x0), u(o.y1 - o.y0), u(480), u(432), s.push((36864 | -o.x0) >> 8 & 255, (36864 | -o.x0) & 255, (36864 | -o.y0) >> 8 & 255, (36864 | -o.y0) & 255), s.push(...l);
|
|
42
|
+
const p = s.length - 464;
|
|
43
|
+
s[h] = p & 255, s[h + 1] = p >> 8 & 255, s[h + 2] = p >> 16 & 255, s.push(...A(i.flat(), m));
|
|
44
|
+
for (const t of i) s.push(...A(t, m));
|
|
45
|
+
return Uint8Array.from([..."#PES0001"].map((t) => t.charCodeAt(0)).concat([22, 0, 0, 0, 1, 0, 1, 0, 1, 0, 255, 255, 0, 0], s));
|
|
46
|
+
}
|
|
47
|
+
function v(e) {
|
|
48
|
+
const w = new DataView(e.buffer, e.byteOffset, e.byteLength);
|
|
49
|
+
if (String.fromCharCode(...e.subarray(0, 8)) !== "#PES0001") throw new Error("not a PES v1 file");
|
|
50
|
+
const l = w.getUint32(8, !0), i = String.fromCharCode(...e.subarray(l + 3, l + 19)).trim(), x = e[l + 48] + 1;
|
|
51
|
+
let c = l + 464 + 20;
|
|
52
|
+
const n = [];
|
|
53
|
+
let d = 0, o = 0, f = 0;
|
|
54
|
+
const s = () => {
|
|
55
|
+
const r = e[c];
|
|
56
|
+
if (r & 128) {
|
|
57
|
+
let h = (r & 15) << 8 | e[c + 1];
|
|
58
|
+
return h & 2048 && (h -= 4096), c += 2, { v: h, flag: r & 48 };
|
|
59
|
+
}
|
|
60
|
+
return c++, { v: r >= 64 ? r - 128 : r, flag: 0 };
|
|
61
|
+
};
|
|
62
|
+
for (; c < e.length; ) {
|
|
63
|
+
if (e[c] === 255) {
|
|
64
|
+
n.push({ x: o / 10, y: f / 10, cmd: "end" });
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
if (e[c] === 254) {
|
|
68
|
+
d++, n.push({ x: o / 10, y: f / 10, cmd: "color" }), c += 3;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const r = s(), h = s();
|
|
72
|
+
o += r.v, f -= h.v, n.push({ x: o / 10, y: f / 10, cmd: r.flag ? "jump" : "stitch" });
|
|
73
|
+
}
|
|
74
|
+
return { stitches: n, colorChanges: d, threads: x, label: i };
|
|
75
|
+
}
|
|
76
|
+
export {
|
|
77
|
+
v as readPes,
|
|
78
|
+
b as writePes
|
|
79
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { evenly as x } from "./geom.js";
|
|
2
|
+
const l = 2;
|
|
3
|
+
function k(a, s, r, c) {
|
|
4
|
+
const e = x(a, r, c), n = e.length;
|
|
5
|
+
return e.map((u, o) => {
|
|
6
|
+
const f = e[c ? (o + n - 1 - l) % (n - 1) : Math.max(0, o - l)], t = e[c ? (o + l) % (n - 1) : Math.min(n - 1, o + l)], h = Math.hypot(t[0] - f[0], t[1] - f[1]) || 1, m = -(t[1] - f[1]) / h * (s / 2), M = (t[0] - f[0]) / h * (s / 2);
|
|
7
|
+
return [
|
|
8
|
+
[u[0] + m, u[1] + M],
|
|
9
|
+
[u[0] - m, u[1] - M]
|
|
10
|
+
];
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function y(a, s, r, c, e, n) {
|
|
14
|
+
const u = k(a, s, r, c), o = (t, h) => [t[0][0] + (t[1][0] - t[0][0]) * (0.5 - h), t[0][1] + (t[1][1] - t[0][1]) * (0.5 - h)], f = [];
|
|
15
|
+
return u.forEach((t, h) => f.push(o(t, h % 2 ? n : e))), f;
|
|
16
|
+
}
|
|
17
|
+
function p(a, s, r, c, e) {
|
|
18
|
+
const n = Math.max(1, Math.ceil(s / e - 1e-9)), u = [];
|
|
19
|
+
for (let o = 0; o < n; o++) u.push(y(a, s, r, c, -0.5 + o / n, -0.5 + (o + 1) / n));
|
|
20
|
+
return u;
|
|
21
|
+
}
|
|
22
|
+
function O(a, s, r, c) {
|
|
23
|
+
const n = [x(a, r, c)];
|
|
24
|
+
return s > 2 && n.push(y(a, s - 0.8, r * 0.7, c, -0.5, 0.5)), n;
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
p as satin,
|
|
28
|
+
O as satinUnderlay
|
|
29
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const d = (x) => Math.max(0, Math.min(255, x));
|
|
2
|
+
function E(x, c) {
|
|
3
|
+
const n = Math.round(c.size * c.pxPerMm), l = new Uint8Array(n * n * 3), p = c.backing ?? [214, 208, 196];
|
|
4
|
+
for (let t = 0; t < n; t++)
|
|
5
|
+
for (let o = 0; o < n; o++) {
|
|
6
|
+
const s = ((o >> 1) + (t >> 1) & 1) * 5 + (o * 7 + t * 13) % 5;
|
|
7
|
+
l.set([d(p[0] - s), d(p[1] - s), d(p[2] - s)], (t * n + o) * 3);
|
|
8
|
+
}
|
|
9
|
+
const h = (c.thread ?? 0.42) * c.pxPerMm / 2, [w, z] = c.center ?? [0, 0], k = (t) => (t - w + c.size / 2) * c.pxPerMm, j = (t) => (c.size / 2 - (t - z)) * c.pxPerMm;
|
|
10
|
+
let u = 0, a = 0, e = 0;
|
|
11
|
+
for (const t of x.stitches) {
|
|
12
|
+
if (t.cmd === "color" && u++, t.cmd !== "stitch" && t.cmd !== "jump") continue;
|
|
13
|
+
const o = k(t.x), s = j(t.y);
|
|
14
|
+
if (t.cmd === "stitch") {
|
|
15
|
+
const v = x.threads[u].rgb, A = Math.max(0, Math.floor(Math.min(a, o) - h - 1)), U = Math.min(n - 1, Math.ceil(Math.max(a, o) + h + 1)), q = Math.max(0, Math.floor(Math.min(e, s) - h - 1)), B = Math.min(n - 1, Math.ceil(Math.max(e, s) + h + 1)), f = o - a, y = s - e, C = f * f + y * y || 1;
|
|
16
|
+
for (let i = q; i <= B; i++)
|
|
17
|
+
for (let m = A; m <= U; m++) {
|
|
18
|
+
const b = Math.max(0, Math.min(1, ((m + 0.5 - a) * f + (i + 0.5 - e) * y) / C)), r = Math.hypot(m + 0.5 - (a + f * b), i + 0.5 - (e + y * b)) / h;
|
|
19
|
+
if (r > 1) continue;
|
|
20
|
+
const D = 1.18 - 0.55 * r * r, P = (i * n + m) * 3, g = r > 0.8 ? (1 - r) / 0.2 : 1;
|
|
21
|
+
for (let M = 0; M < 3; M++) l[P + M] = d(l[P + M] * (1 - g) + v[M] * D * g);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
a = o, e = s;
|
|
25
|
+
}
|
|
26
|
+
return { w: n, h: n, rgb: l };
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
E as simulate
|
|
30
|
+
};
|