592 Commits
Author SHA1 Message Date
Hakan SevenandClaude Opus 5.5 43a1d3ebf6 Cargo: codec 04b26f2, kernel 16059db, graph e7f8b45
#1617 pinned the codec at ramox81/cadcodec through a [patch] block. Its
codec PR (#83) is merged upstream together with #85 and #86, so every
manifest now pins the upstream revision and the patch is gone.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 09:30:22 +03:00
ramox81andClaude Opus 5.5 024101afe8 Name the center mark/line action body in the associative data rows
The codec now reads AcDbCenterMarkActionBody and AcDbCenterLineActionBody
as a SmartCenterActionBody variant; the Properties associative-data rows
label it "Center Mark/Line Action". The codec dependency is patched to the
fork commit that adds the variant.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 09:30:22 +03:00
Hakan Seven 7d5ee91665 Release v2026.40.1 2026-10-05 16:07:00 +03:00
Hakan SevenandClaude Opus 5.5 4cfcc9dc38 chore: bump codec fe69506, kernel ae28f66, graph 892f942
The codec writes R2018 AuxHeader maintenance fields as RL, so AutoCAD no
longer reads a 2018 save as student-made. The kernel drops zero-area
spikes before triangulating, so a hatch whose boundary folds back on
itself fills on screen instead of vanishing.

Fixes #1564
Fixes #1569

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-04 20:44:08 +03:00
github-actions[bot] 8e122a4e34 Release v2026.40 2026-10-04 16:40:44 +00:00
Hakan SevenandClaude Opus 5.5 54a4a02d62 Merge PR #1589 from ramox81/codex/history-frame-lift: centre-framed boxes and wedges; no double transform after ACIS lift
The PR pinned codec and kernel to its fork through [patch]; codec #77 and
kernel #73 are merged upstream, so the patch sections are replaced by
the upstream pins (codec 8d23408, kernel d22a270, graph 9b5ae39) in this
same commit: the kernel now applies the body transform during the lift,
and an OCS without this PR's change would apply it twice. The new codec
also brings AssocCurveValue, registered with the plugin API's type
registry, and EmbeddedEntity::Body, named as a polyline profile.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 20:08:19 +03:00
ramox81andClaude Opus 5.5 07facf465c fix(solids): box and wedge histories framed at the bounding-box centre; no second transform after ACIS lift
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 15:10:37 +03:00
Hakan Seven 0de1e91f99 Merge PR #1585 from ramox81/codex/field-command: FIELD command and Field dialog; attribute definition field buttons
The PR pinned the codec to its fork through [patch]; codec #75 is merged
upstream and main already points at it, so the patch section is dropped.
The two windows-sys features it adds (Globalization, Identity) stay.
2026-10-02 14:14:15 +03:00
Hakan SevenandClaude Opus 5.5 2c7e4355b5 chore: bump codec d96e3fa, kernel 9cdd36d, graph 10d0858
Codec PRs #75 (field authoring API) and #76 (solid history evaluation
graphs, ACSH layouts); kernel PR #71 (sweep history with a placed profile).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 14:09:23 +03:00
ramox81andClaude Opus 5.5 a735b10b34 feat(field): Formula, Hyperlink and plot fields; local-time field dates, file times and display name; header dates on save
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 12:38:49 +03:00
ramox81 762cf1e7e4 Merge remote-tracking branch 'origin/main' into codex/field-command
# Conflicts:
#	src/ui/window/attdef_dialog.rs
2026-10-02 10:46:53 +03:00
Hakan SevenandClaude Opus 5.5 558b5f6526 fix(attdef): SVG dialog buttons, upper-case tags from Properties, Cargo.toml blank line
#1574's dialog drew its pick, close, field and editor buttons with glyph
text (⌖ × ƒ …) that renders as tofu where the font lacks it; they use the
snap and close SVG icons and plain ASCII now. A tag set from Properties is
stored upper case like one from the dialogs, and the stray blank line the
PR left in Cargo.toml is gone.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 10:20:34 +03:00
ramox81andClaude Opus 5.5 f830084be7 FIELD: codec field fixes, six-decimal real system variables
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 10:14:54 +03:00
ramox81andClaude Opus 5.5 87211f4654 FIELD: Field dialog, FIELD command and the ATTDEF field buttons
A Field dialog with the fields the application evaluates and the
reference format choices, FIELD placing a field as multi-line text, the
attribute definition dialogs' field buttons, field attachment on commit,
system variable / file size / regional date providers for field
evaluation, and the codec patch with the field authoring API.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 09:56:54 +03:00
ramox81 53f2983e9c Merge remote-tracking branch 'origin/main' into codex/attdef-parity
# Conflicts:
#	Cargo.lock
#	src/modules/draw/draw/attdef.rs
2026-10-02 09:09:21 +03:00
Karim Jerbi 02c470aac7 feat(pdf): searchable text layer with per-style subset font embedding
Real BT/Tj text objects ride alongside the vector outlines (Tr 3,
zero visual change): runs preserved at layout time, TTF styles embedded
as allsorts subsets with ToUnicode, width-matched Tm, clip-culled.
WireModel literals moved to ..Default::default() tails.
2026-10-01 23:30:35 +01:00
Hakan SevenandClaude Opus 5.5 443b935a3f chore: bump codec d28fd71, kernel a03e4f0, graph 79bdc4b
Codec: PRs #71-#74 merged (MPOLYGON layout, multiline ATTDEF/ATTRIB DXF,
DXF MATERIAL/ACSH matrix, restorable SAT/SAB + history roots) and issues
#55 #64-#69 fixed. EntityType now boxes Surface, Extended, Table,
MultiLeader and Helix (2344 B -> 848 B per entity): construction sites
wrap in Box, the entity traits forward through Box, and the python
plugin generator converts with into(). Kernel: PR #70 (cuboid ring
winding).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 00:08:55 +03:00
Hakan SevenandClaude Opus 5.5 f08eb77b97 chore: bump kernel 8b4980b, graph 5384cbe (#1563 boolean speed)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-01 20:23:19 +03:00
Hakan SevenandClaude Opus 5.5 c8caac2e10 chore: bump kernel 605612f, graph efe8b2c (#1563 booleans)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-01 16:19:05 +03:00
ramox81andClaude Opus 5.5 c5790c74a9 ATTDEF: dialog, -ATTDEF prompts, tag display, Properties and ribbon
Attribute Definition dialog and Edit Attribute Definition dialog, -ATTDEF
with the reference prompts and modes (AFLAGS), tag shown in the drawing,
justification-aware grips, reworked Properties with validation, Home Block
slide-out and Insert Block Definition panel, and the codec patch for
ATTDEF DXF output and the R2013+ solid wire cache.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-01 13:55:32 +03:00
Hakan SevenandClaude Opus 5.5 9fc4e381b3 chore: bump kernel 7d106bf, graph 9c3af92 (#1563 booleans)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-01 10:38:32 +03:00
Hakan SevenandClaude Opus 5.5 3dcebf0dc6 Merge pull request #1553 from ramox81/codex/pointcloud-attach
Point clouds: drawn from their scans, attached, cropped and stylized.

The fork's codec patch is resolved to the upstream pins: the point cloud
records landed in opencadcodec 5ef9376, carried through opencadkernel
68eeda1 and opencadgraph e204966.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-01 01:49:25 +03:00
Hakan SevenandClaude Opus 5.5 0aefc5ff79 chore: bump kernel c637716, graph dd40a10 (#1563 folding tool)
Every face of the #1563 folding tool draws (balls bounded only by slits,
periodic spline edges stored reversed), and its bearings, hubs, washers
and shafts union and subtract: coaxial torus/sphere/cone intersections,
ray casts through tori and whole-surface faces, annulus imprints.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-01 01:20:21 +03:00
Hakan SevenandClaude Opus 5.5 9c4aa5f896 chore: bump codec fe3984f, kernel 9300a30, graph 5260f33 (condominium solids draw every face)
The #1538 drawing's solids now draw every face: extrusion, sum and
offset surfaces and summary-only intcurves are read, vertex blends are
filled over their boundary, and the mesher closes boundaries fitted to a
few thousandths, notched cylinders and torus bands.

Fixes #1538

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-30 18:59:27 +03:00
Hakan SevenandClaude Opus 5.5 74c48ff5e3 chore: bump opencadkernel to ea5f291, opencadgraph to 60e7aef
Brings the #1538 NURBS face fixes: reversed intcurves, period-folded
explicit pcurves, and pcurves cut to their edge instead of dropped.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-30 17:54:35 +03:00
Karim Jerbi 046196a5d5 perf(cargo): tune dev and test profiles for faster linking and smaller binaries
Sets debug = 1 on dev and test profiles to emit line tables only, reducing debug executable sizes by ~50% (~700 MB per binary) and substantially cutting linker memory overhead and disk I/O.

Sets opt-level = 2 on external dependencies in dev mode ([profile.dev.package.*]) so cached third-party libraries run optimized without affecting developer code compilation speeds, improving test execution speed by ~4.6x.

Release mode ([profile.release]) remains completely untouched with full -O3 optimizations.
2026-09-30 15:16:10 +01:00
Karim Jerbi 53ff62fc3d test: consolidate integration test suites into a single test runner
Disables Cargo's automatic test target discovery (autotests = false) and gathers all 24 integration test suites under a single integration test target in tests/integration.rs.

This reduces the number of separate integration test binaries from 24 to 1 across all platforms, eliminating redundant linker invocations and peak memory pressure during cargo test while significantly improving build and test times.
2026-09-30 14:23:42 +01:00
Hakan SevenandClaude Opus 5.5 47f3e2e8ef fix(solids): a 3D drawing with bad pcurves opens instead of hanging
Two causes behind the load stalling at the scene-cache step:

- Solids were fitted to the ACIS header's first tolerance-line value,
  which is the millimetres-per-unit scale (25.4 in this inch drawing,
  1 in most), not a tolerance. It is now resabs, the second value.
- The kernel (37b6902) drops pcurves that miss their edge and caps the pcurve
  walk, so a solid carrying a bad pcurve no longer refines an edge
  hundreds of thousands of times. Graph b741bd6.

The attached drawing now meshes all 76 solids in 3.4 s (release) and
opens in 19 s in a debug build.

Fixes #1538

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-30 15:55:28 +03:00
ramox81andClaude Opus 5.5 09e9e44c19 Point clouds: scan and region visibility in the cloud record
The manager's switches write the cloud's hidden scans (by the scan
identifier its project and scan file carry) and hidden regions (the
unassigned points are region 0), as the reference stores them, instead
of extended data. A parent switch shows mixed while some of its rows
are on. A cloud that shows none of its points draws its extents box.
The codec reads and writes both lists.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-30 15:38:45 +03:00
Hakan SevenandClaude Opus 5.5 6dbdeb62e8 chore: bump codec 54e6fa1, kernel 019d3b1, graph 455c878 (DXF shape-file styles)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-30 14:19:51 +03:00
ramox81 3afd547e28 Merge remote-tracking branch 'origin/main' into codex/pointcloud-attach
# Conflicts:
#	Cargo.lock
2026-09-30 09:15:26 +03:00
Hakan SevenandClaude Opus 5.5 7ea5c3d459 chore: bump codec 8464e0a, kernel 7dc1e79, graph 2e40a7b (ellipse transform)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-29 22:58:12 +03:00
ramox81andClaude Opus 5.5 e9c4e501db Point clouds: drawn from their scans, placed, cropped and attached as the reference does
Scans (.rcs) and projects (.rcp) are read and their points drawn as
screen-sized dots, coloured by the cloud's stylization. The cloud's
placement carries its scale and rotation; its extents and crops stay in
the scan's coordinates. A missing scan shows the extents with the saved
path. -POINTCLOUDATTACH / POINTCLOUDATTACH, POINTCLOUDCROP and the
POINTCLOUD* settings follow the reference's prompts and messages, the
Properties list is the reference's, and a locked cloud is left alone by
edits.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-29 17:08:46 +03:00
Hakan SevenandClaude Opus 5.5 5e8b86df65 chore: bump kernel 52a9ebe, graph 597c8b8 (sphere booleans)
Booleans now cut a sphere wherever the other solid crosses it — box
edges and corners, planes through its centre, another sphere, a
cylinder on its axis — instead of refusing or keeping the wrong piece.
Reported in discussion #1499.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-29 08:07:59 +03:00
Hakan SevenandClaude Opus 5.5 a8aa402fb7 chore: bump codec cdf2277, kernel 8fe5928, graph fc936b6 (#1436 image scale)
Fixes #1436

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 18:16:10 +03:00
Hakan SevenandClaude Opus 5.5 f0526bbe19 chore: bump codec e03eccb, kernel 29e1bec, graph 044998b (#1438 QGIS DXF layouts)
Fixes #1438

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 18:13:23 +03:00
Hakan SevenandClaude Opus 5.5 466a0e6297 chore: bump codec 3b369d0, kernel 131e253, graph 34bc6a0 (#1510 MIF double-byte text)
Fixes #1510

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 17:54:52 +03:00
ramox81 fecbcd8138 Merge remote-tracking branch 'origin/main' into codex/dwf-dgn-underlays
# Conflicts:
#	Cargo.lock
2026-09-28 16:13:14 +03:00
Hakan SevenandClaude Opus 5.5 eac19348d5 refactor(draw): TRIM geometry helpers come from the kernel; drop a probe test
#1511 added an orthogonal ellipse projection and a nearest-end
arc_parameter to draw/modify/geom.rs, the latter shadowing the kernel
function of the same name. Both now live in opencadkernel 237827e and
are re-exported here, so every kernel caller gets them too.

test_coincident_line_and_arc_grip_move only printed values and asserted
nothing; removed.

Pins opencadkernel 237827e, opencadgraph fe36957.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 14:08:36 +03:00
Hakan SevenandClaude Opus 5.5 2e47e1fa95 chore: pin opencadcodec ad16215, opencadkernel 1e02630
Brings in the DWFFRAME/DGNFRAME header variables (codec #63) and robust 2D tangency plus ellipse-circle intersection (kernel #68). Pins opencadcodec ad16215, opencadkernel 1e02630, opencadgraph 7ef5ae4.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 13:45:11 +03:00
ramox81andClaude Opus 5.5 cb7860e50e DWF and DGN underlays: attach, display, snaps, frames and references
DWFATTACH / -DWFATTACH and DGNATTACH / -DGNATTACH attach a DWF / DWFx sheet
or a DGN (V7 or V8) model with the reference's prompts; ATTACH routes the
file types to them. The sheet or model is read into vector paths, drawn as a
transparent underlay raster (contrast, fade, monochrome and background
adjustment apply) and offers its geometry to object snaps. Definitions are
kept in ACAD_DWFDEFINITIONS / ACAD_DGNDEFINITIONS, the External References
palette lists and reloads them, and image textures get line-keeping mip
levels so thin underlay lines stay visible when zoomed out.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 12:53:25 +03:00
Hakan SevenandClaude Opus 5.5 d40e6c8d1d chore(text): English-only comments for the hint-reliant font path
#1506 paired each comment with a Chinese line; the codebase comments in English. Code and test data are unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 11:58:38 +03:00
Hakan Seven ee2a12f778 Merge pull request #1506 from Chrisyeh1983/fix/kaiu-hinting
fix(text): run the TrueType interpreter for hint-reliant fonts (DFKai-SB / MingLiU)
2026-09-28 11:56:45 +03:00
ramox81andClaude Opus 5.5 7f8f8457c7 Frames: state-following ribbon list, DWF/DGN frames, image frame encoding and profile, frame-only picking
- The Frames list shows the drawing's frame state (hide / display and plot /
  display but not plot / frames vary), follows commands, undo and document
  switches, and lists the mixed state as a disabled item.
- DWFFRAME and DGNFRAME are frame variables of their own, kept in the header,
  and FRAME sets them with the others.
- Out-of-range frame values say "Requires an integer between 0 and 2." and
  ask again; a set value reports "Regenerating model.".
- IMAGEFRAME is stored in the image variables as bits (2 is written as 3) and
  a drawing without them uses the profile value, which setting IMAGEFRAME
  updates and the settings file keeps.
- Raster images, PDF underlays and wipeouts are picked on their frame only;
  underlay snap geometry is never picked.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 10:53:53 +03:00
Hakan SevenandClaude Opus 5.5 df2778f466 chore: pin opencadcodec a35f43e (R13/R14 layers plottable)
Brings in bounded object storage on DWG import (#62) and R13/R14 LAYER
records reading as plottable. Pins opencadcodec a35f43e, opencadkernel
ee41029, opencadgraph 8b8c7f3.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 10:13:04 +03:00
Karim Jerbi 7978d1eb2e bench: add COMMANDS suite with EXPLODE metrics
Shares the benchmark harness between both suites, extracts the plan/batch/apply helpers out of the EXPLODE command arm, and adds the command_benchmarks target.
2026-09-28 06:58:47 +01:00
github-actions[bot] c623a01695 Release v2026.39 2026-09-27 16:42:38 +00:00
Chris YehandClaude Opus 5.5 5a36ecda74 fix(text): hint TrueType fonts that need the interpreter (DFKai-SB, MingLiU) before outlining
DFKai-SB (kaiu.ttf), MingLiU and other early DynaLab fonts assemble each
ideograph from stroke components that only the TrueType instructions move
into place. ttf-parser's `outline_glyph` returns the raw, unhinted `glyf`
outline, so these fonts rendered with missing or displaced strokes
('自' drawn as '目'; 範, 直, 啟, 動 broken). FreeType calls them "tricky"
and always runs the interpreter for them.

Every non-test `outline_glyph` call site in ttf_glyph.rs (`glyph`,
`outline_char` - shared by both native fallback paths -, the web
`build_fallback`, and both `build_shaped` variants) now goes through
`outline_glyph_into`; `outline_char` takes the font data and face index
for that. When skrifa's `require_interpreter()` says the face
is hint-reliant, the glyph is hinted with the TrueType interpreter
(Target::Mono) at 512 ppem and scaled back to font units (x upem / 512);
every other font keeps the exact ttf-parser outline. The decision and the
HintingInstance are cached once per face, keyed by (byte length, face
index, head.checkSumAdjustment) because fontdb may hand out a new buffer
per call. The hinted path is recorded first and replayed only on success,
so a failed draw falls back to ttf-parser without a half-drawn glyph.

skrifa 0.42.1 is already in the lockfile (via hayro / glifo).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 21:44:52 +08:00
Hakan SevenandClaude Opus 5.5 b7498b176c chore: pin opencadcodec 42b44d2 (DXF saves polar stretch actions)
Pins opencadcodec 42b44d2, opencadkernel 4e67cd7, opencadgraph d89a9c5.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 13:04:21 +03:00
Hakan SevenandClaude Opus 5.5 315df5cd47 chore: pin opencadcodec 4f7bd51 (merlinnot codec fixes #56-#61)
Brings in: unchanged ACSH extrusion history and DIMASSOC records kept
byte for byte; native dynamic-action field layouts corrected; evaluation
graph expressions written as owned; evaluated block metadata copy;
source class numbers kept on same-version legacy saves; explicit block
attribute flags kept.

The dynamic-action model now names its fields after their native
meaning, so the object summaries read parameter ids, the move offsets'
distance multiplier and the lookup table's columns. The empty
PropertiesTable variant is gone; such tables stay opaque objects.

Pins opencadcodec 4f7bd51, opencadkernel 8186605, opencadgraph 048c9c5.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 07:11:40 +03:00