- Only when you ask or on a brand-new unsaved file: the scene's units become millimetres (1 Blender unit = 1 mm), the default cube, light and camera are deleted, the timeline, outliner and properties editors are closed, the animation/texturing/sculpting workspace tabs are removed (one stock tab is kept as "Full Blender"), Blender's left toolbar is hidden and 3D-view overlays are tidied (3D cursor, extras and object names hidden). Existing
.blendfiles you open are not touched unless you press Tidy workspace or Fix: use millimetres. - Your models: each tool edits the mesh of the models you selected (undo works). Rotation, scale and position are baked into the mesh and the object's origin is put at the centre of its bounding box, so the object's own scale is 1.0.
- Easy mode switches the 3D view to show each shape's own colour, and switches it back when you leave Easy mode.
- Preferences: only if you press Easy navigation (mouse/keyboard settings listed on the button). The installer also saves your preferences once, to switch the add-on on and set the two options you ticked (Easy mode at start-up; Blender's start-up picture hidden). To fill its list it starts each Blender it finds once, without a window, and asks for its version and add-ons folder; nothing is changed until you press Install or Remove.
- It never reads or writes a file you didn't pick in a file dialog.
- It never overwrites the STL you opened (export suggests
<name>_edited.stl). - It contacts no network.
-
Size at import: Blender's own STL importer reads the file; SimpleMesh then multiplies by the unit factor, applies auto-fit (divide by 10 until the longest side fits the bed; ×1000 if under 1 mm), joins duplicate points (distance 0.0001 mm), puts the model on the bed and centres it.
-
Always findable: after a tool changes the size, the viewport's near/far clip distances are recomputed from the model's size (a huge model otherwise lies beyond the far clip, a small one inside the near clip), then Blender's View Selected is run.
-
Auto lay flat: faces are grouped by direction (about 2° bins); the group with the largest total area becomes the face that points down.
-
Cut: a plane splits the mesh (bmesh bisect), the geometry on the unwanted side is removed, and the cut outline is filled with triangles.
-
Combine: Blender's Boolean modifier (exact solver) is evaluated, its result becomes the mesh and the tool objects are deleted.
-
Repair: weld → delete loose edges/points → remove degenerate faces → fill boundary holes → triangulate → recalculate normals outwards.
-
Export: Blender's binary STL exporter with scene-unit scaling turned off, so one Blender unit is written as one millimetre.
-
The click tools: each tool is a Blender "modal operator". While it runs it casts a ray from the mouse into the scene to find the model and face under it, draws the preview (highlighted face, plane, circle, labels) on top of the view, and lets orbit/zoom events through. A click calls the same mesh functions the buttons use, then records one undo step.
-
Lay flat highlight: starting from the triangle under the mouse it collects the connected triangles that face the same way (within 3°); their combined direction is what gets pointed at the bed.
-
Hole: a cylinder is placed at the clicked point along the surface direction (straightened if within 8° of an axis) and subtracted with the exact Boolean; the cylinder is then deleted.
-
Pull: the vertices of the highlighted flat face are moved along the face's direction; the distance comes from where the mouse ray passes closest to that line.
-
The panel (deck.py): drawn with the
gpumodule in a draw handler of the 3D view, below the header rows;top_offsetadds its height so the read-outs and Easy mode's pictures start under it. A small modal operator per window (the "keeper") is started from a timer the first time the panel is drawn and after every file load. For each mouse event it works out whether the pointer is on the panel: a press and release on the same button runs that button (inside a context override for that view); a press on the bare plate is swallowed; everything else is passed through untouched. Tools and Easy mode askover_deckbefore handling an event, so whichever of them was started last (and therefore sees events first) leaves the panel's clicks alone. -
Recovery copies (ui.py): Blender postpones its timed auto-save while any modal operator is running, and the keeper and Easy mode always are. A timer therefore writes
<process id>_autosave.blendinto Blender's temporary folder withwm.save_as_mainfile(copy=True)at Blender's own interval, unless a drag is in progress: a mouse-button press after which none of our event watchers has seen another event (Blender's own stroke, box select or view turn keeps the events), one of our tools dragging, or, on Blender 4.2+, any foreign entry inWindow.modal_operators. -
Log (base.py):
crumb()appends a time-stamped line tosimplemesh-log.txtin Blender's config folder and flushes it; long steps are wrapped inbusy(), which writes a start and an end line and shows the busy pointer. Sessions without a window (the installer) use a separate file. -
Clay: edges longer than twice the Detail size are split until none is left (within a 120,000 triangle budget), which adds points without changing the shape. The budget is strict (when a pass would exceed it only the longest edges are split) and the step stops after six seconds. Blender's Sculpt Mode is then switched on with dynamic topology (constant detail, subdivide only; not above 700,000 triangles), scene-unit brush size, symmetry off and the chosen brush, and an undo step is pushed so that Ctrl+Z after the first stroke takes back only that stroke. The same set-up is run from a short timer when the strip or the read-out is drawn in Sculpt Mode for a model that has not had it (Sculpt Mode entered through Blender's own menus); after switching brush the brush's type is read back, so the strip shows what Blender really uses. On Done, dynamic topology is switched off and a planar "dissolve" (0.5°) merges coplanar triangles; that result is kept only if the model's volume and watertightness are unchanged.
-
Easy mode is one long-running tool that draws its buttons on the 3D view and reads the mouse. Putting a shape down: a ray from the mouse finds the first surface that is not the shape being carried (or the floor), and the shape's bounding box is rested against that surface, sunk in by up to 0.6 mm so that Glue has an overlap to join. The dots scale or turn the shape live and bake the result into the mesh on release. Draw projects the mouse line onto the floor, thins it, keeps the largest loop that does not cross itself (or the hull of the scribble), smooths it once and pushes it up 10 mm. Glue uses Blender's exact Boolean union and checks the result (not more open edges, volume not lost); if that fails the parts are kept as one model unmerged. Colours are Blender object colours and are not saved in an STL.
simplemesh/base.py units, framing, mesh operations, button operators, settings · simplemesh/interactive.py the click tools and on-screen read-outs · simplemesh/easy.py Easy mode · simplemesh/clay.py Clay mode · simplemesh/ui.py strip, pop-ups, start-up. Operators are simplemesh.*; settings live in the add-on preferences and scene.simplemesh.