Commit Graph
4 Commits
Author SHA1 Message Date
NgoQuocViet2001 dddce684e6 fix(circle): offer enclosing solutions for tangent-tangent-radius
A circle of radius r tangent to a circle of radius r_i has its center at
r_i + r (external tangency) or |r_i - r| (internal). ttr_lc_candidates and
ttr_cc_candidates built that second distance as r_i - r and skipped the
combination when it came out negative, so every solution where the new
circle is the larger one and encloses an existing circle was dropped. TTR
over two circles could only ever return externally tangent results.

Only rho^2 reaches the algebra below, so taking the magnitude is enough,
which is how the tan-tan-tan path already computes it.

Fixes #814
2026-08-19 20:30:58 +07:00
NgoQuocViet2001 c88f07d219 fix(io): stop the drawing lock blocking our own reads on Windows
Saving to a path that already holds a drawing fails on Windows with
"could not verify <path> before saving: ... (os error 33)". Save As over any
existing drawing is affected; saving to a new path is not.

EditLease::acquire() opens the destination and takes the platform drawing
lock on it, then the save fingerprints the same path to check nothing changed
underneath. LockFileEx is mandatory and scoped to the handle that took it, so
that second open is refused against our own lock, lands in the non-NotFound
arm and aborts the save. flock on Unix is advisory and the second open
succeeds, so neither CI nor a Linux desktop sees it.

Read through the handle the lease already holds instead. A duplicate shares
the lock ownership, so the pre-replace re-check on the save worker can use
one too rather than re-opening the path.

The same collision reached the headless open op, which read a path this
session may hold leased: automation's save_then_open_round_trips fails on
main for that reason, one line after the save it no longer reaches.
2026-08-17 22:49:54 +07:00
NgoQuocViet2001 319af57711 fix(blocks): don't unit-scale unitless block inserts
A unitless block has no source length to convert from, so falling back to
MEASUREMENT gave it an inches or millimetres identity it never had and
scaled the reference on insert. The properties panel reported unit_factor
1.0 for the same insert.

Skip the conversion when either the block or the drawing is unitless.

Fixes #706.
2026-08-17 00:36:49 +07:00
NgoQuocViet2001 9c6adedc44 fix: keep layer rename state in sync 2026-08-15 15:56:15 +07:00