Skip to content

layerling 1.112.0

Choose a tag to compare

@henmedia henmedia released this 26 Oct 15:41
· 478 commits to main since this release
  • Hinge: a knuckle width instead of a count, and a hinge with cones (#907): Two additions for the print-in-place hinge. Knuckle width (max): the knuckles are at most that wide and their number follows from the length (the fewest odd count that is not wider, from 3 up to 31; hingeKnuckleWidth, hingeKnucklesForWidth in hingeGeometry.ts); typing a number of knuckles takes the width away again, and 0 leaves it to the count. Style "With cones" (hingeStyle: "cone"): every other knuckle ends in a cone that nests into a conical recess of the knuckle beside it, 45 degrees, with the clearance all round. There is no pin and no long bridge that could sag, so it prints lying flat; the pin fields are hidden for it. It is a mesh (no chamfers or fillets, and a mesh in STEP, hingeHasExactParts), and it makes fewer knuckles where they would be too short to carry a cone. Both are on the MCP (hingeKnuckleWidth, hingeStyle in layerling_create_shape and layerling_update_object), texts in every language, the guide (Threads and mechanics, every language) says so. Unit tests in hingeGeometry.test.ts (counts from a width, closed and consistently wound bodies in the cone style, the wall between the recesses, fewer knuckles when short); the axis section of the cone hinge looked right. Not tried: a print. Asked for by @MethylBromide.
  • Align handles close to the body, and a body's own name for its export: The line of alignment handles (L) stood 16 % of the selection's largest side beside it, at least 8 mm, so 15 mm and more away from a larger body; it now stands 3 mm beside it (ALIGN_HANDLE_OFFSET in viewportTransformOverlays.ts), and handles that land on one spot are still pushed apart on the screen. The export window started with the design's name even when one body was exported; when exactly one body is exported and somebody gave it a name, that name is suggested now, while a design file (LYL) keeps the design's name and a name typed in the field stays (hasOwnShapeName in shapeCatalog.ts, which leaves out the names the editor hands out such as Box, Group or Hull). A hull now shows its name in the interface language, as a group does. Unit tests in displayShapeName.test.ts. Suggested in the drucktipps3d forum.
  • Choose several designs on the start page and delete them together (#886): Every design had to be deleted by its own menu, one question each, which is slow when many old designs have piled up. The start page now has a Select button above the designs (in the server folder too, beside Refresh): with it on, a click on a card chooses it, shown by a tick and an orange frame, instead of opening it; the bar above the designs says how many are chosen and has Select all (every design the list shows), Select none, Delete and Done; Esc leaves the selection too. Delete asks once for the whole choice ("Do you actually want the 3 selected designs to be deleted?"; for one design it is the old question with its name) and then deletes them, the designs of this browser at once, those of the server folder one after the other, as each needs its own revision, and says how many went. Designs that are moved, deleted or filtered away leave the choice by themselves, and a change of folder or list ends it. Folders cannot be chosen; deleting a folder still moves its designs up. The pure rules are in designSelection.ts (unit tests in designSelection.test.ts), the deleting of several designs in deleteProjects of page.tsx, which the single deletion now uses too; the styles are in dashboardSelect.css and the Graphite theme follows. Texts in English, German, Czech, Dutch, French, Slovenian and Russian; the guide (Files and saving, English and German), the welcome text and the READMEs say so. Tried in the browser: three designs, two chosen and deleted, still gone after a reload. Asked for by @geoffis-coder.
  • Framing square: measures only for the selected bodies (#831): With several bodies at the arms of the framing square, each shows its length and width automatically and the numbers can no longer be told apart. A new button under the square's handle (the arrow) switches that off: then only the selected bodies show measures, the green distances of the selection stay. It is kept with the design like the square's other switches (selectedOnly in cornerRulerStore.ts and the .lyl file), and a new square takes it over from the one before. Texts in every language, the guide (Measuring and notes, every language) says so; the Graphite theme was regenerated for the button. Unit test in cornerRulerStore.test.ts; tried in the editor: the button switches, and the choice is stored; not tried with bodies at the arms. Asked for by @willi1955.
  • A sweep that takes long (#884): Every sketch build had 30 seconds in the CAD kernel. Sweeping a stroked SVG outline with very many points along a path ran past that and stopped with an untranslated "OpenCascade timed out"; the worker then kept working in the background, so the next try waited behind it and timed out as well. A sweep now gets two minutes; a time-out stops the worker and answers every build waiting on it, so the next one starts fresh (requestSketchCad in editorSketchCad.ts, used by extrusion, revolve and sweep); and the message, in every language, says that outlines with very many points take longest and that an SVG exported from its original drawing builds quickly. Tried in the editor: sketch bodies from an SVG build as before. Reported by @KimA998.
  • Bundle panel: the same cards as a group, Multicolor and Hole, and part colours that are no longer lost (PR #890): Selecting a bundle gave a long note and little else, while a group showed the Solid and Hole card, Transparent and Multicolor. A bundle now has the same layout: Solid and Hole (Hole used to be reachable only from the right-click menu), Transparent (T) and Multicolor (Shift+M), then Edit bundle (E) and Separate Parts, which takes a bundle apart as Ctrl+Shift+G does; the note moved below the buttons, and the panel for the parts of a bundle being edited has Transparent too. Multicolor is on for a bundle to begin with, so each part keeps its colour; switched off, the bundle shows in one colour and a 3MF or OBJ export writes its parts in that colour (groupColors.ts, expandBundles). Two losses are fixed for groups and bundles: going from Hole back to Solid sent the group's colour along and painted it onto every part, so a red and yellow group came back all red; and picking a colour did the same, so ticking Multicolor again brought nothing back. colorForParts now keeps the colour on the group and leaves the parts' own; a hull, which is one body, still takes it into its parts. The guide (Shapes and Solids and holes, English and German) says so. Unit tests in groupColors.test.ts. Contributed by @AbhiRoutray21.
  • A widened group keeps its tapered parts' taper when cut (#893): A group stretched one way is opened into its parts when it is cut with a hole, ungrouped, edited or hollowed. Each part's width and depth stretched with it, but a taper and a lean are kept in millimetres and stayed as they were, so a box tapered to 10 x 10 mm on top came back with its 10 mm top on a 60 mm wide body. The taper's top and bottom sizes and the lean now stretch with the part (taperedPartPatch in restoreGroupedChildren), the same way Scale by percent does it. Unit test in groupTaperStretch.test.ts; tried in the editor with the reported steps: the group widened to 60 mm and cut with a hole keeps a 30 mm top. Reported by @rileymake.
  • Sketch editor: reference image, rotate arrows, locks and the 3D editor's habits: The reference image's rotate handle was a round dot on top of the width label and easy to miss; it is now the 3D editor's blue curved arrow, one just outside each corner, and while turning only the arrow you hold shows, the resize handles hide and the angle stands over the pointer. A selection in the sketch has the same corner arrows. A locked image shows a padlock badge that stays visible zoomed in and unlocks and selects the image with one click (Alt+click still works, but many Linux window managers take it); locked points are filled grey, and a selected locked outline keeps its handles, grey and inert with a "not allowed" pointer and a padlock badge that unlocks it, like a locked 3D body. The pointer is a crosshair over the image while calibrating. As in 3D, note mode shows the copy cursor everywhere on the plate, and a double click on the empty plate with nothing selected slides the view to that spot with the same 320 ms ease and the same Double-click centres view setting (useSketchViewSlide.ts). Lock is now Ctrl+L instead of L (L does nothing in the sketch now); Ctrl+A selects every point and line (images left out, as reference images are in 3D); Ctrl+I opens Add Image; Ctrl+H, Ctrl+G and Ctrl+E (and with Shift) no longer reach the browser, where they opened the history, find or the address bar; and the sketch's Ctrl shortcuts go by the letter typed, so they follow the keyboard layout (sketchEditorKeys.ts). The styles of the sketch image moved out of globals.css into sketchImage.css and sketchLock.css, and the Graphite theme follows. Texts in every language; the guide (Sketches, every language) says so. Unit tests in sketchEditorKeys.test.ts and sketchHandleSpots.test.ts. Contributed by @gogades.
  • The sketch of a mirrored body shows its neighbours mirrored (#896): A body mirrored in the 3D view opens in the sketch editor as it was drawn, without the mirroring, while the other bodies shown beside it stood at their places in the design: a block next to one end of a mirrored lettering appeared next to the other end. The bodies around the sketch are now shown mirrored too, about the place of the body's middle in the sketch's own coordinates (sketchReferenceShapeOnWorkplane with mirrorAbout in editorSketchCad.ts; also their cut outlines and edges), for a body mirrored along x, z or both. Unit test in sketchReferenceMirror.test.ts; not tried by hand in the editor. Reported by @Elkniwt.
  • Hollow and the edge tools keep a hull whole (#908): Hollow, fillet and chamfer open a group into its parts so the CAD kernel gets them exactly. A hull was opened that way too, so hollowing a hull of two rounds hollowed the two rounds one by one and the hull was gone; an intersection could not be hollowed at all. A hull or an intersection now goes to the kernel as the one body it is (restoreGroupedChildrenForEdges). Unit test in hullEdgeParts.test.ts; tried in the editor: a hull of a 20 and a 40 mm round hollowed with an open bottom stays one belt-cover shape. Reported by @RobbieKnobbie.
  • A body inside another body of a different colour is no longer lost in the 3MF and OBJ export (#906): The colour-separated export keeps each colour as a body of its own and lets the later shape cut its place out of an earlier one where two colours overlap (Discussion #79), so a logo set into a plate gets its pocket in the plate. A body that lies entirely inside a later one of another colour was cut away to nothing: a text first in the list and wholly inside a group's body was missing from the file, with nothing said, and the slicer saw one object fewer (the mirroring and the font were not the cause). Such a body now stays whole and the later body takes its pocket, as if the text had come last. A body that only reaches into a later one is cut as before. E2e test in colorExportSwallowedBody.e2e.ts; with the file from the report the export writes four bodies, the text with its 1972 triangles and the group with the pocket. Reported by @MethylBromide.
  • Keep proportions also for the size typed on the body (#899): Keep proportions in the properties panel made the other two measures follow a typed one, but the number at a body's edge, clicked and typed into, passed the one measure alone: it applied the held edge first, after which the proportions were no longer worked out. It now keeps the proportions before the held edge, as the panel does, for one body and for a selection's frame; Shift+Enter in that box does the same once without the tick, as Shift does when a corner is dragged. The guide (Shapes, German and English) says so. Tried in the editor on a 20 mm box: 30 with the tick gives 30 x 30 x 30, 40 without it changes the width alone, and 20 with Shift+Enter halves all three. Reported by @KevinGroninga.
  • Seen from below, see-through bodies show through the plate (#894): The plate is drawn before the see-through bodies, so a body above it is not laid over by it. Turned below the plate, the plate stood in front of them instead, and drawn first it hid a see-through body completely, while a solid one showed. From the plate's back side it is now drawn after them (orderPlatesForView in renderFrame.ts, by the side of the plate the camera is on), so they show through it faded; this holds for a workplane on a face and in the second view too. Tried in the editor: a see-through and a solid box seen from below at a slant both show through the plate, and from above nothing changed. Reported by @Elkniwt.
  • European Portuguese, a start (PR #888): "Português de Portugal" (pt-pt) is a language of its own beside Brazilian Portuguese: 686 of the interface's sentences and the guide's first chapter, "Getting started", with the guide's wording for the language (guia-pt-pt). It stays marked as incomplete, so what is missing shows in English, and a browser that asks for pt-PT now gets it instead of English. The tests that listed the guide's languages, the order of the names and the Brazilian fallback were changed to match; the language count in the welcome text and the READMEs is 17 more languages. Contributed by @jcpcustodio.
  • Back up all with large designs (#887): Back up all held every design in memory and then the whole backup once more in one block. With many large designs Safari ran out of memory, reloaded the page and left neither a file nor a word. The backup is now written entry by entry (createBackupWriter in projectBackup.ts, a stored ZIP as before): each design is added and let go, and what is written so far is handed to a Blob the browser may keep outside the page. A design that cannot be read is left out and the message names it with the reason. Before each design the backup notes where it is; if the page is reloaded in the middle, the start page says afterwards at which design it stopped and suggests saving that one on its own or simplifying its largest meshes. Texts in every language; the guide (Files and saving, German and English) says so. Unit test in projectBackup.test.ts (the written ZIP reads back like packBackup's, folders, pictures and an empty folder included). Reported by @TinkerBarn.
  • Reference point in the middle of the face you click (#881): The right-click menu of a body has a new entry, Mark the centre of this face: it puts a reference point in the middle of the flat face the pointer was on, a side or an end, not only on the top as "Mark the centre" does. The middle is that of the whole flat face (every triangle in that plane joined to the one hit, pickFaceCentre in viewportPicking.ts, the same as the rotation pivot takes); a curved surface offers nothing. The tape measure snaps to the point like to a corner, so the centres of two stud ends can be measured, and the framing square gives the horizontal distance apart. The guide (Measuring and notes, every language) says so. Tried in the editor: on the front of a box 40 x 40 x 20 mm at x 30, the point lands at x 30, depth 20, height 10. Asked for by @LarryRB.
  • The tape measure's measurements stay with the design, and can be hidden (#881): The measurements of the tape measure were lost when the page was reloaded or the design opened again. They are now kept with the design like the framing square (lib/tapeStore.ts): in the browser beside it and in the .lyl file (editor.tapeMeasurements: the points, the lines between them and the body each point is fixed to; the format version stays, older readers pass over it). A new eye button among the tape measure's buttons hides all measurements and shows them again; whether they are hidden is kept too, and adding, moving or deleting a measurement shows them first (TapeModel.hidden, syncTapeOverlay). A measurement fixed to a body follows it when the design is opened, and one whose body is gone is dropped as before; a body whose drawing is not built yet no longer makes its measurement go while the design opens (tapeObjectBuilt). A copy of a design (Duplicate) takes the measurements along, and the MCP action layerling_measurements shows or hides them and lists them with their lengths (guide chapter on AI, skill, tool list). Texts in every language, the start page (English and German), the guide (Measuring and notes, every language) and the format description say it. Unit tests in tapeStore.test.ts (file round trip, hidden state, damaged entries); tried in the editor: a measurement comes back after reloading, the eye button hides it, and it stays hidden after another reload; a measurement fixed to a box follows the box when it was moved before the reload, and the MCP bridge answers with the length. Asked for by @LarryRB.
  • A hollowed or filleted body keeps its exact size: After Hollow, a fillet, a chamfer or Delete face the body comes back from the CAD kernel as facets, and its sizes were measured on them: a round side falls a few hundredths short, so a cylinder of 38.7 mm showed 38.69 after hollowing. Typing 38.7 again then stretched the body before the hollowing by that error, turned the round cylinder into an ellipse of 38.715 x 38.7 mm and drifted further with every try. A size, centre or bottom within the facets' reach (twice the mesh deflection, 0.02 to 0.1 mm) of what an unturned body had stays the body's own (shapeFromCadMesh), and the mesh is drawn stretched by that hair onto the true surface. Unit test in cadMeshExactSize.test.ts; tried in the editor: a cylinder of 38.7 x 27 mm hollowed with a 3 mm wall stays 38.7 mm, typing 38.7 changes nothing and 50 mm gives exactly 50. Reported by Jürgen Keller.
  • Gridfinity trays of any size, for board game inserts (#837): A Gridfinity bin is always whole 42 mm units on feet with a stacking lip, so a token tray for a game box, or any tray that need not stand in a baseplate, had to be built by hand from boxes. The Gridfinity shape now has a third type under Type, Tray: Length, Width and Height are free in mm, 10 to 252 mm across and deep and 3 to 140 mm high, and the bottom is flat, with no feet, lip or magnet holes. Everything inside a bin works in a tray as well: the wall thickness, the floor (1.2 mm thick until it is set, up to a solid block), compartments with their dividers and labels, finger scoops, label shelves, open sides and partly open ones. As nothing stacks on a tray, its dividers and label shelves run up to its top, and it takes as many compartments as leave each at least 6 mm wide, up to 24 along a side and 40 in all; label shelves need no height units, only room, as finger scoops on any part. A bin turned into a tray keeps its box, a baseplate turned into one is 20 mm high in the panel, a new tray starts 80 mm wide, 40 mm long and 20 mm high when Tray is the default type in the workspace settings or through the MCP, and a tray turned back into a bin or baseplate is rounded to grid units. Bins and baseplates are built exactly as before. The view, the exports and the exact body agree. layerling_create_shape, layerling_update_object and layerling_read_scene take and report gridfinityType: "tray"; an older version of layerling refuses a project that has a tray. Asked for by @superkrm in #837. Contributed by @mlugo-apx.
  • The Face tool and the hole pattern light a group's whole face, and the pivot goes to its middle: Since 1.111.0 the Face tool and the hole pattern pick a group's whole face, but the pointer still lit one part's face, and a rotation pivot clicked on a group went to the middle of one part's face: on two 20 mm cubes grouped with their middles 7 and 8 mm apart, to the middle of one cube's top at (0, 0) rather than of the whole 644 mm² top at (3.5, 4). The Face tool and the hole pattern now join the parts shortly after they open, without the "Calculating" notice, and light the whole face once the join is there; a click before that waits for it. A pivot click on a group or bundle waits for its own join and goes to the middle of the whole face. On a group or bundle with text in it, or a bundle with a hole among its parts, the pointer lights and the pivot takes one part's face as before. Lay flat, Align faces and a new shape's snap to the middle of a face (#823) still take one part's face. The guide (Select and arrange, in English, German, Dutch, French, Russian, Czech and Slovenian) says so. Unit tests in groupFacePointer.test.ts, rotationPivot.test.ts and geometryWorker.test.ts; tried in the editor: the two cubes' whole top lit once joined without moving the pointer, and the pivot set at (3.5, 4) on the top. Contributed by @mlugo-apx.
  • The face tools no longer freeze the editor on a group: In 1.111.0 the Face tool, the hole pattern, layerling_push_face and layerling_perforate_face started reading a group's face from its parts joined (#878), and the join ran on the page: pushing the top of four overlapping 512-sided cylinders kept a click waiting about half a second, now 0.04 s. The join runs in the geometry worker, with the "Calculating" notice until the face is read; a group with text in it stays on the page, and a read that takes too long says so. Tried in the editor with the worker and with its file blocked: the Face tool and layerling_push_face give the same top of two grouped cubes, 27 x 28 across. Contributed by @mlugo-apx.