Commit graph cad-editor/Cargo.lock
Author SHA1 Message Date
Hakan Seven
bd5f9436ea Merge pull request #852 from ramox81/codex/complete-hatch-workflow 2026-08-21 21:02:14 +03:00
Hakan Seven
b648000e78 Merge pull request #850 from ramox81/codex/associative-center-mark 2026-08-21 20:19:54 +03:00
ramox81
f83037271c Complete hatch creation and editing workflow 2026-08-21 12:57:19 +03:00
ramox81
ff09fc7800 Implement associative center mark workflow 2026-08-21 12:05:18 +03:00
ramox81
0ae6355c2c Correct shared center settings behavior 2026-08-21 11:46:12 +03:00
ramox81
eba4fb87a8 Complete associative centerline workflow 2026-08-21 11:01:18 +03:00
ramox81
17dc0aff39 Complete 2D solid workflow 2026-08-21 10:14:26 +03:00
Hakan Seven
6317de2caa chore(release): prepare v0.9.7 2026-08-21 00:33:49 +03:00
Hakan Seven
464971969c feat: complete freehand sketch workflow
Co-authored-by: ramox81 <184937705+ramox81@users.noreply.github.com>
2026-08-21 00:17:44 +03:00
Hakan Seven
44efb8fd53 feat(frame): complete frame controls
Preserve frame geometry for selection while separating viewport and plot visibility across supported reference entities.

Refs #642
2026-08-20 23:37:02 +03:00
Hakan Seven
2a852f4479 feat(gradient): align editing and rendering 2026-08-20 21:17:10 +03:00
ramox81
b7819481f0 Complete wipeout workflow and editing 2026-08-20 17:56:11 +03:00
ramox81
e3bfbf1590 Complete freehand sketch workflow 2026-08-20 16:31:22 +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
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
ramox81
1a6b61fb3a Correct spline property value semantics 2026-08-19 16:50:49 +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
2d2ea97613 chore(release): prepare v0.9.6 2026-08-15 23:33:18 +03:00
Hakan Seven
d36134900d chore: update workspace dependencies 2026-08-15 23:11:21 +03:00
Hakan Seven
f247d15f6e feat(plugin): harden V4 host integration
Preserve legacy wire indices and route concurrent V4 responses and background requests by correlation and stable tab ID.
2026-08-15 20:17:43 +03:00
Hakan Seven
6cc1bf9755 fix(layer): centralize rename flow 2026-08-15 19:56:35 +03:00
Hakan Seven
7a8da58d55 feat(hatch): add multi-region selection
Refs #532
2026-08-13 17:16:29 +03:00
Hakan Seven
5b9fffdfba fix(hatch): clip fill with kernel mesh
Resolve boundary topology before rendering so corner-aligned pattern rows cannot flip shader parity. Chunk indexed geometry to device buffer limits and retain the texture compatibility transport.

Refs #489
2026-08-13 00:29:03 +03:00
Hakan Seven
1045283082 build: update geometry dependencies 2026-08-12 19:49:47 +03:00
Hakan Seven
5e8221f8f1 perf(render): keep solid meshes resident
Keep all solid geometry GPU-resident during navigation. Use vertex-rate instancing, compact untextured vertices, vertex-cache ordering, and cached silhouette sources without culling geometry.
2026-08-12 16:02:10 +03:00
Hakan Seven
ca331fff48 fix(render): scale solid tessellation
Derive one drawing-space chordal tolerance so large curves stay smooth while small solids avoid excessive detail.
2026-08-12 12:46:17 +03:00
Hakan Seven
c4dfa7567d fix(model): correct primitive creation and grips 2026-08-12 00:03:27 +03:00
Hakan Seven
4ac10187c2 fix(model): preserve solid history lifecycle 2026-08-11 20:10:23 +03:00
Hakan Seven
ea8dd24865 build: update cadkernel history service 2026-08-11 19:55:56 +03:00
Hakan Seven
e37b77e426 feat(model): persist solid creation history 2026-08-11 19:52:17 +03:00
Hakan Seven
6cafea92bc fix(web): preserve DWG render state
Carry rendering fields omitted by document serialization and normalize block origins before building web caches.
2026-08-11 17:16:46 +03:00
Hakan Seven
7775e3d2c9 chore(release): prepare v0.9.5 2026-08-11 13:18:51 +03:00
Hakan Seven
de6f6c933b fix(acis): use kernel angle policy 2026-08-11 12:49:20 +03:00
Hakan Seven
c00ee3d924 fix(acis): use source fit tolerance 2026-08-11 10:17:22 +03:00
Hakan Seven
22a294c705 build(deps): update cadkernel revision 2026-08-10 21:14:53 +03:00
Hakan Seven
3b6a4d1c4e build(deps): update cadkernel revision 2026-08-10 19:29:12 +03:00
Hakan Seven
873c36beb3 build(deps): update cadkernel revision 2026-08-10 16:32:26 +03:00
Hakan Seven
ac8183ec91 refactor(cad): use direct stack dependencies 2026-08-10 15:03:31 +03:00
Hakan Seven
3b4fbabdba build: update acadifc revision 2026-08-10 14:13:43 +03:00
Hakan Seven
5a9de73096 build: update acadifc revision 2026-08-10 12:46:23 +03:00
Hakan Seven
96be8214f9 feat(tess): use angular sampling
Route curve, hatch, sweep, loft, surface, edge, and isoline tessellation through the shared kernel policy.
2026-08-10 12:12:16 +03:00
Hakan Seven
dc998fe46b refactor(tess): move solid sampling to kernel
Remove local face, edge, spline, sweep, loft, and silhouette
samplers. Meshes and overlays share the kernel tolerance and edge
schedule.
2026-08-10 10:18:53 +03:00
Hakan Seven
60f5bca0d4 fix(tess): sample a solid's faces as finely as the edges drawn over them
The shaded surface of a curved solid was visibly coarser than its own
wireframe: the wire ran along the true rim while the facets cut inside it.

Two things were wrong, and only one was the tolerance.

`facet_res` is a resolution multiplier — the same one `scale_lod` divides the
fallback sampler's chord fraction by — and the kernel path was using it as a
sag in world units. At the default that asks for a whole unit of departure, so
nothing smaller than a metre subdivided at all and a face was only ever as
round as its own boundary. It is a fraction of each surface's own radius now,
which carries no assumption about the drawing's units.

And it is the *edges'* fraction, shared from `EDGE_CHORD_FRAC` rather than
copied. Those edges are drawn over these faces; sampling the two differently
is what put the wire across a facet instead of along its corners. `facet_res`
is deliberately not applied either, since the edges it must line up with are
built once at highest detail and never scaled.

A torus is measured by its tube rather than its ring — the tube is the tighter
bend, and sampling to the ring leaves the section a hexagon.

The primitive-volume test claimed a mesh can never read over its true size.
That holds for a convex solid, where every chord lies inside; a torus is not
one, and across the inside of its tube the chords fall outside the material.
It passed before only because the sampling was too coarse to show it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 03:17:12 +03:00
Hakan Seven
7c9366e362 fix(acis): read a lifted body at a tolerance a real file can meet
Faces were being dropped for sitting a nanometre off their own plane.

An edge is shared by two faces and in a real file cannot lie exactly on both:
the two surfaces were fitted separately and written to finite precision. Asked
for exactness, the kernel decides the edge is not on its plane, declines to
project it, and the face goes undrawn — silently, since a face that cannot be
expressed is reported as absent rather than as an error.

A micrometre in a drawing measured in metres recovers twenty-six walls of one
building. Loosening further buys almost nothing — a hundredth of this finds
one more face in sixty thousand — and past that it would start accepting
geometry that really is wrong, so it stops here.

With the tube fix that came with the kernel bump, VILLA_NEU_IFC3.dwg now
meshes 59015 of its 59033 faces, from 58922.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 02:23:58 +03:00
Hakan Seven
60ec29375f chore: take the kernel and codec that draw the missing faces
Two faults kept faces out of a lifted solid, and both looked like a document
problem rather than a reader one — the lift reported no loss at all.

An edge's stored parameter pair can span the right length from the wrong
place, putting a straight curve beside the face it bounds instead of along
it. And a loop's coedges are not always listed in the order the ring runs,
which the old chaining could not fix: it reversed the next piece in the list,
where what was needed was a different piece.

Either one leaves a ring that crosses itself, which ear clipping declines, so
the face is dropped without a word.

Handle 176 of Annotation-2D-Mesh-Solid-BIM.dwg now meshes all fourteen of its
faces, where it managed ten. Across that file: 105 of 107 solids complete, 865
of 867 faces. Across VILLA_NEU_IFC3.dwg: 672 of 763 solids, 58922 of 59033
faces.

The fallback sampler stays until that reaches all of them — a complete mesh is
what stops it running, and 111 faces still need it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 02:12:06 +03:00
Hakan Seven
13d3c7d803 chore: take the kernel with the outer-ring fix
Faces with holes were drawing the hole filled and the material around it
missing. Handle 176 in Annotation-2D-Mesh-Solid-BIM.dwg is one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 01:45:12 +03:00
Hakan Seven
f14ef54528 fix(build): restore the no-default-features build, and drop lzma-sys
Two things the truck removal broke without saying so, both found by auditing
what is left in the manifest rather than by anything failing.

The cfg gate on `acis_export` ended up on `acad_to_render` instead, when that
module was put back after being deleted by mistake. `acad_to_render` is what
every entity converts through, so gating it left the wasm build — which is
what `--no-default-features` stands in for — unable to resolve it from thirty
places. It built at the commit before the migration and builds again now.

And deleting TRUCK_CHORD_FRAC took the constant but left its doc comment and
its `#[cfg]` behind, so the attribute landed on the next constant down and
gated a boundary-sampling tolerance that has nothing to do with solids.

lzma-sys was the last dependency in the manifest with nothing using it: no
code references it and nothing else in the tree pulls it in. The `solid3d`
feature it hung off still gates four places, so the feature stays.

Everything else declared is used. `getrandom` and `iced_widget` look unused
by grep and are not — the first is declared to turn on the feature the wasm
target needs from a crate half the tree pulls in, and the second is a
`[patch]` entry rather than a dependency at all.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 01:22:08 +03:00
Hakan Seven
8c7ebdc9f1 refactor: drop truck, and evaluate every curve through the kernel
The last four truck crates are gone from the manifest. What they were doing
falls into three parts, and each now has one answer instead of two.

NURBS evaluation. truck was carrying B-spline curves and surfaces for the
SPLINE entity, hatch boundaries, BLEND's endpoint frames, the spline preview
and ACIS spline-surface faces. The kernel now has both, over one de Boor
written across however many coordinates a control point holds — so a plane
curve and a space curve cannot drift apart, and a surface is the same
algorithm applied twice. The rational and the polynomial cases stop being
separate types: weights absent means polynomial.

The entity conversion. Every LINE, ARC, ELLIPSE, SPLINE and polyline was
built into truck topology purely so it could be sampled back into points.
They are sampled through `entities::curve` now, which is where each one's
geometry is already defined once and what EXTRUDE and REVOLVE read — so a
circle drawn on screen and a circle handed to the Model tab come from the
same definition. That retires four of TruckObject's variants and the module
is renamed for what it does.

SWEEP and LOFT. Both only ever produced a mesh, so both are built from point
lists: a band of quads per span, and a lid where a profile closes. Lofting
profiles of different densities resamples them by distance rather than by
index, so a circle lofted to a square no longer twists.

Two things worth noting for anyone reading the old comments. The tolerance
globals that lived in the tessellation module were never about truck at all —
they are the per-frame chord height, and they move to `curve_tol`. And the
rule that a profile handed over as `Lines` silently broke EXTRUDE and REVOLVE
no longer holds: those read the curve directly and never look at this channel.

The two `automation` test failures are unchanged from before this and are not
caused by it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 01:08:50 +03:00