Skip to content

layerling 1.114.0

Choose a tag to compare

@henmedia henmedia released this 27 Oct 08:30
· 1404 commits to main since this release
  • A mesh with many triangles and the hole pattern ask instead of refusing (#941): The edge tool refused a mesh above the triangle limit (CAD_MODIFIER_PREPARE_TRIANGLE_LIMIT), and the hole pattern refused more than 400 holes. Both limits are where the work turns slow, not walls: whoever knows their machine can now go on after a clear warning that it may take many minutes, that the page can freeze and that unsaved work is lost, so the design should be saved first. For the edge tool a thread stays refused, since it has a better way. In the hole pattern the confirmed switch Allow more holes raises the limit to 3000 holes (HOLE_PATTERN_MANY_HOLES, allowMany). Texts in English, German, Czech, French, Dutch, Russian and Slovenian; unit test in holePattern.test.ts.
  • Tape measure: the crosshair replaces the hand while a point is dragged (#943): The grabbing hand hid the very point the tape measure's end was being moved to. While a point is dragged the cursor is now the crosshair, which shows where it lands.
  • "Make default" is kept on the server too: The settings saved with "Make default" lived only in the browser's storage, so after clearing it, or in another browser, a new design started with the built-in settings again, also in the Docker version with its projects folder. Where the installation has a server store (LAYERLING_SHARED_PROJECTS_DIR or the store folder of store.php), the default now also goes there, as .settings/default.json in a hidden folder the start page does not list (?settings=default on both, GET and POST, a JSON object of at most 256 KB, same-origin writes only). The start page fetches it when it loads and makes it the browser's default, so the last one saved in any browser wins; a browser whose default predates this sends its own up when the store has none yet. A new design waits for that answer as it waits for the server's other answers (serverWorkspaceDefault.ts, serverAnswerGate in page.tsx). Without a store nothing changes. Unit tests for the Node route and the sync; tried in the editor with a store: a cleared browser got the default back, a new design started with it, and "Make default" sent a change to the store. store.php tried with PHP's built-in server. Asked for by a Docker user by mail.
  • A block with a threaded hole can be filleted (#938): A 40 x 20 x 20 block grouped with an M6 threaded hole through it could not be rounded or chamfered: "The grouped body could not be repaired into valid geometry". The cut itself was valid, but merging its faces afterwards (simplify, unifySameDomain) broke it when the hole's chamfer was as long as its pitch, which is what a new threaded hole has (1 mm chamfer, 1 mm pitch); a chamfer of 0.9 or 1.05 mm was fine. The merge now keeps the cut as it was when it would make the body invalid (tidiedIfValid in cadFuzzyCut.ts). A kernel test (threadHoleInGroup.e2e.ts) checks chamfers of 1, 0.9, 1.05 and 0.5 mm; with the user's own file the group lists its edges and takes a fillet. Reported by @kenehlert1959 on GitHub.
  • The "f" of Rounded has no spur on its crossbar (#916): The outline of the "f" in the Rounded typeface (optimer) leaves the end of its crossbar for a point 4 units above it and comes back, so it touches itself; at 40 mm wide a triangle of about 0.1 mm hung there in the silhouette and the footprint DXF, and a CAM program may treat a self-touching outline differently. withGlyphRepairs in textFonts.ts mends that glyph where the typeface is loaded: the curve ends at the crossbar's own edge, a change of three thousandths of the letter height. Reported by @plazmabokor.
  • Japanese: 216 sentences that were missing since 1.97 (PR #936): The Japanese interface gains attachments; Gridfinity (openings, compartments and dividers, label shelves, finger scoops, half-size grid, wall thickness, floor height, baseplate padding, corner radius, drawer size); chamfillet and the variable radius of the edge tool; the workspace switches; dashboard folders; DXF import and export; the key ring tab of name tags; a line from the middle and the sweep anchor in the sketch; and the history view's open group. The wording follows the rest of the translation (short sentences, plain words for children and their teachers); a key ring is now キーホルダー, which also changes two existing sentences. Japanese stands at 3092 of 3134 sentences. Contributed by @yokobond.
  • Japanese: the start page button says "continue the design" (PR #935): The button that opens the last design said 作業平面を続ける, "continue the workplane", which read as if it carried on with the plate the parts stand on. It now says デザインを続ける, with デザイン as everywhere else in the Japanese interface. Contributed by @yokobond.
  • store.php names the real reason an upload fails (#588): A project that PHP refused for its size was reported as "did not arrive completely", whatever the reason. It now says which limit it ran into and what the setting stands at (upload_max_filesize, post_max_size), and gives the other upload errors in words (partial upload, no temporary folder, disk not writable). A too large upload answers with 413, not 400. The README says how to raise the limits, also for the Docker image. Asked for by @foofoodog.
  • A corner radius for Gridfinity bins (#856): A bin's outer corners were always rounded by 3.75 mm, as the specification draws them, so where four bins meet in a drawer they left a hole about 3.8 mm across. A bin now has Corner radius under Magnet holes, 3.75 mm to begin with so existing bins stay as they are, down to 0 for square corners, which leave only the 0.5 mm gaps between the bins. Only the outer wall takes it, from 0.5 mm over the feet up: the feet, the inside and the slopes of the lip a stacked bin rests on keep their rounding, so the bin sits in a baseplate and stacks as before; even on a one-unit bin, which sits down on the slopes of its socket, the square corners start 0.25 mm over the plate's top. Above a square corner the wall ends flat at the lip's top (the bin's top without one), or at the foot of the lip's chamfer, which keeps its rounding. A radius within 0.05 mm of 3.75 is built as 3.75; a baseplate and a tray keep the setting and ignore it, and a bin whose open sides leave every corner square has no row. The view, the exports and the exact body agree. layerling_create_shape, layerling_update_object and layerling_read_scene take and report gridfinityBinCornerRadius. Asked for by @TinkerBarn in #856. Contributed by @mlugo-apx.
  • Brazilian Portuguese: chapter 1 of the guide brought up to date (PR #931): Two new sentences about pasting (and the setting that puts pasted parts in the middle of the workplane), the link text of the Tinkercad tip that was still in English, and "barra de opções" and "projetos" as in the rest of the translation. Contributed by @lmagalhaes.
  • Brazilian Portuguese: 43 sentences from 1.111.0 (PR #929): The interface in Brazilian Portuguese (pt-br) gains the sentences it was missing since 1.111.0 - the attachments panel, "Colar no meio e baixar", "Luz suave", the calculation status lines, "Agrupar cópias" and the Alt+arrow shortcut - and five welcome sentences and two sketch shortcuts are brought up to date with the English. The language stays marked as incomplete until two people have read it. Contributed by @lmagalhaes.
  • STEP export keeps the planes and cylinders of edited bodies: A body with a fillet, chamfer or hollow, or a joined group, goes into the STEP file as the exact body stored with it. That body was placed with brepjs' applyMatrix, whose occt-wasm adapter always takes the general transform, even for a body that was only moved or turned. That turned every face into a B-spline: CAD programs got no planes or cylinders to sketch on or measure, files grew (a 1550-face enclosure came to 5.4 MB), and the kernel's offset failed on such a body or ran for minutes. Stored bodies are now placed as the CAD worker places them (applyCadTransform, moved from cadModifier.worker.ts to cadModifierRuntime.ts): a move, a turn or an even scale stays rigid, and only a stretched body takes the general transform. Profile, thread, spring, gear and Gridfinity bodies use the same helper, so a rigid placement the kernel refuses now falls back as it does in the worker. E2e test in stepRoundTrip.e2e.ts (a moved and turned edited body comes back as planes and a cylinder; a stretched one still exports with the right volume). Found while testing a 3D offset on exported designs.