You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Lid hinge: pick its side, teardrop pin holes, and round pots (PR #1270, Discussion #1220): The hinge always went along the back, so on a box longer than wide it landed on the short side. The lid panel now has Hinge side under Hinge: Back (the default, so existing designs stay as they are), Right, Front or Left; the hinge is worked out with that side turned to the back and its pieces turned back after, so it is the same hinge on every side. Teardrop pin holes (on by default) give each part's holes a 45° point on top as that part is printed, up in the standing body and towards the inside in the lid lying turned over, so the top of the hole does not droop and pinch the pin; the point is cut flat where it would leave less than 0.8 mm of the knuckle. A side without a straight stretch for three knuckles, such as a round pot, now takes the hinge where the wall stays within a knuckle's radius of the hinge's line, the body's knuckles standing on a block that reaches in to the wall; a side too short or too sharply curved still gets a message, which now says so. A printed pin lies on a flat a tenth of its diameter wide. "Hinge at the back" is now "Hinge". MCP: make_lid takes hingeSide and hingeTeardrop. Texts in 14 languages, guide chapter 6 in the nine languages that describe the hinge, all three SKILL.md. Tests in lidHinge.e2e.ts, lidPanelHinge.e2e.ts and lidTool.test.ts. Contributed by @marcus040473.
Align comes up at once with twisted parts, and dragged shapes snap to the workplane centre (Discussion #1266): With two boxes twisted by 180° selected, the align tool took 2 to 3 seconds to show its dots, and as long for every click on one. A twisted part is cut into thin bands each time its mesh is built (about 41,000 points for a 40 mm box twisted by 180°, some 300 ms), and the tool asked for every part's box about twenty times: once for the handles and once more for each of the nine dots' size mode. The boxes are now measured once per part and set of axes and kept while the part is unchanged (alignBounds in alignSize.ts, a WeakMap on the shape object), for the handles, the dots, the preview and the align itself; measured in headless Edge on the dev server, the dots came up after 0.6 to 0.8 s instead of 9.5 s, a click on one after 0.6 to 0.9 s instead of 13.5 s. Dragging a shape on the workplane now also snaps its edges and centre to the workplane's origin, the middle of the plate, with the pink guide lines (Alt drags without snapping); a part snapped there lands on 0, not on a rounding rest. Guide chapter 4 in 15 languages, start page in 19 languages, README. Unit tests in alignSize.test.ts. Asked for by @Cowski4444.
Tapered threads and the NPT pipe threads (Discussion #1267): Threads could only be straight, so the American pipe thread NPT, which seals on its taper, was missing. A thread now has Tapered (1:16, NPT) under its profile: every radius of it narrows 1 in 16 on the diameter, the set diameter being the wide end's. A rod or screw narrows towards its tip at the top, a nut or tapped hole widens towards its mouth at the top, so a tapered rod turned upside down screws into it. The size menu has a new series NPT from 1/16" to 4" (ASME B1.20.1): the pipe's outside diameter, the standard's threads per inch (11.5 from 1" to 2"), the own profile with 60° flanks 0.779 pitch deep (the standard's 0.8 less the crest and root the own profile keeps), and the taper switched on; another size chosen afterwards makes the thread straight again. The tapered thread is an exact body too: since the turns grow and no copy of one fits the next, each half turn is built where it stands, its faces ruled between the tapered helices of the profile's points (taperedHalfTurns in threadSolid.ts), and the chamfers start from the outer diameter at their own end in mesh and body alike; a 20 mm 1/2" NPT rod builds in 2 to 3 s. Saved as threadTaper, taken by layerling_create_shape and layerling_update_object (threadTaper, or threadSize: "1/2\" NPT"). Texts in 14 languages, guide chapter 9 in 15 languages, READMEs, start page and all three SKILL.md. Tests: sizes, the size menu's switching, closed meshes for every role, the taper's direction and amount, and the bridge in threadTaper.test.ts; exact bodies against the mesh for rod, screw, nut and tapped hole, left hand and the 11.5-TPI sizes, in cadThreadTaper.e2e.ts. Asked for by @ffcaptain.
Sketch: type a point's position and a curve handle (Discussion #1250): A curve could only be shaped by dragging its handles or nudging them with the arrow keys, so a curve could not be set to exact numbers or repeated on the other side of a symmetrical sketch. A clicked handle now shows Handle X and Handle Y in the bar: where it lies from its own point, as it is drawn, with Y counting up as in the selection's fields (#1064). Typing a value sets the handle there; on a smooth point the opposite handle turns along, as when it is dragged. A single selected point shows its X and Y from the sketch's origin and moves there when a value is typed. This works for lines curved with Curve line, the Bezier and smooth curve tools and arcs, in the point's bar and in the bar of a curved side; a locked point's fields are greyed out. handleOffset and handleAtOffset in sketchBezierHandles.ts. Texts in 18 languages, guide chapter 7 in 15 languages, README and start page. Unit test in sketchHandleFields.test.ts (offsets, a handle lying on its point, typing, the plate's edge, and that a mirrored handle reads the same Y and the opposite X, as the guide says). Asked for by @KimA998.
Split exactly on a face no longer leaves a brim, and its cut line shows (Discussion #1263): A push-in lid (a 2 mm plate with a 4 mm rim) split at 2 mm gave a rim that kept the plate's whole width as a brim without thickness: the plate's top lay exactly on the plane, and the kernel handed that face to the upper half, joined to the rim, where dropping loose skins could not take it off. The rim then measured 200 mm instead of 196, and grouping it with the plate (here scaled to 224 mm) left stray points on the plate's face. When corners of the body lie on the plane, each half is now cut a thousandth of a millimetre clear of it on its own side and its cut face moved back onto the plane (splitByPlaneClearOfFaces in manifoldSplit.ts); everywhere else it is the plain split as before. The white cut line was missing in the same case, because the plane met the walls only along their edges; those edges are now drawn (splitCutLine.ts). E2e tests in modelSplit.e2e.ts (lid both ways up, a step, a slanted plane, a normal of any length) and a unit test in splitCutLine.test.ts. Reported by @makinglayerschannel.
3MF and OBJ export: parts with some volume are no longer left out as loose pieces (Issue #1258): A logo of several colours came out of the export without its two dots and three planks of its pier, and the notice said "7 tiny loose pieces that a cut had left behind". The filter for such pieces (#352) took any piece of up to 1000 triangles whose edges are not all shared by exactly two triangles for the leftover of a cut, however much it held; the dots hold 4 mm³, the planks 2 to 6 mm³, but where the colour separation cut them their corners did not meet exactly. Such an open piece is now only left out when it holds next to nothing (under half a cubic millimetre, or a thin shard); the same design now loses only its two real slivers. Unit test in meshSplinters.test.ts.
Delete face takes hair-thin faces along (Discussion #451): An STL with bad triangles can come out of Make exact with hair-thin faces between faces that lie in one plane, so that one side is a row of strips; the strips could not be deleted without those faces, and those are too narrow to click. A face narrower than 0.05 mm (twice its area over its perimeter) now goes with a picked face when it touches it and leads on to another face in the picked face's plane, together with the thin faces joined to it that touch a face in that plane too; the tool window counts them as taken along and shows them picked. A thin face between faces in other planes, such as a narrow chamfer or a thread's crest, stays. On a block whose slanted side came out as three strips with two slivers between them, picking the two smaller strips leaves one slanted face. Where the kernel cannot close the gap even so, nothing changes and the window says so, as before. layerling_list_faces marks thin faces and layerling_delete_faces returns the ones taken along; the faces taken along count in the status line's number of deleted faces and in deletedFaceIds. Texts in 19 languages, guide chapter 6 in 15 languages and all three SKILL.md. Tests: the rule in cadThinFaces.test.ts; a mesh made exact with two slivers, their widths and neighbours, the strips refused alone and deleted with the slivers, in cadDeleteFaces.e2e.ts. Contributed by @mlugo-apx.