Disposing a display or geometry object still in use no longer crashes the process. A client
disconnect, a meshed-geometry reset or an app shutdown could take the process down with an access
violation. DispEngine and CubeTree native calls are now gated against
a concurrent dispose, and disposals run serialized on a single background chain —
IsDisposed reports the state and
DisposeBackground enqueues a tree, or a collection of its attachments,
onto that chain.
Large geometry no longer freezes the UI.Solid builds its display
topology off-thread and draws a wire bounding box with a “Loading” mark until it is ready.
ClStrip raises a Cleared event after Clear, pairing with
the existing PosAdded.
A P/Invoke correctness sweep reconciled the managed declarations against the real export table.
It fixed a non-existent export (substraction_ExpandToBox3d), two void natives declared as
struct returns (a garbage register read), two ToString marshals that made the CLR free foreign
memory, and a log-callback delegate nothing rooted against GC — native could call a dead thunk long
after the P/Invoke returned. These are the crashes a user reports as “it crashes randomly”.
Milled step colours no longer go stale at random. Step colours are baked into the native cube-tree
attachment, but the refresh only flagged the strip while the display cache was freed immediately, so a
frame landing in that window rebuilt the cache from stale colours and nothing cleaned it again. The
service now cleans the cache once more after the re-stamp. A paired fix stops an empty strip display
window swallowing a pending recolor indefinitely.
The dimension bar reads on any background. It was a single hard-coded near-black stroke left over
from the light-host era, invisible once the front end went dark. It is now drawn as a wider dark halo
under a white main stroke, with the halo pushed back whole depth steps rather than the white pass
nudged forward by half a depth LSB — which intermittently lost the depth test.
New geometry API.CarveStl is the managed face of the native exact
triangle-CSG container. Add is the boolean-union counterpart of Substract,
returning UnmanagedAddition, and AddBySweepingVolume
mirrors RemoveBySweepingVolume — the geometry-layer symmetric point for additive processes. There is
no deposition step in the machining runner yet, so this is a geometry-level API only.
FreeformBottomContour is the user-editable point-list bottom
contour, mirroring the side contour with the key axis switched to radius.