feat(solid3d): draw ISOLINES on curved faces in wireframe
A cylinder's wireframe showed only its two rim circles, so from the side it read as two disconnected ellipses rather than a cylinder. AutoCAD draws ISOLINES — a fixed set of longitudinal lines on each curved face — so the surface reads from any angle. `collect_isolines` walks the cone-surface faces (cylinder and cone), recovers each face's height and angular extent with the same logic `tess_cone_face` uses, and emits `header.isolines` (default 4) longitudinal segments from the bottom rim to the top rim. They are appended to the feature-edge line list, so they ride the existing body transform, double-single split, and top-level / per-INSTANCE re-split for free. Being part of `edge_verts`, they inherit the edge pass's gating: drawn in the wireframe modes and in shaded-with-edges, hidden in plain shaded — matching where AutoCAD shows isolines. `isolines` is threaded from the header through the tessellation entry points alongside `facet_res`. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
26e83a90bf
commit
0ce150411a
4 changed files with 115 additions and 22 deletions
|
|
@ -265,12 +265,17 @@ pub fn fallback_wires(e: &EntityType) -> Option<&[acadrust::entities::Wire]> {
|
|||
|
||||
/// Run the appropriate `solid3d_tess::tessellate_*` for the entity,
|
||||
/// returning `None` for non-volume entities or when the kernel fails.
|
||||
pub fn tessellate_volume(e: &EntityType, color: [f32; 4], facet_res: f64) -> Option<MeshLodSet> {
|
||||
pub fn tessellate_volume(
|
||||
e: &EntityType,
|
||||
color: [f32; 4],
|
||||
facet_res: f64,
|
||||
isolines: usize,
|
||||
) -> Option<MeshLodSet> {
|
||||
match e {
|
||||
EntityType::Solid3D(s) => solid3d_tess::tessellate_solid3d(s, color, facet_res),
|
||||
EntityType::Region(r) => solid3d_tess::tessellate_region(r, color, facet_res),
|
||||
EntityType::Body(b) => solid3d_tess::tessellate_body(b, color, facet_res),
|
||||
EntityType::Surface(s) => solid3d_tess::tessellate_surface(s, color, facet_res),
|
||||
EntityType::Solid3D(s) => solid3d_tess::tessellate_solid3d(s, color, facet_res, isolines),
|
||||
EntityType::Region(r) => solid3d_tess::tessellate_region(r, color, facet_res, isolines),
|
||||
EntityType::Body(b) => solid3d_tess::tessellate_body(b, color, facet_res, isolines),
|
||||
EntityType::Surface(s) => solid3d_tess::tessellate_surface(s, color, facet_res, isolines),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue