Skip to content

layerling 1.106.0

Choose a tag to compare

@henmedia henmedia released this 23 Oct 20:57
· 1234 commits to main since this release
  • The store folder is no longer served directly (GHSA-wj5x-5r5v-89r3): Since exports can be saved on the server (#779), store.php writes them into the store folder as they come, and Apache served that folder like any other: an SVG with a script in it, opened by its address, ran on layerling's own address and could reach what a visitor keeps in the browser. The app never opens a file there by its address - projects, preview pictures and exports all go through store.php, and a slicer reads the folder on disk - so the .htaccess that store.php writes into the folder now refuses every direct request (Require all denied, Deny from all on Apache 2.2); an existing store gets it on its next request. The READMEs say how to do the same on nginx and other servers that ignore .htaccess. The Node route and the Docker image keep the folder outside what they serve and are not affected. store.php also accepts DXF for "Save to the server", as the Node route already did. Reported privately by @mlugo-apx, with a reproduction and the fix.
  • Align faces puts holes on one axis (#794): Align faces has a third way, Same axis: click a round face of the part that moves (the inside of a hole, the outside of a pin), then a round face of another part, and Align turns the part the shortest way until the two axes are parallel and slides it straight across onto the other axis, keeping its depth along it - a hole over a hole, a pin in a hole. The axis is read from the triangles alone (roundFaceAxis.ts: the face grows from the clicked facet over neighbours that turn only a little and stand square to the axis, so a sharp rim, a chamfer or a flat face ends it; the direction is the one all its normals stand square to, the centre a least-squares circle through its corners), so it works on imported meshes as well; a flat face, a cone or a curve that is not part of a cylinder is refused with a message. While pointing, the whole round face lights up; the gap slider is hidden in this mode, and a flat face picked before switching is asked for again. The AI bridge's layerling_mate_faces takes mode: "concentric" with facePoint and targetFacePoint (a point on or near each round face, a point on the hole's axis works too) and reports both axes with their diameters. Texts in every language, the guide (chapter Select and arrange, every guide language), the editor's quick guide in every language, the start page, the READMEs, the AI chapter and the three SKILL.md. Unit tests in roundFaceAxis.test.ts (a tilted hole far from the origin, a hole with a chamfer and a flat rim, an eight-sided hole, a flat face and a cone refused, a hole found from its axis through a thin plate and a point on the plate refused, the motion itself); tried in the editor: a pin tilted by 25 degrees clicked onto a bigger cylinder stood upright on its axis at its old height, and through the AI bridge a pin tilted by 30 degrees landed on the axis of a hole in a grouped plate. Asked for by @Grassmedia.
  • The arrow keys change a number (#749): In a number field of the properties you have clicked, [Up] and [Down] now change the value by one step, with Shift a larger step and with Alt a finer one, like the mouse wheel already did (#226), and the value stays selected so you can go on typing. Until now the keys only moved the text cursor. Asked for by @MartinShake.
  • Shift+N shows or hides the notes and points: The notes and reference points could only be shown or hidden with Show notes and points in the Visibility menu (the arrow beside the eye icon). [[Shift]]+[[N]] now does the same, in the 3D editor and in the sketch editor, with the same message at the bottom; [[N]] alone still places a note. [[Ctrl]]+[[N]] was not used because the browser keeps it for a new window. The key is in the shortcut list (Organise group in 3D, Sketch group in a sketch, with a new text shortcuts.toggleNotes in every language), beside the entry in the command search, where the sketch editor now has the entry too, and in the guide (chapters Sketches and Measuring and notes, every guide language that has them). Tried in the editor: in 3D and in an open sketch the key hides and shows the notes and points with the message, N alone still places a note, Ctrl+N stays with the browser, and the command search names Shift+N in both. Contributed by @gogades.
  • A dragged reference point snaps (#799): A reference point you drag, one marked in the middle of a measurement for example, went wherever the pointer was and snapped to nothing, so it could not be put exactly on a corner or an edge. It now snaps to the corners of a body's box, the middles of its 12 edges and the centres of its 6 faces (turned with the body), to a real corner of its mesh and to the other points, the nearest within 10 pixels, and otherwise onto an edge line near the pointer (snapDraggedPoint in WorkplaneViewport.tsx, boxSnapSpots in referencePoints.ts); [[Alt]] held lets it go free. Shapes snapped to points before and still do. The guide (chapter Measuring and notes, German and English) says so. Unit test in referencePoints.test.ts; tried in the editor: a point dragged over a 20 mm cube landed on its corners and edge middles, with Alt where the pointer was. Reported by @makinglayerschannel.
  • A ruler stood up measures along its own direction (#799): The ruler only knew its turn about the vertical axis. Stood up or tipped, it kept measuring along the plate in its old direction: upright beside a 40 x 20 x 20 box turned by 3 degrees it showed 40.99 instead of the height of 20. rulerDimensionMatch now takes the ruler's whole orientation and the height of both middles, so a ruler measures along its axis wherever it points; the number of a tipped ruler stands beside it in the view instead of above the plate, and can be typed when a body axis runs along it. The plus handle that places a copy along the ruler is only there while the ruler lies flat, since the copy lands on the plate. A flat ruler measures as before. Unit tests in rulerDimensions.test.ts; tried in the editor (flat 40.00, turned 3 degrees 40.99, stood up 20.00). Reported by @makinglayerschannel.
  • Video list: Werkplaats Marc's video is replaced by his layerling playlist, which also holds his first tutorial on sketches (tracing a photo, revolve and sweep); Printology's video by his playlist "Layerling CAD Videos" (with a second video on what layerling does beyond Tinkercad), and Print N Repeat's two videos by his playlist "Print by Layer" (tutorials on hinges and threads). New videos in them arrive without a release. In the start page list, the guide in every language, the READMEs and the first post of Discussion #296.
  • Danish brought up to date (#798): 58 new interface texts, and with #803 the four that came with 1.105.0 (status.computing, status.computeTimedOut, workspace.confirmTabClose, workspace.confirmTabCloseHint), so Danish covers every text, and the Danish guide follows the English one in every chapter, with the new chapter on tablet and touch. Contributed by @Henrikth12.
  • A chamfer on the Gridfinity lip (#780): The top of a bin's stacking lip is a sharp edge, as the specification draws it, and taking it off meant picking its edges with the edge tool on every bin. A Gridfinity bin with the lip now has Lip chamfer, from 0 to 1 mm in steps of 0.05, 0 to begin with so existing bins stay sharp. It is the edge tool's chamfer of that size built in, that much off the outer wall and off the slope inside, in the view, the exports and the exact body. Beside an open side the lip's end stays square. A bin stacked on top rests on that slope right up to the top, so the chamfer takes away the top 0.25 mm of the 2.69 mm it rests on at a chamfer of 0.25 mm, and the top 1 mm at 1 mm; the bin still sits 0.35 mm down in the lip and stacks as high as before. The bin keeps its height setting, and its top comes down by 0.71 times the chamfer, 0.18 mm at 0.25 mm and 0.71 mm at 1 mm. The chamfer is built to 0.01 mm. layerling_create_shape, layerling_update_object and layerling_read_scene take and report gridfinityLipChamfer. Asked for by @PJMCL1618033 in #780. Contributed by @mlugo-apx.
  • Center on workplane works on a face (#805): With the workplane laid on a face, "Center on workplane" still centred the selection on the base plate, so a half sphere set on the slope of a wedge slid off it. It now measures the selection along the workplane's own axes (projectShapesExtent) and moves it only along them, so its middle lands on the point picked with [[W]] and it keeps its distance from the face (faceWorkplaneCenteringShift in workplaneCentering.ts); on the base plate nothing changes. The guide (chapter Select and arrange, German and English) says so. Unit test in workplaneCentering.test.ts; tried in the editor: a half sphere pushed 9 mm along the ridge and 6 mm up the slope came back onto the origin, 5 mm off the face as before. Reported by @MethylBromide.
  • Security and library updates: Next.js 15.5.28 closes two advisories in 15.5.27 (GHSA-2464-fhr4-w9xw for the image optimizer with SVG, GHSA-p3m5-59mp-jv5r for server actions); layerling turns image optimization off and has no server actions, so the published site and the Docker image were not open to them, but scanners no longer flag the image. vitest 4.1.12 and vite 8.3.5 for the same reason among the development tools (npm audit finds nothing now), brepjs 18.164.3 and three-mesh-bvh 0.9.16 within their ranges.
  • Docs caught up: The German guide's AI chapter and the German and Dutch READMEs have the section on Gemini and Antigravity the English ones have, and the READMEs list DXF among the imports and exports (in every README language). Two interface texts no code used any more (status.sketchChainCleared, notice.opened) and three unused functions are gone.