Commit Graph
1864 Commits
Author SHA1 Message Date
Hakan Seven 10aac8e9a3 fix(point): keep definition points as dots
Ignore drawing point styles on direct and referenced definition-point layers.\n\nRefs #790
2026-08-20 18:21:13 +03:00
Hakan Seven 76ad642d0c fix(mtext): keep arrows in editor
Route captured arrows to the MText caret only while the hidden command input retains focus.\n\nRefs #655
2026-08-20 17:13:09 +03:00
Hakan Seven bb49f92e99 fix(model): repair solid booleans
Track selection order for directional subtraction and use the kernel fixes for periodic curved-face intersections.\n\nRefs #816
2026-08-20 16:00:20 +03:00
Hakan Seven 4d2c2dbd0f fix(circle): use kernel tangent solutions
Route tangent-tangent-radius construction through cadkernel so enclosing and external tangency share one geometry implementation.

Refs #814
2026-08-20 15:20:07 +03:00
Hakan Seven 5e62da464e fix(properties): preserve literal text
Separate numeric fields from names and content so only numeric property values are evaluated as expressions.

Refs #809
2026-08-20 14:58:12 +03:00
Hakan Seven dcedf945ea feat(spline): correct property semantics
Merge PR #824 while keeping periodic and coplanarity geometry in cadkernel.
2026-08-20 12:13:35 +03:00
Hakan Seven 1c408e3a73 feat(spline): improve fit and CV editing
Keep planar conversions kernel-backed and leave unsupported 3D, CV-to-fit, and closed rebuilds unavailable instead of changing curve data.\n\nRefs #815
2026-08-20 00:18:45 +03:00
Hakan Seven 0f250bb485 feat(ellipse): add complete grip editing 2026-08-19 23:48:13 +03:00
Hakan Seven 8601fd8e4b fix(render): draw block-contained 3D faces 2026-08-19 23:34:10 +03:00
Hakan Seven c8840e2706 fix(web): force WebGL2 backend
Affected Chromium adapters fail after selecting WebGPU even when packed renderer paths are forced. Use WebGL2 for the web app and let device limits select renderer tiers.\n\nRefs #788
2026-08-19 19:04:58 +03:00
ramox81 96e8d75cc5 Separate spline fit and control properties 2026-08-19 17:21:49 +03:00
NgoQuocViet2001 f6f4317b7f fix(point): keep DDPTYPE off dimension definition points
Dimension definition points come out of a DWG as ordinary POINT entities on
the Defpoints layer, so the header's PDMODE applied to them like any other
point. Opening a drawing authored elsewhere with a point style set stamped
that glyph on every dimension end, burying the drawing under crosses and
circles.

They are a dimension's bookkeeping, not draughting the user placed, so
resolve PDMODE to 0 for them and leave the single pixel-sized dot. Both
render paths — the header one and the viewport-aware relative-PDSIZE one —
go through the same resolution, so a relative PDSIZE cannot bring the glyph
back.

Fixes #790
2026-08-19 21:19:34 +07:00
NgoQuocViet2001 c1c8453140 fix(mtext): stop Up/Down walking command history under the editor
The MText editor paints its own caret and is not a focusable widget, so
the command input keeps widget focus behind the dialog. It captures the
arrow itself, which routes the key through CommandLineArrowProbe instead
of ArrowKeyPressed — and that path only asked whether the command input
was focused, never whether an editor was open. Up and Down therefore
walked command history while the user was typing in MText.

Give the probe the same rule ArrowKeyPressed already applies: while the
editor is open the arrow moves its caret. The probe now carries the shift
state so a held Shift still extends the selection on this path.

Fixes #655
2026-08-19 21:12:35 +07:00
ramox81 1a6b61fb3a Correct spline property value semantics 2026-08-19 16:50:49 +03:00
NgoQuocViet2001 67ae0c2803 fix(boolean): give SUBTRACT a deterministic operand order
solid_boolean() collects the selected solids straight out of
scene.selected, a HashSet, and then uses handles[0] and handles[1] as the
two operands. Set iteration order is arbitrary and can differ between
runs, so SUBTRACT — the one non-commutative operation of the three — could
cut either solid out of the other for the same selection.

Sort the pair by handle, so the solid created first is the body the other
is taken out of. UNION and INTERSECT are unaffected.
2026-08-19 20:39:39 +07:00
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 dd9ff89904 fix(expr-eval): don't evaluate identifiers found inside words
The embedded-expression rescan in eval_to_string tries every substring, so
any identifier the evaluator knows is also recognised in the middle of
ordinary text. Because `pi` needs no arguments it resolves anywhere it
appears, and names typed into property or command fields were rewritten:
`ASPIRATORE` came back as `AS3.141592653589793RATORE`.

Require a candidate whose first or last token is an identifier to start,
respectively end, on a word boundary. Leading and trailing numbers stay
unrestricted so mixed input such as `def10*10abc` still evaluates.

Fixes #809
2026-08-19 20:19:54 +07:00
ramox81 df71fa61bd Show effective spline endpoint tangents 2026-08-19 15:54:28 +03:00
ramox81 5595837a69 Align spline properties and editing 2026-08-19 12:00:02 +03:00
ramox81 0d37d3ff78 Improve spline fit and control vertex grips 2026-08-19 11:02:32 +03:00
ramox81 283e6db324 feat(ellipse): add editable arc endpoint grips 2026-08-19 10:02:38 +03:00
ramox81 3f9c3a9e9a fix(ellipse): add symmetric axis grips 2026-08-19 09:28:18 +03:00
Hakan Seven 97a6322e2a fix(web): use compatibility renderer
Chromium can advertise WebGPU limits that its shader path does not reliably support. Keep web builds on the packed/texture pipelines.\n\nRefs #788
2026-08-18 22:35:39 +03:00
Hakan Seven 7c818d15e9 fix(geometry): honor polyline OCS in commands
Route editing and derived geometry through kernel world-space curves.\n\nRefs #797\nRefs #798\nRefs #799
2026-08-18 22:09:48 +03:00
Hakan Seven 08f4cc97f8 feat(zoom): default to window mode
Keep all existing zoom modes available as interactive options.\n\nRefs #804
2026-08-18 20:29:55 +03:00
Hakan Seven f4889d4c70 fix(grid): restore viewport visibility
Draw the grid above opaque GPU surfaces and below interaction overlays.\n\nRefs #789
2026-08-18 20:21:14 +03:00
Hakan Seven f9c3546551 fix(trim): keep retained geometry continuous
Use kernel trim spans so unrelated boundary crossings do not split survivors.
2026-08-18 20:12:30 +03:00
Hakan Seven afd4c96a78 fix(properties): measure bulged polylines
Merge PR #808 and use kernel area, length, and centroid measurements.
2026-08-18 19:50:08 +03:00
Hakan Seven 3a53a110cc fix(properties): hide unsafe MLine geometry
Merge PR #807. MLine vertex fields mutate stored points without rebuilding dependent geometry.
2026-08-18 19:31:58 +03:00
Hakan Seven 5d4a279c1d fix(properties): correct XLine geometry
Merge PR #806 and route point/direction math through the kernel so valid near-zero directions are not rejected by an application tolerance.
2026-08-18 19:21:50 +03:00
ramox81 7687211fbb fix(ellipse): show full end angle as 360
Use kernel closure tolerance so Properties matches geometric classification.
2026-08-18 18:43:16 +03:00
ramox81 c17c25fef1 fix(properties): measure bulged polylines exactly 2026-08-18 16:46:16 +03:00
ramox81 cdd337261f fix(properties): remove MLine geometry section 2026-08-18 16:24:54 +03:00
ramox81 5bd104faab fix(properties): normalize XLine direction edits 2026-08-18 16:09:09 +03:00
ramox81 74c1fe48d8 fix(properties): expose XLine second point 2026-08-18 16:07:35 +03:00
Hakan Seven 403247cbc3 feat(i18n): add Bulgarian locale 2026-08-17 23:45:04 +03:00
Hakan Seven 313349fd71 fix(io): verify saves through edit leases 2026-08-17 23:13:07 +03:00
Hakan Seven 04b9363666 test(plot): verify printer property commands
Use exact platform-specific command expectations.\n\nRefs #773
2026-08-17 22:29:47 +03:00
Ngo Quoc Viet 3a94c37eea fix(plot): open selected printer properties
Open the selected printer's properties on Windows and retain the printer-list fallback.

Refs #773
2026-08-17 22:26:29 +03:00
Hakan Seven ac3392d81b fix(commands): reset selection gestures
Clear held box and lasso input before a new command starts.\n\nRefs #732
2026-08-17 22:16:14 +03:00
Ngo Quoc Viet ba990d440e fix(commands): cancel pending marquee
Cancel a pending selection marquee before starting a non-transparent command.

Refs #732
2026-08-17 22:11:41 +03:00
Hakan Seven 687023391e fix(flatten): project entities through kernel
Invalidate scene caches through entity updates and reject projections
that cannot be represented without changing geometry.

Refs #728
2026-08-17 21:59:09 +03:00
Ngo Quoc Viet 69604012d6 fix(flatten): project polylines and planar faces
Add initial FLATTEN coverage for polyline families, SOLID, and 3DFACE.

Refs #728
2026-08-17 21:40:17 +03:00
Hakan Seven aab30f1b5e fix(blocks): preserve insert unit scaling
Compose unit conversion with authored transforms and attributes. Keep unit-factor display and the full INSUNITS mapping consistent.

Refs #706
2026-08-17 21:32:28 +03:00
Hakan Seven a65ba28270 Merge pull request #776 from NgoQuocViet2001/fix-unitless-block-insert-scale
fix(blocks): don't unit-scale unitless block inserts
2026-08-17 21:17:55 +03: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
Hakan Seven 0b5d4bd311 fix(mtext): honor background contrast
Preserve stored dimension fills and rotate text backgrounds with their labels.

Refs #774
2026-08-16 23:58:17 +03:00
gianlucafiore 252224f546 Merge pull request #778 from gianlucafiore/fix/annotative-mtext-leader
Fix annotative MTEXT attachment alignment
2026-08-16 16:20:45 -03:00
gianlucafiore 3603346a19 fix: keep annotative mtext anchored to insertion point 2026-08-16 16:17:04 -03:00
Hakan Seven 36e0e40b36 perf(raster): avoid needless image resampling 2026-08-16 21:22:58 +03:00