- Surfaces of revolution follow ISO 10303-42 strictly in reader and writer: the normal is d/d(angle) x d/d(profile), the opposite of truck's revolution, as Fusion reads it (fixes Fusion inverting fillet sphere corners and the dimple). step_orientation_errors flags faces whose loop runs clockwise round their normal; engine, oracle and kernel round trips assert it. - Revolved faces with analytic profiles are written as native PLANE, CYLINDRICAL/CONICAL/SPHERICAL/TOROIDAL surfaces, and the pieces truck splits a revolution into are merged back into one face per surface (with a seam edge for full turns), so face counts match other systems. - A horn torus (tight sweep: tube touching its axis) is written as one rational B-spline face whose loop passes the pole twice, with truck's zero-length pole edges collapsed, instead of a degenerate surface of revolution; the reader starts such figure-eight loops off the pole (Fusion's own part 50 now imports with the right volume). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL
46 lines
2.7 KiB
Markdown
46 lines
2.7 KiB
Markdown
# Vendored third-party crates
|
|
|
|
Copies of third-party crates that SolveCraft builds with local fixes, wired in with
|
|
`[patch.crates-io]` in the workspace `Cargo.toml`. They keep their own licence; changed lines
|
|
are marked `SolveCraft:` in the source.
|
|
|
|
## truck-shapeops 0.4.0 (Apache-2.0, © RICOS Co. Ltd., https://github.com/ricosjp/truck)
|
|
|
|
Changes:
|
|
- `transversal/integrate/mod.rs`: mesh both shells with `robust_triangulation` (faces made by
|
|
earlier booleans have boundaries that lie on their surface only within tolerance).
|
|
- `transversal/divide_face/mod.rs`: when projecting a loop onto a face's surface, fall back to
|
|
the nearest parameter when the exact search fails (intersection curves are approximations).
|
|
- `lib.rs`: `tr!` reports where an operation gives up when `SHAPEOPS_TRACE` is set; compiler
|
|
warnings no longer fail the build.
|
|
|
|
## truck-stepio 0.3.0 (Apache-2.0, © RICOS Co. Ltd., https://github.com/ricosjp/truck)
|
|
|
|
Only the writer (`out`) is used; SolveCraft reads STEP with its own reader.
|
|
|
|
Changes:
|
|
- `out/geometry.rs`: an `INTERSECTION_CURVE`'s second surface was written at the first
|
|
surface's entity index, so every boolean-made edge produced duplicate entity ids.
|
|
- `out/geometry.rs`: surfaces of revolution carry the right `same_sense` for inverted and
|
|
mirrored revolutions (ISO 10303-42 parameterises them by angle then profile, so their normal
|
|
is the opposite of truck's; a mirroring transform reverses it again), and the modeling-surface
|
|
wrapper passes the revolution's sense through instead of always `true`.
|
|
- `lib.rs`: compiler warnings no longer fail the build. Example and test targets are dropped
|
|
(their sources are not vendored).
|
|
|
|
## truck-meshalgo 0.4.0 (Apache-2.0, © RICOS Co. Ltd., https://github.com/ricosjp/truck)
|
|
|
|
Changes:
|
|
- `tessellation/triangulation.rs`: parameter searches that land outside a surface's bounded,
|
|
non-periodic domain are rejected (a hinted B-spline search can run off and extrapolate to
|
|
thousands of parameter units, and meshing that grid never finishes); the last-resort nearest
|
|
search is clamped into the domain.
|
|
- `tessellation/triangulation.rs`, bounded work (hostile files must not hang): edge polylines
|
|
and surface grids come from our own bounded divisions (at most 20 000 points per edge, a
|
|
grid budget per face shared out of 10 million points per shell, 24 refinement rounds; a
|
|
point that does not evaluate counts as flat instead of recursing). Surface grids refine only
|
|
the direction that bends, and a ruling left undivided gets cells comparable to the other
|
|
direction (long triangles from a trim loop to the grid's far ends cut through cylinders).
|
|
- `lib.rs`: compiler warnings no longer fail the build. Example, test and bench targets are
|
|
dropped (their sources are not vendored).
|