From 07facf465c6b42bdec412238c839021ab99eab8b Mon Sep 17 00:00:00 2001 From: ramox81 <184937705+ramox81@users.noreply.github.com> Date: Fri, 2 Oct 2026 15:10:37 +0300 Subject: [PATCH 01/43] 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 --- Cargo.lock | 6 ++-- Cargo.toml | 9 ++++++ src/modules/model/primitive_cmd.rs | 10 ++++-- src/scene/convert/acis_kernel.rs | 15 ++------- src/scene/convert/solid3d_tess.rs | 19 ++---------- src/scene/model/solid_history.rs | 50 ++++++++++++++++++++++++++++-- 6 files changed, 74 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 51294fb85..04cdd81bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4206,7 +4206,7 @@ dependencies = [ [[package]] name = "opencadcodec" version = "0.5.5" -source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=d96e3fa#d96e3fa2fe5acbeac966f1db4c01142618bf9c79" +source = "git+https://github.com/ramox81/cadcodec.git?rev=1802e8c#1802e8cc4d213da60156e7e540965ea398768d18" dependencies = [ "ahash 0.8.12", "anyhow", @@ -4238,7 +4238,7 @@ dependencies = [ [[package]] name = "opencadkernel" version = "0.1.0" -source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=9cdd36d#9cdd36dc527216ba7929d8cfcdc1b7712a2d4cb8" +source = "git+https://github.com/ramox81/cadkernel.git?rev=6dc98c6#6dc98c6749af2b6e0586eb4279eb5e389dd2aa16" dependencies = [ "cavalier_contours", "opencadcodec", @@ -4249,7 +4249,7 @@ dependencies = [ [[package]] name = "opencadkernel-constraints" version = "0.1.0" -source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=9cdd36d#9cdd36dc527216ba7929d8cfcdc1b7712a2d4cb8" +source = "git+https://github.com/ramox81/cadkernel.git?rev=6dc98c6#6dc98c6749af2b6e0586eb4279eb5e389dd2aa16" dependencies = [ "nalgebra", ] diff --git a/Cargo.toml b/Cargo.toml index 85cc56ce7..096b15548 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -90,6 +90,15 @@ objc2-app-kit = { version = "0.2", features = ["NSApplication", "NSResponder", " block2 = "0.5" objc2-foundation = { version = "0.2", features = ["NSArray", "NSURL", "NSString", "NSObject", "NSNotification", "NSThread", "NSEnumerator"] } +# Column-major history matrices and embedded circle centres (opencadcodec #77). +[patch."https://github.com/HakanSeven12/opencadcodec.git"] +opencadcodec = { git = "https://github.com/ramox81/cadcodec.git", rev = "1802e8c" } + +# Box frame at the centre and transform-aware ACIS lift (opencadkernel #73). +[patch."https://github.com/HakanSeven12/opencadkernel.git"] +opencadkernel = { git = "https://github.com/ramox81/cadkernel.git", rev = "6dc98c6" } +opencadkernel-constraints = { git = "https://github.com/ramox81/cadkernel.git", rev = "6dc98c6" } + [patch.crates-io] iced_core = { git = "https://github.com/iced-rs/iced.git", rev = "23604ff22ab0aad9e00b9327cb7b8546ed84db39" } iced_widget = { git = "https://github.com/iced-rs/iced.git", rev = "23604ff22ab0aad9e00b9327cb7b8546ed84db39" } diff --git a/src/modules/model/primitive_cmd.rs b/src/modules/model/primitive_cmd.rs index 016640de0..cca272072 100644 --- a/src/modules/model/primitive_cmd.rs +++ b/src/modules/model/primitive_cmd.rs @@ -1894,7 +1894,7 @@ impl PrimitiveCommand { Some(( placed, solid_history::box_op( - self.history_transform_axes(origin, x_axis, y_axis), + self.history_transform_axes(box_centre(origin, x_axis, y_axis, length, width, height), x_axis, y_axis), length, width, height, @@ -2024,7 +2024,7 @@ impl PrimitiveCommand { Some(( placed, solid_history::wedge_op( - self.history_transform_axes(origin, x_axis, y_axis), + self.history_transform_axes(box_centre(origin, x_axis, y_axis, length, width, height), x_axis, y_axis), length, width, height, @@ -3714,3 +3714,9 @@ fn wire(name: &str, points: Vec<[f32; 3]>) -> WireModel { ..Default::default() } } + +/// Box and wedge histories are framed at the centre of their bounding box, +/// as the reference stores them (lengths stay positive). +fn box_centre(origin: DVec3, x_axis: DVec3, y_axis: DVec3, length: f64, width: f64, height: f64) -> DVec3 { + origin + x_axis * (length * 0.5) + y_axis * (width * 0.5) + DVec3::Z * (height * 0.5) +} diff --git a/src/scene/convert/acis_kernel.rs b/src/scene/convert/acis_kernel.rs index d4ede7699..d1affae13 100644 --- a/src/scene/convert/acis_kernel.rs +++ b/src/scene/convert/acis_kernel.rs @@ -31,23 +31,14 @@ pub fn tessellate_sat( if bodies.is_empty() { return None; } + // The kernel's lift already applies each body's transform record; its + // scale still sets the tessellation tolerance. let mut placed_bodies = Vec::with_capacity(bodies.len()); for body in bodies { let source = body.provenance.source()?; let transform = body_transform(document, source.index() as usize).ok()?; let placement_scale = transform.map_or(1.0, |(_, _, scale)| scale.abs()); - let placed = if let Some((matrix, translation, scale)) = transform { - let placement = brep::Placement { - x_axis: [scale * matrix[0], scale * matrix[1], scale * matrix[2]], - y_axis: [scale * matrix[3], scale * matrix[4], scale * matrix[5]], - z_axis: [scale * matrix[6], scale * matrix[7], scale * matrix[8]], - origin: translation, - }; - brep::transform(&body, &placement)? - } else { - body - }; - placed_bodies.push((placed, placement_scale)); + placed_bodies.push((body, placement_scale)); } let bodies = placed_bodies; let resolution = if facet_res.is_finite() && facet_res > 0.0 { diff --git a/src/scene/convert/solid3d_tess.rs b/src/scene/convert/solid3d_tess.rs index 987b920a7..1bda680d5 100644 --- a/src/scene/convert/solid3d_tess.rs +++ b/src/scene/convert/solid3d_tess.rs @@ -1,6 +1,6 @@ use codec::entities::acis::{SabReader, SatBody, SatDocument}; use codec::entities::{Body, Region, Solid3D, Surface}; -use kernel::brep::{self, Body as KernelBody}; +use kernel::brep::Body as KernelBody; use crate::scene::model::mesh_model::{MeshLodSet, MeshModel}; @@ -179,21 +179,8 @@ pub(crate) fn kernel_acis_body(acis: &codec::entities::AcisData) -> Option Option match operation { SolidHistoryOperation::Box(value) | SolidHistoryOperation::Wedge(value) => world_point( value.base.transform, - [value.length * 0.5, value.width * 0.5, 0.0], + [0.0, 0.0, -value.height * 0.5], ), SolidHistoryOperation::Sphere(value) => { world_point(value.base.transform, [0.0, 0.0, 0.0]) @@ -1615,9 +1615,10 @@ pub fn primitive_properties( ) { return Vec::new(); } - let Some(operation) = primitive_property_operation(document, handle) else { + let Some(mut operation) = primitive_property_operation(document, handle) else { return brep_properties(document, handle); }; + corner_frame(&mut operation); match &operation { SolidHistoryOperation::Box(value) => { rectangular_properties(document, handle, value, "Box") @@ -2414,6 +2415,17 @@ pub fn apply_primitive_property( operation: &mut SolidHistoryOperation, field: &str, value: &str, +) -> bool { + corner_frame(operation); + let applied = apply_primitive_property_at_corner(operation, field, value); + centre_frame(operation); + applied +} + +fn apply_primitive_property_at_corner( + operation: &mut SolidHistoryOperation, + field: &str, + value: &str, ) -> bool { if let SolidHistoryOperation::Brep(brep_value) = operation { if let Some(applied) = apply_brep_position_property(brep_value, field, value) { @@ -3460,6 +3472,9 @@ pub fn primitive_grips( let Some(operation) = document.solid_history_operation(handle) else { return Vec::new(); }; + let mut operation = operation.clone(); + corner_frame(&mut operation); + let operation = &operation; if let SolidHistoryOperation::Fillet(value) = operation { let Some(radius) = value.radii.first().copied() else { return Vec::new(); @@ -3743,6 +3758,17 @@ pub fn apply_primitive_grip( operation: &mut SolidHistoryOperation, grip_id: usize, apply: GripApply, +) -> bool { + corner_frame(operation); + let applied = apply_primitive_grip_at_corner(operation, grip_id, apply); + centre_frame(operation); + applied +} + +fn apply_primitive_grip_at_corner( + operation: &mut SolidHistoryOperation, + grip_id: usize, + apply: GripApply, ) -> bool { if let SolidHistoryOperation::Revolve(value) = operation { if let Some(index) = grip_id.checked_sub(GRIP_REVOLVE_PROFILE_FIRST) { @@ -4138,3 +4164,23 @@ pub fn chamfer_op( ..SolidHistoryChamfer::default() }) } + +/// Box and wedge histories are framed at the centre of their bounding box, +/// as the reference stores them; the editing code here works in the frame at +/// the base corner. These move a box or wedge between the two frames. +fn corner_frame(operation: &mut SolidHistoryOperation) { + shift_rectangular_frame(operation, -0.5); +} + +fn centre_frame(operation: &mut SolidHistoryOperation) { + shift_rectangular_frame(operation, 0.5); +} + +fn shift_rectangular_frame(operation: &mut SolidHistoryOperation, factor: f64) { + if let SolidHistoryOperation::Box(value) | SolidHistoryOperation::Wedge(value) = operation { + if let Some(current) = matrix(value.base.transform) { + let half = glam::DVec3::new(value.length, value.width, value.height) * factor; + value.base.transform = (current * glam::DMat4::from_translation(half)).to_cols_array(); + } + } +} From f7f0770d42bca3e31ff33cc0d48fda3b9222d186 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Fri, 2 Oct 2026 13:40:26 +0100 Subject: [PATCH 02/43] feat(control,mcp): add reference scale calibration and layer auto-placement to embed_image --- src/app/control/actions.rs | 211 ++++++++++++++++++++++++++++--------- src/mcp_ops.rs | 7 +- 2 files changed, 167 insertions(+), 51 deletions(-) diff --git a/src/app/control/actions.rs b/src/app/control/actions.rs index 671a08b77..6eff6d918 100644 --- a/src/app/control/actions.rs +++ b/src/app/control/actions.rs @@ -134,63 +134,130 @@ fn parse_point_2d(val: &Value) -> Result<[f64; 2], Value> { Ok([x, y]) } +fn parse_calibrate( + cal: &Value, + pixel_width: u32, + pixel_height: u32, +) -> Result<(codec::types::Vector3, f64, f64), Value> { + let pt_a = cal + .get("point_a") + .or_else(|| cal.get("pixel_a")) + .or_else(|| cal.get("p1")) + .or_else(|| cal.get("source_a")); + let pt_b = cal + .get("point_b") + .or_else(|| cal.get("pixel_b")) + .or_else(|| cal.get("p2")) + .or_else(|| cal.get("source_b")); + let dist = cal + .get("distance") + .or_else(|| cal.get("real_distance")) + .or_else(|| cal.get("length")) + .and_then(Value::as_f64); + + if let (Some(pa), Some(pb), Some(d_real)) = (pt_a, pt_b, dist) { + if !d_real.is_finite() || d_real <= 0.0 { + return Err(failure( + "invalid_distance", + "Calibration distance must be positive", + )); + } + let p1 = parse_point_2d(pa)?; + let p2 = parse_point_2d(pb)?; + let d_px = ((p2[0] - p1[0]).powi(2) + (p2[1] - p1[1]).powi(2)).sqrt(); + if d_px <= 1e-6 { + return Err(failure( + "invalid_points", + "Calibration reference points must be distinct", + )); + } + let scale = d_real / d_px; + let width = pixel_width as f64 * scale; + + let align_to = cal + .get("align_to") + .or_else(|| cal.get("origin")) + .or_else(|| cal.get("target_a")) + .map(parse_point_2d) + .transpose()? + .unwrap_or([0.0, 0.0]); + + let x_ll = align_to[0] - p1[0] * scale; + let y_ll = align_to[1] - (pixel_height as f64 - p1[1]) * scale; + return Ok((codec::types::Vector3::new(x_ll, y_ll, 0.0), width, scale)); + } + + if let (Some(src_pts), Some(tgt_pts)) = ( + cal.get("source_points").and_then(Value::as_array), + cal.get("target_points").and_then(Value::as_array), + ) { + if src_pts.len() >= 2 && tgt_pts.len() >= 2 { + let p_s1 = parse_point_2d(&src_pts[0])?; + let p_s2 = parse_point_2d(&src_pts[1])?; + let p_t1 = parse_point_2d(&tgt_pts[0])?; + let p_t2 = parse_point_2d(&tgt_pts[1])?; + let d_px = ((p_s2[0] - p_s1[0]).powi(2) + (p_s2[1] - p_s1[1]).powi(2)).sqrt(); + let d_cad = ((p_t2[0] - p_t1[0]).powi(2) + (p_t2[1] - p_t1[1]).powi(2)).sqrt(); + if d_px <= 1e-6 { + return Err(failure( + "invalid_points", + "Source calibration points must be distinct", + )); + } + let scale = d_cad / d_px; + let width = pixel_width as f64 * scale; + let x_ll = p_t1[0] - p_s1[0] * scale; + let y_ll = p_t1[1] - (pixel_height as f64 - p_s1[1]) * scale; + return Ok((codec::types::Vector3::new(x_ll, y_ll, 0.0), width, scale)); + } + } + + Err(failure( + "invalid_calibrate", + "calibrate requires point_a:[x,y], point_b:[x,y], distance:number, and optional align_to:[x,y]", + )) +} + impl OpenCADStudio { - /// `embed_image` — pack the picture at `path` into an OLE2FRAME placed - /// with its lower-left corner at `at` (default width ≈ pixel_width/100, - /// like the interactive command's Enter answer) and commit it as one - /// undo step. The drawing stays self-contained: no external file to lose. - /// Supports automatic 2-point calibration via `source_points` and `target_points`. + /// `embed_image` — pack the picture at `path` into an OLE2FRAME or linked RasterImage + /// placed with its lower-left corner at `at` (default width ≈ pixel_width/100). + /// Supports automatic reference scaling and calibration via `calibrate`: + /// `{"point_a": [px1, py1], "point_b": [px2, py2], "distance": 6500.0, "align_to": [0, 0]}`. #[cfg(not(target_arch = "wasm32"))] pub(super) fn control_embed_image(&mut self, req: &Value) -> Result, Value> { let i = self.active_tab; let path = string(req, "path")?; let image = crate::io::ole_embed::EmbeddedImage::from_file(std::path::Path::new(&path)) .map_err(|e| failure("embed_failed", e))?; - let (at, width) = if let (Some(src_pts), Some(tgt_pts)) = ( + + let (at, width, scale) = if let Some(cal) = req.get("calibrate") { + parse_calibrate(cal, image.pixel_width, image.pixel_height)? + } else if let (Some(src_pts), Some(tgt_pts)) = ( req.get("source_points").and_then(Value::as_array), req.get("target_points").and_then(Value::as_array), ) { - if src_pts.len() >= 2 && tgt_pts.len() >= 2 { - let p_s1 = parse_point_2d(&src_pts[0])?; - let p_s2 = parse_point_2d(&src_pts[1])?; - let p_t1 = parse_point_2d(&tgt_pts[0])?; - let p_t2 = parse_point_2d(&tgt_pts[1])?; - let d_px = ((p_s2[0] - p_s1[0]).powi(2) + (p_s2[1] - p_s1[1]).powi(2)).sqrt(); - let d_cad = ((p_t2[0] - p_t1[0]).powi(2) + (p_t2[1] - p_t1[1]).powi(2)).sqrt(); - if d_px <= 1e-6 { - return Err(failure( - "invalid_points", - "Source calibration points must be distinct", - )); - } - let scale = d_cad / d_px; - let w = image.pixel_width as f64 * scale; - // In image pixel coords, y is 0 at top and pixel_height at bottom. - // In CAD coordinates, lower-left is (x_ll, y_ll). - // x_target = x_ll + px * scale => x_ll = x_target - px * scale - // y_target = y_ll + (pixel_height - py) * scale => y_ll = y_target - (pixel_height - py) * scale - let x_ll = p_t1[0] - p_s1[0] * scale; - let y_ll = p_t1[1] - (image.pixel_height as f64 - p_s1[1]) * scale; - let calc_at = codec::types::Vector3::new(x_ll, y_ll, 0.0); - let final_at = embed_point(req).unwrap_or(calc_at); - let final_w = req["width"].as_f64().filter(|w| *w > 0.0).unwrap_or(w); - (final_at, final_w) - } else { - let default_width = (image.pixel_width as f64 / 100.0).max(1.0); - let width = req["width"].as_f64().filter(|w| *w > 0.0).unwrap_or(default_width); - (embed_point(req)?, width) - } + let dummy = json!({"source_points": src_pts, "target_points": tgt_pts}); + parse_calibrate(&dummy, image.pixel_width, image.pixel_height)? } else { let default_width = (image.pixel_width as f64 / 100.0).max(1.0); let width = req["width"].as_f64().filter(|w| *w > 0.0).unwrap_or(default_width); - (embed_point(req)?, width) + let scale = width / image.pixel_width as f64; + (embed_point(req)?, width, scale) }; + + let final_at = if req.get("calibrate").is_none() && req.get("source_points").is_none() { + at + } else { + embed_point(req).unwrap_or(at) + }; + let final_width = req["width"].as_f64().filter(|w| *w > 0.0).unwrap_or(width); + let height = final_width * image.pixel_height as f64 / image.pixel_width as f64; + + let layer_name = req["layer"].as_str().filter(|l| !l.is_empty()); + let lock_layer = req["lock_layer"].as_bool().unwrap_or(false); + if req["linked"].as_bool().unwrap_or(false) { - // Path-linked RasterImage + ImageDefinition: the drawing stores - // only the file path, so the picture file must travel with the - // drawing (unlike the embedded OLE2FRAME default below). self.push_undo_snapshot(i, "IMAGEATTACH"); - let height = width * image.pixel_height as f64 / image.pixel_width as f64; let handle = { let document = &mut self.tabs[i].scene.document; let definition_handle = document.allocate_handle(); @@ -206,45 +273,91 @@ impl OpenCADStudio { ); let mut entity = codec::entities::RasterImage::with_size( path, - at, + final_at, image.pixel_width as f64, image.pixel_height as f64, - width, + final_width, height, ); entity.definition_handle = Some(definition_handle); + if let Some(l_name) = layer_name { + entity.common.layer = l_name.to_string(); + if !document.layers.contains(l_name) { + let mut layer_record = codec::tables::Layer::new(l_name.to_string()); + layer_record.handle = document.allocate_handle(); + if lock_layer { + layer_record.flags.locked = true; + } + let _ = document.layers.add(layer_record); + } else if lock_layer { + if let Some(l) = document.layers.get_mut(l_name) { + l.flags.locked = true; + } + } + } document .add_entity(codec::EntityType::RasterImage(entity)) .map_err(|e| failure("embed_failed", e))? }; self.tabs[i].scene.populate_images_from_document(); + if layer_name.is_some() { + self.refresh_layer_panel(); + } self.post_ref_op(i); self.set_control_result(json!({ "handle": format!("{:X}", handle.value()), "kind": "RasterImage", "path": path, - "at": [at.x, at.y, at.z], - "width": width, + "at": [final_at.x, final_at.y, final_at.z], + "width": final_width, "height": height, + "scale": scale, "linked": true, + "layer": layer_name.unwrap_or("0"), })); return Ok(Task::none()); } + self.push_undo_snapshot(i, "IMAGEEMBED"); let handle = crate::io::ole_embed::add_embedded_image( &mut self.tabs[i].scene.document, &image, - at, - width, + final_at, + final_width, ) .map_err(|e| failure("embed_failed", e))?; + + if let Some(l_name) = layer_name { + let document = &mut self.tabs[i].scene.document; + if !document.layers.contains(l_name) { + let mut layer_record = codec::tables::Layer::new(l_name.to_string()); + layer_record.handle = document.allocate_handle(); + if lock_layer { + layer_record.flags.locked = true; + } + let _ = document.layers.add(layer_record); + } else if lock_layer { + if let Some(l) = document.layers.get_mut(l_name) { + l.flags.locked = true; + } + } + if let Some(ent) = document.get_entity_mut(handle) { + ent.common_mut().layer = l_name.to_string(); + } + self.refresh_layer_panel(); + } + self.post_ref_op(i); self.set_control_result(json!({ "handle": format!("{:X}", handle.value()), "kind": "Ole2Frame", "path": path, - "at": [at.x, at.y, at.z], - "width": width, + "at": [final_at.x, final_at.y, final_at.z], + "width": final_width, + "height": height, + "scale": scale, + "linked": false, + "layer": layer_name.unwrap_or("0"), })); Ok(Task::none()) } diff --git a/src/mcp_ops.rs b/src/mcp_ops.rs index 69237e423..c7ef661d8 100644 --- a/src/mcp_ops.rs +++ b/src/mcp_ops.rs @@ -249,18 +249,21 @@ pub static ACTION: OpDef = OpDef { pub static EMBED_IMAGE: OpDef = OpDef { name: "embed_image", - doc: "Embed or link a raster image into the drawing.", + doc: "Embed or link a raster image into the drawing with optional reference scaling and calibration.", batchable: true, params: &[ req("path", Ty::Str, "Path to the image file."), opt("at", Ty::Point, "Lower-left corner [x, y] or [x, y, z]."), opt("width", Ty::Num, "World width of the image."), opt("linked", Ty::Bool, "Store as path-linked RasterImage instead of embedded OLE2FRAME."), + opt("calibrate", Ty::Raw(r#"{"type":"object","description":"Automatic 2-point reference calibration: {point_a:[px1,py1], point_b:[px2,py2], distance:650.0, align_to:[0,0]}"}"#), "Automatic 2-point reference calibration: {point_a:[px1,py1], point_b:[px2,py2], distance:650.0, align_to:[0,0]}."), + opt("layer", Ty::Str, "Layer name to place the image on (auto-created if missing, e.g. '_XREF')."), + opt("lock_layer", Ty::Bool, "Lock the target layer after attaching."), opt("source_points", Ty::ArrayOf(&Ty::Point), "Pixel points in image [[px1,py1],[px2,py2]] for 2-point alignment."), opt("target_points", Ty::ArrayOf(&Ty::Point), "CAD world points [[x1,y1],[x2,y2]] for 2-point alignment."), ], rules: &[], - example: r#"{"op":"embed_image","path":"logo.png","at":[0,0]}"#, + example: r#"{"op":"embed_image","path":"plan.png","linked":true,"calibrate":{"point_a":[52,910],"point_b":[450,910],"distance":6500},"layer":"_XREF","lock_layer":true}"#, }; pub static WBLOCK: OpDef = OpDef { From 785db5683b9056b06f5368a088d5bd3005d87ed0 Mon Sep 17 00:00:00 2001 From: ramox81 <184937705+ramox81@users.noreply.github.com> Date: Fri, 2 Oct 2026 17:22:08 +0300 Subject: [PATCH 03/43] feat(field): table formula buttons, block placeholders, attribute fields on insert, plot-time field stamping Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 2 +- Cargo.toml | 4 + locales/ar-SA/opencadstudio.ftl | 6 ++ locales/bg-BG/opencadstudio.ftl | 6 ++ locales/cs-CZ/opencadstudio.ftl | 6 ++ locales/de-DE/opencadstudio.ftl | 6 ++ locales/el-GR/opencadstudio.ftl | 6 ++ locales/en-US/opencadstudio.ftl | 6 ++ locales/es-ES/opencadstudio.ftl | 6 ++ locales/fi-FI/opencadstudio.ftl | 6 ++ locales/fr-FR/opencadstudio.ftl | 6 ++ locales/hi-IN/opencadstudio.ftl | 6 ++ locales/hu-HU/opencadstudio.ftl | 6 ++ locales/it-IT/opencadstudio.ftl | 6 ++ locales/ja-JP/opencadstudio.ftl | 6 ++ locales/ko-KR/opencadstudio.ftl | 6 ++ locales/nl-NL/opencadstudio.ftl | 6 ++ locales/pl-PL/opencadstudio.ftl | 6 ++ locales/pt-BR/opencadstudio.ftl | 6 ++ locales/ru-RU/opencadstudio.ftl | 6 ++ locales/tr-TR/opencadstudio.ftl | 6 ++ locales/zh-CN/opencadstudio.ftl | 6 ++ locales/zh-TW/opencadstudio.ftl | 6 ++ src/app/command_driver/entity_commit.rs | 14 ++- src/app/commands/field.rs | 120 +++++++++++++++++++++++- src/app/control/actions.rs | 8 ++ src/app/update/file.rs | 16 ++++ src/entities/field.rs | 56 +++++++++++ src/locale_catalog.rs | 6 ++ src/modules/annotate/field_cmd.rs | 67 +++++++++++++ src/ui/window/field_dialog.rs | 115 +++++++++++++++++++++-- 31 files changed, 522 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 51294fb85..ca1dd70d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4206,7 +4206,7 @@ dependencies = [ [[package]] name = "opencadcodec" version = "0.5.5" -source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=d96e3fa#d96e3fa2fe5acbeac966f1db4c01142618bf9c79" +source = "git+https://github.com/ramox81/cadcodec.git?rev=f94ea46#f94ea46e200360bf5dbe0680bc8090c45205db72" dependencies = [ "ahash 0.8.12", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 85cc56ce7..95a2d943b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -90,6 +90,10 @@ objc2-app-kit = { version = "0.2", features = ["NSApplication", "NSResponder", " block2 = "0.5" objc2-foundation = { version = "0.2", features = ["NSArray", "NSURL", "NSString", "NSObject", "NSNotification", "NSThread", "NSEnumerator"] } +# Table formulas, block placeholders, plot-time fields and unit formats (opencadcodec #81). +[patch."https://github.com/HakanSeven12/opencadcodec.git"] +opencadcodec = { git = "https://github.com/ramox81/cadcodec.git", rev = "f94ea46" } + [patch.crates-io] iced_core = { git = "https://github.com/iced-rs/iced.git", rev = "23604ff22ab0aad9e00b9327cb7b8546ed84db39" } iced_widget = { git = "https://github.com/iced-rs/iced.git", rev = "23604ff22ab0aad9e00b9327cb7b8546ed84db39" } diff --git a/locales/ar-SA/opencadstudio.ftl b/locales/ar-SA/opencadstudio.ftl index 97fec3890..b16eb479b 100644 --- a/locales/ar-SA/opencadstudio.ftl +++ b/locales/ar-SA/opencadstudio.ftl @@ -4105,6 +4105,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/bg-BG/opencadstudio.ftl b/locales/bg-BG/opencadstudio.ftl index 0fb1d43e9..395758ea7 100644 --- a/locales/bg-BG/opencadstudio.ftl +++ b/locales/bg-BG/opencadstudio.ftl @@ -4092,6 +4092,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/cs-CZ/opencadstudio.ftl b/locales/cs-CZ/opencadstudio.ftl index d17ecfb1d..724bf6e48 100644 --- a/locales/cs-CZ/opencadstudio.ftl +++ b/locales/cs-CZ/opencadstudio.ftl @@ -4090,6 +4090,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/de-DE/opencadstudio.ftl b/locales/de-DE/opencadstudio.ftl index 7fd9f0bd4..e5a685229 100644 --- a/locales/de-DE/opencadstudio.ftl +++ b/locales/de-DE/opencadstudio.ftl @@ -4091,6 +4091,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/el-GR/opencadstudio.ftl b/locales/el-GR/opencadstudio.ftl index 53601f4be..aaa837e5b 100644 --- a/locales/el-GR/opencadstudio.ftl +++ b/locales/el-GR/opencadstudio.ftl @@ -4093,6 +4093,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/en-US/opencadstudio.ftl b/locales/en-US/opencadstudio.ftl index dcbbb7b69..b1e22ed13 100644 --- a/locales/en-US/opencadstudio.ftl +++ b/locales/en-US/opencadstudio.ftl @@ -4094,6 +4094,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/es-ES/opencadstudio.ftl b/locales/es-ES/opencadstudio.ftl index df1b19661..8c7b1d012 100644 --- a/locales/es-ES/opencadstudio.ftl +++ b/locales/es-ES/opencadstudio.ftl @@ -4093,6 +4093,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/fi-FI/opencadstudio.ftl b/locales/fi-FI/opencadstudio.ftl index 99f18d514..4844bc1dd 100644 --- a/locales/fi-FI/opencadstudio.ftl +++ b/locales/fi-FI/opencadstudio.ftl @@ -4092,6 +4092,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/fr-FR/opencadstudio.ftl b/locales/fr-FR/opencadstudio.ftl index bc00d9334..b1ab5b3bf 100644 --- a/locales/fr-FR/opencadstudio.ftl +++ b/locales/fr-FR/opencadstudio.ftl @@ -4093,6 +4093,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/hi-IN/opencadstudio.ftl b/locales/hi-IN/opencadstudio.ftl index 59440e35e..e0abed923 100644 --- a/locales/hi-IN/opencadstudio.ftl +++ b/locales/hi-IN/opencadstudio.ftl @@ -4081,6 +4081,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/hu-HU/opencadstudio.ftl b/locales/hu-HU/opencadstudio.ftl index 2066c5156..3a412ad09 100644 --- a/locales/hu-HU/opencadstudio.ftl +++ b/locales/hu-HU/opencadstudio.ftl @@ -4092,6 +4092,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/it-IT/opencadstudio.ftl b/locales/it-IT/opencadstudio.ftl index bab01a81c..29901bfdc 100644 --- a/locales/it-IT/opencadstudio.ftl +++ b/locales/it-IT/opencadstudio.ftl @@ -4092,6 +4092,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/ja-JP/opencadstudio.ftl b/locales/ja-JP/opencadstudio.ftl index f0df48710..616fbee9e 100644 --- a/locales/ja-JP/opencadstudio.ftl +++ b/locales/ja-JP/opencadstudio.ftl @@ -4081,6 +4081,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/ko-KR/opencadstudio.ftl b/locales/ko-KR/opencadstudio.ftl index 6ad109cc7..4e963349d 100644 --- a/locales/ko-KR/opencadstudio.ftl +++ b/locales/ko-KR/opencadstudio.ftl @@ -4092,6 +4092,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/nl-NL/opencadstudio.ftl b/locales/nl-NL/opencadstudio.ftl index 2f5e39e39..80e8ac9eb 100644 --- a/locales/nl-NL/opencadstudio.ftl +++ b/locales/nl-NL/opencadstudio.ftl @@ -4091,6 +4091,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/pl-PL/opencadstudio.ftl b/locales/pl-PL/opencadstudio.ftl index c31421220..9fdaea28d 100644 --- a/locales/pl-PL/opencadstudio.ftl +++ b/locales/pl-PL/opencadstudio.ftl @@ -4092,6 +4092,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/pt-BR/opencadstudio.ftl b/locales/pt-BR/opencadstudio.ftl index e96dea04d..8901c55da 100644 --- a/locales/pt-BR/opencadstudio.ftl +++ b/locales/pt-BR/opencadstudio.ftl @@ -4093,6 +4093,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/ru-RU/opencadstudio.ftl b/locales/ru-RU/opencadstudio.ftl index e3eb50fa6..40697720e 100644 --- a/locales/ru-RU/opencadstudio.ftl +++ b/locales/ru-RU/opencadstudio.ftl @@ -4094,6 +4094,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/tr-TR/opencadstudio.ftl b/locales/tr-TR/opencadstudio.ftl index 3b01d7c2c..5ca8fb648 100644 --- a/locales/tr-TR/opencadstudio.ftl +++ b/locales/tr-TR/opencadstudio.ftl @@ -4053,6 +4053,12 @@ insert = .field-select-object = Nesne seç .field-expression = Alan ifadesi .field-help = Bir alan ekler: çizimden, tarihten veya başka bir kaynaktan güncellenen metin. + .field-average = Ortalama + .field-sum = Toplam + .field-object-name = Nesne adı + .field-block-placeholder = Blok yer tutucusu + .field-block-editor-only = Yalnız blok düzenleyicide kullanılabilir + .field-block-reference-property = Blok başvurusu özelliği .field-cat-linked = Bağlantılı .field-current-precision = Geçerli hassasiyet .field-evaluate = Hesapla diff --git a/locales/zh-CN/opencadstudio.ftl b/locales/zh-CN/opencadstudio.ftl index 290f64be0..078806de7 100644 --- a/locales/zh-CN/opencadstudio.ftl +++ b/locales/zh-CN/opencadstudio.ftl @@ -4076,6 +4076,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/locales/zh-TW/opencadstudio.ftl b/locales/zh-TW/opencadstudio.ftl index c38cc4a04..3af162dc8 100644 --- a/locales/zh-TW/opencadstudio.ftl +++ b/locales/zh-TW/opencadstudio.ftl @@ -4088,6 +4088,12 @@ insert = .field-select-object = Select object .field-expression = Field expression .field-help = Inserts a field: text that updates from the drawing, the date or another source. + .field-average = Average + .field-sum = Sum + .field-object-name = Object name + .field-block-placeholder = Block placeholder + .field-block-editor-only = Only accessible in the block editor + .field-block-reference-property = Block reference property .field-cat-linked = Linked .field-current-precision = Current precision .field-evaluate = Evaluate diff --git a/src/app/command_driver/entity_commit.rs b/src/app/command_driver/entity_commit.rs index b2802535d..08c948bd6 100644 --- a/src/app/command_driver/entity_commit.rs +++ b/src/app/command_driver/entity_commit.rs @@ -231,7 +231,15 @@ impl OpenCADStudio { // objects are not part of the add delta, so the step is a snapshot. let text_field = self.tabs[i].active_cmd.as_ref().and_then(|cmd| cmd.text_field()); let label = self.history_label_from_active_cmd(i, "ENTITY"); - let delta_safe = text_field.is_none() && self.delta_add_safe(i, &entity); + // A block reference whose attribute definitions carry fields gets + // them copied onto its attributes (field objects: snapshot step). + let attribute_fields = match &entity { + codec::EntityType::Insert(insert) if !insert.attributes.is_empty() => { + crate::entities::field::block_has_attribute_fields(&self.tabs[i].scene.document, &insert.block_name) + } + _ => false, + }; + let delta_safe = text_field.is_none() && !attribute_fields && self.delta_add_safe(i, &entity); let field_value = match &entity { codec::EntityType::MText(m) => m.value.clone(), codec::EntityType::AttributeDefinition(a) => a.default_value.clone(), @@ -264,6 +272,10 @@ impl OpenCADStudio { &field_value, ); } + if let (Some(handle), true) = (committed, attribute_fields) { + crate::entities::field::attach_attribute_fields(&mut self.tabs[i].scene.document, handle); + self.tabs[i].scene.bump_entities(&[(handle, crate::scene::ChangeKind::Modified)]); + } if let Some(handle) = committed { self.apply_continuous_constraints(i, &[handle]); } diff --git a/src/app/commands/field.rs b/src/app/commands/field.rs index 5c084fc78..422e51bcb 100644 --- a/src/app/commands/field.rs +++ b/src/app/commands/field.rs @@ -3,7 +3,7 @@ use crate::app::{Message, OpenCADStudio}; use crate::command::CadCommand; -use crate::modules::annotate::field_cmd::{FieldObjectPickCommand, FieldPlaceCommand}; +use crate::modules::annotate::field_cmd::{FieldObjectPickCommand, FieldPlaceCommand, FieldTablePickCommand}; use crate::ui::window::field_dialog::{ fields_of, object_properties, FieldDialogMsg, FieldDialogState, FieldTarget, DATE_FORMATS, NAMED_TYPES, @@ -35,13 +35,70 @@ impl OpenCADStudio { } Some(Task::none()) } + cmd if cmd == "_FIELD_CELL" || cmd.starts_with("_FIELD_CELL ") => { + let parts: Vec<&str> = cmd.split_whitespace().skip(1).collect(); + if let Some(expression) = self.table_cell_expression(i, &parts) { + if let Some(state) = self.field_dialog.as_mut() { + // The reference appends at the end, with no operator. + state.formula.push_str(&expression); + } + self.refresh_field_preview(); + // A real result gets the Decimal format, as the reference picks it. + if let Some(state) = self.field_dialog.as_mut() { + if state.formula_format == 0 && state.preview.contains('.') { + state.formula_format = 2; + } + } + } + if self.field_dialog.is_some() { + self.active_modal = Some(crate::app::ModalKind::Field); + self.refresh_field_preview(); + } + Some(Task::none()) + } _ => None, } } + /// The formula text for a picked table cell or cell range: + /// `Table(%<\_ObjId H>%).B4` or `Table(%<\_ObjId H>%).Evaluate(Sum(A3:B5))`. + fn table_cell_expression(&self, i: usize, parts: &[&str]) -> Option { + let function = *parts.first()?; + let cell = |at: &[&str]| -> Option<(codec::Handle, usize, usize)> { + let handle = codec::Handle::new(u64::from_str_radix(at.first()?, 16).ok()?); + let point = glam::DVec3::new(at.get(1)?.parse().ok()?, at.get(2)?.parse().ok()?, at.get(3)?.parse().ok()?); + let document = &self.tabs[i].scene.document; + let codec::EntityType::Table(table) = document.get_entity(handle)? else { + return None; + }; + let hit = crate::modules::annotate::table_cmd::table_cell_at(table, None, point)?; + Some((handle, hit.row, hit.column)) + }; + let name = |row: usize, column: usize| format!("{}{}", column_letters(column), row + 1); + let (table, row, column) = cell(parts.get(1..5)?)?; + if function == "Cell" { + return Some(format!("Table(%<\\_ObjId {:X}>%).{}", table.value(), name(row, column))); + } + let (second_table, row2, column2) = cell(parts.get(5..9)?)?; + if second_table != table { + return None; + } + Some(format!( + "Table(%<\\_ObjId {:X}>%).Evaluate({function}({}:{}))", + table.value(), + name(row.min(row2), column.min(column2)), + name(row.max(row2), column.max(column2)), + )) + } + /// Open the Field dialog for `target`. pub(in crate::app) fn open_field_dialog(&mut self, target: FieldTarget) { let mut state = FieldDialogState::new(target); + if !matches!(target, FieldTarget::NewText) { + state.placeholder_block = self.tabs[self.active_tab] + .active_block_edit_session() + .map(|session| session.block_name.clone()); + } state.examples = DATE_FORMATS .iter() .map(|f| self.field_value(&format!("\\AcVar Date \\f \"{f}\""), &[])) @@ -62,7 +119,17 @@ impl OpenCADStudio { return; }; let (code, objects) = state.code(); - let preview = if state.complete() { self.field_value(&code, &objects) } else { String::new() }; + let preview = if state.complete() { + if state.name == "BlockPlaceholder" { + // A placeholder shows its property name until a block reference resolves it. + let (label, _, _) = codec::fields::BLOCK_PLACEHOLDER_PROPERTIES[state.placeholder_property]; + text_case(label, state.text_case) + } else { + self.field_value(&code, &objects) + } + } else { + String::new() + }; if let Some(state) = self.field_dialog.as_mut() { state.preview = preview; } @@ -155,6 +222,18 @@ impl OpenCADStudio { ); } FieldDialogMsg::PlotScale(k) => state.plot_scale = k, + FieldDialogMsg::PlaceholderProperty(k) => { + state.placeholder_property = k; + state.text_case = 0; + } + FieldDialogMsg::TableFunction(function) => { + // The dialog waits while the cells are picked. + self.active_modal = None; + let command = FieldTablePickCommand::new(function); + self.command_line.push_info(&command.prompt()); + self.tabs[i].active_cmd = Some(Box::new(command)); + return Task::none(); + } FieldDialogMsg::SelectObject => { // The dialog waits while one object is picked. self.active_modal = None; @@ -226,3 +305,40 @@ impl OpenCADStudio { }; } } + +/// Spreadsheet column letters: A … Z, AA, AB … +fn column_letters(mut column: usize) -> String { + let mut letters = Vec::new(); + loop { + letters.push(b'A' + (column % 26) as u8); + if column < 26 { + break; + } + column = column / 26 - 1; + } + letters.reverse(); + String::from_utf8(letters).unwrap_or_default() +} + +/// The Field dialog's text cases: (none), Uppercase, Lowercase, First capital, Title case. +fn text_case(value: &str, case: usize) -> String { + match case { + 1 => value.to_uppercase(), + 2 => value.to_lowercase(), + 3 => { + let lower = value.to_lowercase(); + let mut chars = lower.chars(); + chars.next().map(|c| c.to_uppercase().chain(chars).collect()).unwrap_or_default() + } + 4 => value + .split(' ') + .map(|word| { + let lower = word.to_lowercase(); + let mut chars = lower.chars(); + chars.next().map(|c| c.to_uppercase().chain(chars).collect::()).unwrap_or_default() + }) + .collect::>() + .join(" "), + _ => value.to_string(), + } +} diff --git a/src/app/control/actions.rs b/src/app/control/actions.rs index 671a08b77..329c6687a 100644 --- a/src/app/control/actions.rs +++ b/src/app/control/actions.rs @@ -362,6 +362,7 @@ impl OpenCADStudio { if !path.to_ascii_lowercase().ends_with(".pdf") { return Err(failure("invalid_path", "plot writes .pdf files")); } + self.stamp_plot_fields(); let i = self.active_tab; let names = self.tabs[i].scene.layout_names(); let requested = req["layout"].as_str().unwrap_or("Model").to_owned(); @@ -1019,6 +1020,13 @@ impl OpenCADStudio { "link_text" => F::HyperlinkText(v.into()), "link_url" => F::HyperlinkUrl(v.into()), "plot_scale" => F::PlotScale(index(codec::fields::PLOT_SCALE_FORMATS.len())?), + "placeholder" => F::PlaceholderProperty(index(codec::fields::BLOCK_PLACEHOLDER_PROPERTIES.len())?), + "table_function" => F::TableFunction( + ["Average", "Sum", "Count", "Cell"] + .into_iter() + .find(|f| f.eq_ignore_ascii_case(v)) + .ok_or_else(|| failure("invalid_value", "Average|Sum|Count|Cell"))?, + ), _ => return Err(failure("invalid_value", "Unknown field dialog key")), }) } diff --git a/src/app/update/file.rs b/src/app/update/file.rs index 2edd18786..ca2945cc5 100644 --- a/src/app/update/file.rs +++ b/src/app/update/file.rs @@ -3764,7 +3764,20 @@ impl OpenCADStudio { task } + /// A plot gives its fields (PlotDate) the plot time, as the reference + /// stores it; the hosts are redrawn before the plot reads the scene. + pub(in crate::app) fn stamp_plot_fields(&mut self) { + let i = self.active_tab; + let hosts = crate::entities::field::stamp_plot_fields(&mut self.tabs[i].scene.document); + if !hosts.is_empty() { + let changes: Vec<_> = hosts.into_iter().map(|h| (h, crate::scene::ChangeKind::Modified)).collect(); + self.tabs[i].scene.bump_entities(&changes); + self.tabs[i].dirty = true; + } + } + fn print_all_pages(&mut self) -> Result, String> { + self.stamp_plot_fields(); let available = self.tabs[self.active_tab].scene.layout_names(); let selected: Vec = self .print_all_layouts @@ -5337,6 +5350,9 @@ impl OpenCADStudio { } self.active_modal = None; self.reset_modal_geometry(); + if !preview { + self.stamp_plot_fields(); + } // Extents, Window and Display use one plot path in both spaces. Only // Paper-space Layout is special: it uses the physical sheet bounds. diff --git a/src/entities/field.rs b/src/entities/field.rs index c05b5ccb3..fe63acc33 100644 --- a/src/entities/field.rs +++ b/src/entities/field.rs @@ -360,3 +360,59 @@ fn display_name() -> Option { #[cfg(not(target_os = "windows"))] None } + +/// Copy each attribute definition's field onto the matching attribute of a +/// new block reference (block placeholders resolve against the reference). +/// Returns the attributes that received a field. +pub fn attach_attribute_fields(document: &mut CadDocument, insert: Handle) -> Vec { + let context = OcsFieldContext(None); + document.attach_attribute_fields(insert, &context) +} + +/// Whether any attribute definition of `block` hosts a field. +pub fn block_has_attribute_fields(document: &CadDocument, block: &str) -> bool { + let Some(record) = document.block_records.iter().find(|r| r.name.eq_ignore_ascii_case(block)) else { + return false; + }; + record.entity_handles.iter().filter_map(|h| document.get_entity(*h)).any(|e| { + matches!(e, codec::entities::EntityType::AttributeDefinition(_)) && hosts_field(document, e) + }) +} + +/// Give plot-time fields (PlotDate) the plot's time; returns the hosts whose +/// text changed. +pub fn stamp_plot_fields(document: &mut CadDocument) -> Vec { + let snapshot = document.clone(); + let context = PlotContext(OcsFieldContext(Some(&snapshot))); + document.stamp_plot_fields(&context) +} + +/// The app context while a plot is produced. +struct PlotContext<'a>(OcsFieldContext<'a>); + +impl FieldContext for PlotContext<'_> { + fn now_julian(&self) -> f64 { + self.0.now_julian() + } + fn file_times(&self) -> Option<(f64, f64)> { + self.0.file_times() + } + fn plotting(&self) -> bool { + true + } + fn login(&self) -> Option { + self.0.login() + } + fn getvar(&self, name: &str) -> Option { + self.0.getvar(name) + } + fn file_size(&self) -> Option { + self.0.file_size() + } + fn date_locale(&self) -> codec::fields::DateLocale { + self.0.date_locale() + } + fn getenv(&self, name: &str) -> Option { + self.0.getenv(name) + } +} diff --git a/src/locale_catalog.rs b/src/locale_catalog.rs index 4ec7f0109..ba91e7781 100644 --- a/src/locale_catalog.rs +++ b/src/locale_catalog.rs @@ -235,6 +235,12 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static "Select object" => Some(("insert", "field-select-object")), "Field expression" => Some(("insert", "field-expression")), "Inserts a field: text that updates from the drawing, the date or another source." => Some(("insert", "field-help")), + "Average" => Some(("insert", "field-average")), + "Sum" => Some(("insert", "field-sum")), + "Object name" => Some(("insert", "field-object-name")), + "Block placeholder" => Some(("insert", "field-block-placeholder")), + "Only accessible in the block editor" => Some(("insert", "field-block-editor-only")), + "Block reference property" => Some(("insert", "field-block-reference-property")), "Linked" => Some(("insert", "field-cat-linked")), "Current precision" => Some(("insert", "field-current-precision")), "Evaluate" => Some(("insert", "field-evaluate")), diff --git a/src/modules/annotate/field_cmd.rs b/src/modules/annotate/field_cmd.rs index 53e62dfa4..73cf7d02d 100644 --- a/src/modules/annotate/field_cmd.rs +++ b/src/modules/annotate/field_cmd.rs @@ -189,4 +189,71 @@ impl CadCommand for FieldObjectPickCommand { } } +/// The Field dialog's Average / Sum / Count / Cell buttons: a cell range (or +/// one cell) is picked in a table and handed back as +/// `_FIELD_CELL [
]`. +pub struct FieldTablePickCommand { + pub function: &'static str, + first: Option<(Handle, DVec3)>, +} + +impl FieldTablePickCommand { + pub fn new(function: &'static str) -> Self { + Self { function, first: None } + } +} + +impl CadCommand for FieldTablePickCommand { + fn name(&self) -> &'static str { + "FIELD" + } + + fn prompt(&self) -> String { + match (self.function, self.first) { + ("Cell", _) => "Select table cell:".into(), + (_, None) => "Select first corner of table cell range:".into(), + _ => "Select second corner of table cell range:".into(), + } + } + + fn needs_entity_pick(&self) -> bool { + true + } + + fn entity_pick_highlights_hover(&self) -> bool { + true + } + + fn on_entity_pick(&mut self, handle: Handle, pt: DVec3) -> CmdResult { + if handle.is_null() { + return CmdResult::NeedPoint; + } + let at = |h: Handle, p: DVec3| format!("{:X} {} {} {}", h.value(), p.x, p.y, p.z); + match (self.function, self.first) { + ("Cell", _) => CmdResult::Dispatch(format!("_FIELD_CELL Cell {}", at(handle, pt))), + (_, None) => { + self.first = Some((handle, pt)); + CmdResult::NeedPoint + } + (function, Some((first, first_pt))) => CmdResult::Dispatch(format!( + "_FIELD_CELL {function} {} {}", + at(first, first_pt), + at(handle, pt) + )), + } + } + + fn on_point(&mut self, _pt: DVec3) -> CmdResult { + CmdResult::NeedPoint + } + + fn on_enter(&mut self) -> CmdResult { + CmdResult::Dispatch("_FIELD_CELL".into()) + } + + fn on_escape(&mut self) -> CmdResult { + CmdResult::Dispatch("_FIELD_CELL".into()) + } +} + inventory::submit!(crate::command::CommandRegistration { names: &["FIELD"] }); diff --git a/src/ui/window/field_dialog.rs b/src/ui/window/field_dialog.rs index 0d76b6816..6943ba071 100644 --- a/src/ui/window/field_dialog.rs +++ b/src/ui/window/field_dialog.rs @@ -32,7 +32,7 @@ pub const CATEGORIES: &[(&str, &[&str])] = &[ &["Author", "Comments", "Filename", "Filesize", "HyperlinkBase", "Keywords", "LastSavedBy", "Subject", "Title"], ), ("Linked", &["Hyperlink"]), - ("Objects", &["Formula", "NamedObject", "Object"]), + ("Objects", &["BlockPlaceholder", "Formula", "NamedObject", "Object"]), ("Other", &["DieselExpression", "SystemVariable"]), ( "Plot", @@ -77,6 +77,7 @@ pub enum FieldKind { Formula, Hyperlink, PlotScale, + BlockPlaceholder, } /// Formula precisions: the current one, then 0 to 8 decimals. @@ -95,6 +96,7 @@ pub fn kind_of(name: &str) -> FieldKind { "Formula" => FieldKind::Formula, "Hyperlink" => FieldKind::Hyperlink, "PlotScale" => FieldKind::PlotScale, + "BlockPlaceholder" => FieldKind::BlockPlaceholder, _ => FieldKind::Text, } } @@ -128,6 +130,11 @@ pub struct FieldDialogState { pub hyperlink_url: String, /// Index into codec PLOT_SCALE_FORMATS. pub plot_scale: usize, + /// The block being edited in the block editor; block placeholders are + /// only offered there. + pub placeholder_block: Option, + /// Index into codec BLOCK_PLACEHOLDER_PROPERTIES. + pub placeholder_property: usize, pub preview: String, /// Today in each of DATE_FORMATS, for the Examples list. pub examples: Vec, @@ -158,6 +165,8 @@ impl FieldDialogState { hyperlink_text: String::new(), hyperlink_url: String::new(), plot_scale: 0, + placeholder_block: None, + placeholder_property: 7, preview: String::new(), examples: Vec::new(), } @@ -195,10 +204,11 @@ impl FieldDialogState { 0 => String::new(), n => format!("%pr{}", n - 1), }; - let body = format!("\\AcExpr ({})", self.formula.trim()); + let (formula, objects) = indexed_object_ids(self.formula.trim()); + let body = format!("\\AcExpr ({formula})"); match format!("{format}{precision}") { - f if f.is_empty() => (body, vec![]), - f => (format!("{body} \\f \"{f}\""), vec![]), + f if f.is_empty() => (body, objects), + f => (format!("{body} \\f \"{f}\""), objects), } } FieldKind::Hyperlink => ( @@ -211,6 +221,21 @@ impl FieldDialogState { .map_or_else(|| "\\AcVar PlotScale".to_string(), |f| f.1.to_string()), vec![], ), + FieldKind::BlockPlaceholder => { + let (_, property, format) = codec::fields::BLOCK_PLACEHOLDER_PROPERTIES[self.placeholder_property]; + // Text properties take the chosen case; the others keep their own format. + let format = match (format, self.text_case) { + ("%tc4", 0) => String::new(), + ("%tc4", n) => format!("%tc{n}"), + (other, _) => other.to_string(), + }; + let code = format!("\\AcObjProp.16.2 Object(?BlockRefId,1).{property}"); + if format.is_empty() { + (code, vec![]) + } else { + (format!("{code} \\f \"{format}\""), vec![]) + } + } FieldKind::SystemVariable => (format!("\\AcVar {}", self.sysvar), vec![]), FieldKind::Diesel => (format!("\\AcDiesel {}", self.diesel), vec![]), FieldKind::NamedObject => match self.named.and_then(|i| self.named_names.get(i)) { @@ -235,11 +260,35 @@ impl FieldDialogState { FieldKind::Diesel => !self.diesel.trim().is_empty(), FieldKind::Formula => !self.formula.trim().is_empty(), FieldKind::Hyperlink => !self.hyperlink_url.trim().is_empty(), + FieldKind::BlockPlaceholder => self.placeholder_block.is_some(), _ => true, } } } +/// Table references in a formula are typed as `%<\_ObjId HANDLE>%`; the stored +/// code numbers them (`%<\_ObjIdx n>%`) and lists the objects. +fn indexed_object_ids(formula: &str) -> (String, Vec) { + let mut out = String::new(); + let mut objects: Vec = Vec::new(); + let mut rest = formula; + while let Some(start) = rest.find("%<\\_ObjId ") { + let after = &rest[start + "%<\\_ObjId ".len()..]; + let Some(end) = after.find(">%") else { break }; + let Ok(value) = u64::from_str_radix(after[..end].trim(), 16) else { break }; + let handle = codec::Handle::new(value); + let index = objects.iter().position(|h| *h == handle).unwrap_or_else(|| { + objects.push(handle); + objects.len() - 1 + }); + out.push_str(&rest[..start]); + out.push_str(&format!("%<\\_ObjIdx {index}>%")); + rest = &after[end + 2..]; + } + out.push_str(rest); + (out, objects) +} + /// The geometric properties a field can show for an object of this type. pub fn object_properties(entity: &codec::EntityType) -> Vec<&'static str> { use codec::EntityType as E; @@ -274,6 +323,9 @@ pub enum FieldDialogMsg { FormulaFormat(usize), FormulaPrecision(usize), Evaluate, + /// Sum / Average / Count of a cell range, or one Cell, picked in a table. + TableFunction(&'static str), + PlaceholderProperty(usize), HyperlinkText(String), HyperlinkUrl(String), BrowseHyperlink, @@ -334,6 +386,14 @@ impl IntoContainer for text_input::Style { } } +fn table_button<'a>(label: String, function: &'static str) -> Element<'a, Message> { + button(text(label).size(12)) + .on_press(msg(FieldDialogMsg::TableFunction(function))) + .style(button_style(false)) + .padding([5, 10]) + .into() +} + fn case_list<'a>(state: &FieldDialogState) -> Element<'a, Message> { list( TEXT_CASES @@ -529,6 +589,36 @@ fn format_panel<'a>(state: &'a FieldDialogState) -> Element<'a, Message> { ] .spacing(8) .into(), + FieldKind::BlockPlaceholder => match &state.placeholder_block { + None => column![text(t!("Only accessible in the block editor")).size(12).style(muted_style)].into(), + Some(block) => { + let (_, _, format) = codec::fields::BLOCK_PLACEHOLDER_PROPERTIES[state.placeholder_property]; + let mut panel = column![ + row![ + text(t!("Block name")).size(12).width(Length::Fixed(110.0)), + container(text(block.clone()).size(12).style(muted_style)).padding([5, 8]).width(Fill), + ] + .spacing(8) + .align_y(iced::Center), + text(t!("Block reference property")).size(12), + list( + codec::fields::BLOCK_PLACEHOLDER_PROPERTIES + .iter() + .enumerate() + .map(|(i, (label, _, _))| { + (t!(*label).into_owned(), state.placeholder_property == i, FieldDialogMsg::PlaceholderProperty(i)) + }) + .collect(), + 150.0, + ), + ] + .spacing(8); + if format == "%tc4" { + panel = panel.push(text(t!("Format")).size(12)).push(case_list(state)); + } + panel.into() + } + }, FieldKind::PlotScale => column![ text(t!("Format")).size(12), list( @@ -617,10 +707,18 @@ pub fn view<'a>( .font(iced::Font::MONOSPACE) .style(field_style) .on_input(|v| msg(FieldDialogMsg::Formula(v))), - button(text(t!("Evaluate")).size(12)) - .on_press(msg(FieldDialogMsg::Evaluate)) - .style(button_style(false)) - .padding([5, 14]), + row![ + table_button(t!("Average").into_owned(), "Average"), + table_button(t!("Sum").into_owned(), "Sum"), + table_button(t!("Count").into_owned(), "Count"), + table_button(t!("Cell").into_owned(), "Cell"), + Space::new().width(Fill), + button(text(t!("Evaluate")).size(12)) + .on_press(msg(FieldDialogMsg::Evaluate)) + .style(button_style(false)) + .padding([5, 14]), + ] + .spacing(6), ] .spacing(8), ), @@ -629,6 +727,7 @@ pub fn view<'a>( ] .spacing(10), FieldKind::Hyperlink => column![card(t!("Hyperlink").into_owned(), format_panel(state)), preview].spacing(10), + FieldKind::BlockPlaceholder => column![card(t!("Block placeholder").into_owned(), format_panel(state)), preview].spacing(10), _ => column![card(t!("Format").into_owned(), format_panel(state)), preview].spacing(10), }; let (code, _) = state.code(); From 3ae291255852f81eb05888c60ac3a66d890490b6 Mon Sep 17 00:00:00 2001 From: ramox81 <184937705+ramox81@users.noreply.github.com> Date: Fri, 2 Oct 2026 18:07:31 +0300 Subject: [PATCH 04/43] fix(insert): ATTREQ 0 inserts attributes with their defaults, without prompting Co-Authored-By: Claude Opus 5.5 --- src/app/command_driver/entity_commit.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/app/command_driver/entity_commit.rs b/src/app/command_driver/entity_commit.rs index 08c948bd6..4656fab0c 100644 --- a/src/app/command_driver/entity_commit.rs +++ b/src/app/command_driver/entity_commit.rs @@ -984,7 +984,7 @@ impl OpenCADStudio { let i = self.active_tab; // Collect the full AttributeDefinitions owned by this block // record so each created attribute keeps its geometry (#255). - let attdefs: Vec = { + let mut attdefs: Vec = { let doc = &self.tabs[i].scene.document; if let Some(br) = doc.block_records.get(&block_name) { br.entity_handles @@ -1004,6 +1004,12 @@ impl OpenCADStudio { } }; + // ATTREQ 0: attributes take their defaults without prompting. + if !self.tabs[i].scene.document.header.attribute_request { + for attdef in &mut attdefs { + attdef.flags.preset = true; + } + } if attdefs.is_empty() { // No attribute definitions — commit the INSERT directly. let entity = self.tabs[i] From 3f54f2f494d43b1be3d8af995dbbe2841b00a131 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Fri, 2 Oct 2026 20:12:09 +0300 Subject: [PATCH 05/43] fix(field): skip the drawing snapshot when a plot has no field to stamp #1590 cloned the whole document on every plot to evaluate plot-time fields, even in drawings without a single FIELD; a large drawing paid a full copy per plot. The copy is made only when the drawing holds fields. Co-Authored-By: Claude Opus 5.5 --- src/entities/field.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/entities/field.rs b/src/entities/field.rs index fe63acc33..375250697 100644 --- a/src/entities/field.rs +++ b/src/entities/field.rs @@ -382,6 +382,15 @@ pub fn block_has_attribute_fields(document: &CadDocument, block: &str) -> bool { /// Give plot-time fields (PlotDate) the plot's time; returns the hosts whose /// text changed. pub fn stamp_plot_fields(document: &mut CadDocument) -> Vec { + // The context reads a snapshot of the whole drawing; most drawings hold + // no field, and a large one should not be copied for every plot. + let has_fields = document + .objects + .values() + .any(|object| matches!(object, codec::objects::ObjectType::Field(_))); + if !has_fields { + return Vec::new(); + } let snapshot = document.clone(); let context = PlotContext(OcsFieldContext(Some(&snapshot))); document.stamp_plot_fields(&context) From 707ca56dd308e445bb138e36961280f5d41b587f Mon Sep 17 00:00:00 2001 From: abccorsicad Date: Fri, 2 Oct 2026 19:40:47 +0200 Subject: [PATCH 06/43] fix: correct Italian translation for many absurd translations (like Join command and other layout terms) --- locales/it-IT/opencadstudio.ftl | 608 ++++++++++++++++---------------- 1 file changed, 304 insertions(+), 304 deletions(-) diff --git a/locales/it-IT/opencadstudio.ftl b/locales/it-IT/opencadstudio.ftl index bab01a81c..e6be7924a 100644 --- a/locales/it-IT/opencadstudio.ftl +++ b/locales/it-IT/opencadstudio.ftl @@ -33,7 +33,7 @@ ribbon-tab = .annotate = Annotazione .insert = Inserisci .model = Modello - .layout = Disposizione + .layout = Impagina .manage = Gestisci .view = Vista @@ -128,7 +128,7 @@ modal = .save-warning = Avviso di salvataggio .unable-save = Impossibile salvare il disegno .drawing-changed = Il disegno è stato modificato sul disco - .delete-layer = Elimina layer + .delete-layer = Elimina livelli .unsaved-changes = Modifiche non salvate .unsaved-save-prompt = Salvare le modifiche? .point-style = Stile punto @@ -138,7 +138,7 @@ modal = .recovery-prompt = Recupero del disegno .file-name-could-not-be-saved = Impossibile salvare "__ocs_arg_file_name__". .file-name-was-changed-by-another-application = "__ocs_arg_file_name__" è stato modificato da un'altra applicazione. - .count-selected-layers = __ocs_arg_count__ layer selezionati + .count-selected-layers = __ocs_arg_count__ livelloiselezionati .subject-still-has-count-obj-deleting-will-also = __ocs_arg_subject__ __ocs_arg_has__ ancora __ocs_arg_count__ __ocs_arg_obj__. L'eliminazione rimuoverà dal disegno anche __ocs_arg_those__. Continuare? @@ -274,7 +274,7 @@ common = .none-use-shortcuts-set-key-command =(nessuno — utilizzare: SHORTCUTS SET ) .alignment-indented-label-title-case = Allineamento: .background-fill-enabled = Riempimento dello sfondo abilitato - .borders-type-weight-color-spacing-hidden = Bordi (tipo/peso/colore/spaziatura/nascosto) + .borders-type-weight-color-spacing-hidden = Bordi (tipo/spessore/colore/spaziatura/nascosto) .data-type = Tipo di dati: .fill-color-indented-label-sentence-case = Colore di riempimento: .format-string = Stringa di formato: @@ -364,12 +364,12 @@ common = .bottomleft = In basso a sinistra .bottomright = In basso a destra .box = Scatola - .break = Pausa + .break = Spezza .brightness = Luminosità - .by-layer = Per strato - .byblock = PerBlocco - .bycolor = PerColore - .bylayer = PerLayer + .by-layer = DaLayer + .byblock = DaBlocco + .bycolor = DaColore + .bylayer = DaLayer .convtosurface-converted-n-solid-s-to-surface-s = CONVTOSURFACE: convertito(i) solido(i) __ocs_fmt_0__ in superficie(i). .convtosurface-select-a-solid-created-this-sess = CONVTOSURFACE: seleziona un solido creato in questa sessione. .coords-mode-label = COORDS = __ocs_fmt_0__ (__ocs_fmt_1__) @@ -383,7 +383,7 @@ common = .cannot-rename-the-standard-style = Impossibile rinominare lo stile Standard. .catchment-tagged-successfully = Bacino taggato correttamente. .center = Centro - .center-mark-dimcen = Contrassegno centrale (DIMCEN) + .center-mark-dimcen = Contrassegno del centro (DIMCEN) .centered = Centrato .centimeters = Centimetri .chamfer = Smusso @@ -493,14 +493,14 @@ common = .file-locations-are-unavailable-in-the-web-appl = I percorsi dei file non sono disponibili nell'applicazione Web. .fill-color-sentence-case = Colore di riempimento .fill-color-aci-dimtfillclr = Colore riempimento ACI (DIMTFILLCLR) - .fillet = Filetto + .fillet = Raccordo .finalize-command-repeat-last = Finalizza comando/Ripeti per ultimo .finalizing = Finalizzazione… .find-and-replace = Trova e sostituisci .first-seg-angle = Primo seg. angolo: .fit = Adatta - .fit-dimatfit = Vestibilità (DIMATFIT) - .fit-legacy-dimfit = Vestibilità (precedente DIMFIT) + .fit-dimatfit = Disposizione (DIMATFIT) + .fit-legacy-dimfit = Disposizione (precedente DIMFIT) .fixed-height = Altezza fissa: .fixed-length-dimfxl = Lunghezza fissa (DIMFXL) .fixed-length-ext-lines-dimfxlon = Linee esterne a lunghezza fissa (DIMFXLON) @@ -527,10 +527,10 @@ common = .groups = Gruppi .h-margin = H Margine: .hatchedit-hatch-entity-not-found = HATCHEDIT: entità tratteggio non trovata. - .hatchedit-hatch-updated = HATCHEDIT: portello aggiornato. + .hatchedit-hatch-updated = HATCHEDIT: tratteggio aggiornato. .hatchedit-not-a-hatch-entity = HATCHEDIT: non un'entità di tratteggio. .handle = Maniglia - .hatch = Portello + .hatch = Tratteggio .header-row = Riga di intestazione: .header-row-suppressed = Riga di intestazione soppressa .height = Altezza @@ -565,7 +565,7 @@ common = .jis = JIS .join-count-in-object-s-joined-into-count-out = JOIN: oggetto/i __ocs_fmt_0__ uniti in __ocs_fmt_1__. .jog-angle-dimjogang = Angolo di jog ° (DIMJOGANG) - .join = Partecipa + .join = Unisci .keep-0-ft-drop-0-in = Mantieni 0 piedi, lascia cadere 0 dentro .keep-recent-files = Conserva i file recenti .kilometers = Chilometri @@ -585,12 +585,12 @@ common = .landscape = Paesaggio .language-title-case = Lingua .language-label-title-case = Lingua: - .layer = Strato + .layer = Livello .layer-matched-to-layer = Livello corrispondente a "__ocs_fmt_0__". .layer-state-name-already-exists =Lo stato del livello "__ocs_fmt_0__" esiste già. .layer-state-name-was-not-found = Lo stato del livello "__ocs_fmt_0__" non è stato trovato. .layer-state-name-cannot-be-empty = Il nome dello stato del livello non può essere vuoto. - .layers = Strati + .layers = Livelli .layout = Disposizione .layout-name-silindi = Layout "__ocs_fmt_0__" eliminato .layout-new-name-created-use-mview-to-add-a-vie = Layout "__ocs_fmt_0__" creato: utilizza MVIEW per aggiungere una finestra @@ -600,13 +600,13 @@ common = .layout-manager = Responsabile del layout .layout-name-cannot-be-empty = Il nome del layout non può essere vuoto. .layout-renamed-old-name-new-name = Layout rinominato: '__ocs_fmt_0__' → '__ocs_fmt_1__' - .leader = Capo + .leader = Leader .leader-format = Formato leader .leader-structure = Struttura del leader .leaders = Leader .leading-trailing = Principale e finale .left = A sinistra - .left-attachment = Allegato sinistro: + .left-attachment = Aggancio a sinistra: .left-to-right-dimtxtdirection = Da sinistra a destra (DIMTXTDIRECTION) .length = Lunghezza .light = Luce @@ -651,7 +651,7 @@ common = .millimeters = Millimetri .model-title-case = Modello .modify = Modifica - .move = Muoviti + .move = Sposta .multiple = Molteplici .multiplier-dimaltf = Moltiplicatore (DIMALTF) .name-title-case = Nome @@ -676,7 +676,7 @@ common = .oblique = Obliquo (°): .oblique-angle = Angolo obliquo .off = Spento - .offset = Compensazione + .offset = Parallela .on = Su .open = Aperto .open-dwg-dxf-not-yet-implemented = Aperto DWG/DXF: non ancora implementato. @@ -720,13 +720,13 @@ common = .pick-an-object = Scegli un oggetto .pinned = Appuntato .place-text-manually-dimupt = Posiziona il testo manualmente (DIMUPT) - .plot = Trama - .plot-style = Stile di trama + .plot = Stampa + .plot-style = Stile di stampa .plot-style-loaded-color-entries = Stile di stampa '__ocs_fmt_0__' caricato (voci colore __ocs_fmt_1__). .plot-style-table-cleared = Tabella stili di stampa cancellata. .plot-style-table-saved-to = Tabella stili di stampa salvata in "__ocs_fmt_0__". - .plot-window-x0-2-y0-2-to-x1-2-y1-2 = Finestra di tracciamento: da __ocs_fmt_0__,__ocs_fmt_1__ a __ocs_fmt_2__,__ocs_fmt_3__ - .plot-window-x1-2-y1-2-to-x2-2-y2-2 = Finestra di tracciamento: da __ocs_fmt_0__,__ocs_fmt_1__ a __ocs_fmt_2__,__ocs_fmt_3__ + .plot-window-x0-2-y0-2-to-x1-2-y1-2 = Finestra di stampa: da __ocs_fmt_0__,__ocs_fmt_1__ a __ocs_fmt_2__,__ocs_fmt_3__ + .plot-window-x1-2-y1-2-to-x2-2-y2-2 = Finestra di stampa: da __ocs_fmt_0__,__ocs_fmt_1__ a __ocs_fmt_2__,__ocs_fmt_3__ .plugin-id-failed-to-load-e = Impossibile caricare il plug-in "__ocs_fmt_0__": __ocs_fmt_1__ .plugin-manager = Gestore dei plugin .point = Punto @@ -776,8 +776,8 @@ common = .restore = Ripristina .retry = Riprova .reverse = Inverso - .right = Giusto - .right-attachment = Allegato destro: + .right = Destra + .right-attachment = Aggancio a destra: .rotate = Ruota .rotation = Rotazione .round-off-dimaltrnd = Arrotondare (DIMALTRND) @@ -794,17 +794,17 @@ common = .slice-select-exactly-one-solid-created-this-se = SLICE: seleziona esattamente un solido creato in questa sessione. .slice-the-plane-does-not-cross-the-solid-on-th = SLICE: il piano non attraversa il solido dal lato mantenuto. .both = Both - .slice-select-at-least-one-target = SLICE: select at least one solid or surface. - .slice-invalid-plane = SLICE: the cutting plane is invalid. - .slice-side-point-on-plane = SLICE: choose a point away from the cutting plane. - .slice-plane-misses-target = SLICE: the cutting plane does not cross every selected object; no object was changed. - .slice-unsupported-intersection = SLICE: the selected geometry has an unsupported surface intersection; no object was changed. - .slice-coincident-plane = SLICE: the cutting plane is coincident with source geometry; no object was changed. - .slice-topology-refused = SLICE: the selected topology could not be split safely; no object was changed. - .slice-result-encode-failed = SLICE: a result could not be encoded; no object was changed. - .slice-result-display-failed = SLICE: a result could not be displayed completely; no object was changed. - .slice-result-commit-failed = SLICE: a result could not be committed; all source objects were retained. - .slice-retained-update-failed = SLICE: a retained result could not be updated. + .slice-select-at-least-one-target = SLICE: seleziona almeno un solido o una superficie. + .slice-invalid-plane = SLICE: il piano di taglio non è valido. + .slice-side-point-on-plane = SLICE: scegli un punto esterno al piano di taglio. + .slice-plane-misses-target = SLICE: il piano di taglio non interseca alcun oggetto selezionato; nessuna modifica apportata. + .slice-unsupported-intersection = SLICE: la geometria selezionata ha una intersezione fra superfici non supportata; nessuna modifica apportata. + .slice-coincident-plane = SLICE: il piano di taglio combacia con la geometria selezionata; nessuna modifica apportata. + .slice-topology-refused = SLICE: la topologia selezionata non può essere modificata in modo affidabile; nessuna modifica apportata. + .slice-result-encode-failed = SLICE: il risultato non si riesce a codificare; nessuna modifica apportata. + .slice-result-display-failed = SLICE: il risultato non si riesce a visualizzare; nessuna modifica apportata. + .slice-result-commit-failed = SLICE: impossibile ottenere il risultato; gli oggetti originali sono rimasti come prima. + .slice-retained-update-failed = SLICE: non riesco ad aggiornare il risultato ottenuto. .slice-created-results = SLICE: created __ocs_fmt_0__ result object(s). .splinefit-fit-a-spline-through-n-points = SPLINEFIT: adatta una spline attraverso i punti __ocs_fmt_0__. .splinefit-need-at-least-3-points =SPLINEFIT: servono almeno 3 punti. @@ -842,8 +842,8 @@ common = .send-feedback = Invia feedback .sent-to-printer-printer = Inviato alla stampante: __ocs_fmt_0__ .set-current = Imposta corrente - .shade-plot = Trama dell'ombra - .shadow-flags = Bandiere d'ombra + .shade-plot = Stampa ombreggiatura + .shadow-flags = Opzioni di ombreggiatura .single = Singolo .size = Dimensioni .snap-override-label-next-pick-only = Sostituzione dello snap: __ocs_fmt_0__ (solo scelta successiva). @@ -858,7 +858,7 @@ common = .start =Inizia .start-angle = Angolo iniziale .status = Stato - .stretch = Allungare + .stretch = Stirare .style-name-created = Stile "__ocs_fmt_0__" creato. .style-name-deleted = Stile "__ocs_fmt_0__" eliminato. .style-new-already-exists = Lo stile "__ocs_fmt_0__" esiste già. @@ -908,7 +908,7 @@ common = .toggle-object-snap-tracking = Attiva/disattiva il tracciamento dello snap ad oggetto .toggle-ortho = Attiva/disattiva orto .toggle-polar-tracking = Attiva/disattiva il tracciamento polare - .tol-decimals-dimalttd = Tol decimali (DIMALTTD) + .tol-decimals-dimalttd = Tol. decimali (DIMALTTD) .tol-zero-supp-dimalttz = Soppressione zeri della tolleranza (DIMALTTZ) .tol-decimals-dimtdec = Tol. decimali (DIMTDEC) .tol-vert-just-dimtolj =Tol. verde solo (DIMTOLJ) @@ -968,13 +968,13 @@ common = .view-value = Visualizza: __ocs_fmt_0__ .viewport = Visualizzazione .viewport-visual-style-label = Stile di visualizzazione della finestra: __ocs_fmt_0__ - .visual-style = Stile visivo - .visual-style-label = Stile visivo: __ocs_fmt_0__ + .visual-style = Stile visuale + .visual-style-label = Stile visuale: __ocs_fmt_0__ .wblock-saved-block-name = WBLOCK Salvato "__ocs_fmt_0__" → "__ocs_fmt_1__" .wblock-save-failed-error = WBLOCK salvataggio non riuscito: __ocs_fmt_0__ .web = Rete .wedge =Cuneo - .weight = Peso + .weight = Spessore .welcome = Benvenuto .white = Bianco .width = Larghezza @@ -982,7 +982,7 @@ common = .width-factor-label-title-case = Fattore di larghezza: .width-factor-sentence-case = Fattore di larghezza .window = Finestra - .wipeout = Eliminazione + .wipeout = Entità coprente .wireframe = Wireframe .with-text = Con testo .world = Mondo @@ -1012,8 +1012,8 @@ common = .acquired = __ocs_fmt_0__ acquisito. .alias-es-applied = Alias __ocs_fmt_0__ applicati. .group-s-dissolved = Gruppo(i) __ocs_fmt_0__ disciolto. - .layer-s-turned = Strati __ocs_fmt_0__ trasformati in __ocs_fmt_1__ - .layer-s = __ocs_fmt_0__ strato(i) __ocs_fmt_1__ + .layer-s-turned = Livelli __ocs_fmt_0__ trasformati in __ocs_fmt_1__ + .layer-s = __ocs_fmt_0__ livello(i) __ocs_fmt_1__ .mod-shortcuts = ── __ocs_arg_MOD__ Scorciatoie ────────────────────────────────────── .custom-overrides-shortcuts-set = ── Sostituzioni personalizzate (SHORTCUTS SET) ────────────────── .function-keys = ── Tasti funzione ────────────────────────────────────── @@ -1156,7 +1156,7 @@ common = .step-files = { common.files } (STEP) .import-obj-mesh = { common.import }: OBJ · { properties.mesh } .wavefront-obj = Wavefront OBJ - .layer-s-set-to = __ocs_fmt_0__ strato(i) __ocs_fmt_1__ + .layer-s-set-to = __ocs_fmt_0__ livello(i) __ocs_fmt_1__ .isometric-plane = Piano isometrico: __ocs_fmt_0__. .drafting-rotation-reset-to-world-at-0 = Rotazione di disegno reimpostata a 0° nel sistema globale. .length-format-is-now = Il formato della lunghezza ora è __ocs_fmt_0__. @@ -1344,8 +1344,8 @@ common = .reset = Reimposta .lineweight = { common.lineweight-title-case }: .layers-using-aci = { common.layers } (ACI __ocs_fmt_0__) - .layer-dac1d7 = Strato - .layers-e3b816 = Strati + .layer-dac1d7 = Livello + .layers-e3b816 = Livelli .no-layers-use-this-aci-in-the-current-drawing = Nessun layer nel disegno corrente usa questo ACI. .block-palette = Tavolozza blocchi .search-blocks = Cerca blocchi… @@ -1377,7 +1377,7 @@ common = .no-standard-loaded = Nessuno standard caricato. .map = Associa .map-same = Associa nomi uguali - .force-objects-to-bylayer = Forza gli oggetti a ByLayer + .force-objects-to-bylayer = Forza gli oggetti a DaLayer .write-translation-log = Scrivi registro di conversione dei layer .save-mappings = { common.save }: { common.mappings }… .load-mappings = { common.load }: { common.mappings }… @@ -1883,32 +1883,32 @@ common = .dimensional = Dimensionali .show-hide = Mostra/Nascondi - .enter-a-valid-cell-range-such-as-a1-d10 = Enter a valid cell range such as A1:D10. - .named-ranges-require-a-spreadsheet-file = Named ranges require a spreadsheet file. - .select-a-named-range = Select a named range. - .the-named-range-was-not-found = The named range was not found. - .the-named-range-does-not-refer-to-a-worksheet-cell-range = The named range does not refer to a worksheet cell range. - .the-spreadsheet-contains-no-worksheets = The spreadsheet contains no worksheets. - .the-selected-data-source-is-empty = The selected data source is empty. - .the-data-link-no-longer-exists = The data link no longer exists. - .writing-to-this-data-link-is-disabled = Writing to this data link is disabled. - .writing-linked-data-is-supported-for-csv-and-text-sources = Writing linked data is supported for CSV and text sources. + .enter-a-valid-cell-range-such-as-a1-d10 = Indica un intervallo valido, come A1:D10. + .named-ranges-require-a-spreadsheet-file = Intervalli denominati richiedono un foglio elettronico. + .select-a-named-range = Seleziona un intervallo denominato. + .the-named-range-was-not-found = Il nome non è stato trovato. + .the-named-range-does-not-refer-to-a-worksheet-cell-range = Il nome indicato non si riferisce a un intervallo sul foglio elettronico. + .the-spreadsheet-contains-no-worksheets = Il file non contiene fogli elettronici. + .the-selected-data-source-is-empty = La sorgente dati selezionata è vuota. + .the-data-link-no-longer-exists = Il link ai dati non esiste più. + .writing-to-this-data-link-is-disabled = La scrittura sui dati collegati è disattivata. + .writing-linked-data-is-supported-for-csv-and-text-sources = Scrivere sui dati collegati è supportato per i CSV e le sorgenti di testo. .data-source-not-found = Data source not found: __ocs_arg_path__ - .select-at-least-one-property = Select at least one property. + .select-at-least-one-property = Seleziona almeno una proprietà. .select-a-data-link = Select a data link. - .the-selected-data-link-no-longer-exists = The selected data link no longer exists. - .columns-rows-width-and-height-must-be-positive-values = Columns, rows, width, and height must be positive values. - .choose-a-spreadsheet-file = Choose a Spreadsheet File - .spreadsheet-files = Spreadsheet Files - .enter-a-data-link-name = Enter a data link name. - .a-data-link-with-that-name-already-exists = A data link with that name already exists. - .data-link-deleted-existing-table-values-were-retained = Data link deleted; existing table values were retained. - .no-objects-were-selected-when-the-wizard-opened = No objects were selected when the wizard opened. - .add-a-drawing-or-include-the-current-drawing = Add a drawing or include the current drawing. - .no-extractable-objects-were-found-in-the-selected-source = No extractable objects were found in the selected source. - .select-at-least-one-object-type = Select at least one object type. - .choose-at-least-one-output = Choose at least one output. - .data-extraction-settings = Data Extraction Settings + .the-selected-data-link-no-longer-exists = Il link ai dati selezionato non esiste più. + .columns-rows-width-and-height-must-be-positive-values = Colonne, Righe, Altezza e Larghezza devono essere numeri positivi. + .choose-a-spreadsheet-file = Scegli un file di foglio elettronico + .spreadsheet-files = Fogli elettronici + .enter-a-data-link-name = Indica un link ai dati. + .a-data-link-with-that-name-already-exists = Un link ai dati con questo nome esiste già. + .data-link-deleted-existing-table-values-were-retained = Link ai dati eliminato; i valori nelle tabelle esistenti sono stati mantenuti. + .no-objects-were-selected-when-the-wizard-opened = Nessun oggetto selezionato quando l'autocomposizione è stata attivata. + .add-a-drawing-or-include-the-current-drawing = Aggiungi un disegno o includi il disegno corrente. + .no-extractable-objects-were-found-in-the-selected-source = Nessun oggetto trovato nella sorgente selezionata. + .select-at-least-one-object-type = Seleziona almeno un tipo di oggetto. + .choose-at-least-one-output = Scegli almeno un output. + .data-extraction-settings = Impostazioni di estrazione dati .add-drawings = Add Drawings .select-objects-or-settings-selected-enter-to-apply = %__ocs_fmt_0__ Select objects or [Settings] (%__ocs_fmt_1__ selected, Enter to apply): .select-objects-or-settings = %__ocs_fmt_0__ Select objects or [Settings]: @@ -1917,121 +1917,121 @@ common = .object-snap-on-f4-3d = 3D Object Snap On (F4) .object-snap-modes-3d = 3D Object Snap modes .a-numeric-shell-offset-distance-is-required = A numeric shell offset distance is required. - .a-selected-edge-no-longer-belongs-to-the-body = A selected edge no longer belongs to the body. - .a-selected-face-could-not-be-resolved = A selected face could not be resolved. - .a-selected-face-does-not-belong-to-the-solid = A selected face does not belong to the solid. - .align-scale-objects-based-on-alignment-points-yes-no-no = ALIGN Scale objects based on alignment points? [Yes / No] : - .annoreset-no-selected-object-has-alternate-scale-representations = ANNORESET: no selected object has alternate scale representations. - .annoreset-synchronized-object-s-from-the-current-scale = ANNORESET: synchronized __ocs_fmt_0__ object(s) from the current scale. - .adaptive-grid = Adaptive grid - .add-drawing-folder = Add Drawing Folder - .add-drawings-2 = Add drawings… - .add-folder = Add folder… - .add-parameter-2 = Add parameter - .all-other-rows = All other rows - .allow-selection-cycling = Allow selection cycling - .allow-writing-to-source-file = Allow writing to source file - .break-specify-second-break-point-or-first-point = BREAK Specify second break point or [First point]: + .a-selected-edge-no-longer-belongs-to-the-body = Uno spigolo selezionato non appartiene più al corpo. + .a-selected-face-could-not-be-resolved = Una delle geometrie delle facce non può essere risolta. + .a-selected-face-does-not-belong-to-the-solid = Una delle facce selezionate non appartiene al corpo. + .align-scale-objects-based-on-alignment-points-yes-no-no = ALIGN Scalare gli oggetti in base ai punti di allineamento? [Yes / No] : + .annoreset-no-selected-object-has-alternate-scale-representations = ANNORESET: nessuno degli oggetti selezionati ha scale multiple di rappresentazione. + .annoreset-synchronized-object-s-from-the-current-scale = ANNORESET: sincronizzati __ocs_fmt_0__ object(s) dalla scala corrente. + .adaptive-grid = Griglia adattiva + .add-drawing-folder = Aggiungi cartella con disegni + .add-drawings-2 = Aggiungi disegni… + .add-folder = Aggiungi cartella… + .add-parameter-2 = Aggiungi parametro + .all-other-rows = Tutte le altre righe + .allow-selection-cycling = Permetti selezione ciclica + .allow-writing-to-source-file = Attiva scrittura sul file di origine + .break-specify-second-break-point-or-first-point = BREAK Specifica il secondo punto per spezzare o [First point]: .begin = Begin - .chamferedge-select-a-base-face-edge = CHAMFEREDGE: select a base face edge. - .cannot-delete-beyond-this = Cannot delete beyond this. - .cell-range = Cell range - .center-of-face = Center of face + .chamferedge-select-a-base-face-edge = CHAMFEREDGE: seleziona uno spigolo sulla faccia di base. + .cannot-delete-beyond-this = Impossibile eliminare oltre. + .cell-range = intervallo celle + .center-of-face = Centro della faccia .choose-output = Choose output .clipboard-access-is-unavailable-press-ctrl-c-or-command-c-to-copy-the-selected-history = Clipboard access is unavailable. Press Ctrl+C or Command+C to copy the selected history. - .column-row-settings = Column & row settings - .combine-identical-rows = Combine identical rows - .constraint-settings = Constraint Settings - .constraint-type = Constraint Type - .copied = Copied - .create-a-new-data-link = Create a New Data Link - .create-a-new-data-extraction = Create a new data extraction - .current-drawing = Current drawing + .column-row-settings = Impostazioni colonna & riga + .combine-identical-rows = Combina righe identiche + .constraint-settings = Impostazioni vincoli + .constraint-type = Tipo di vincolo + .copied = Copiato + .create-a-new-data-link = Crea un nuovo link ai dati + .create-a-new-data-extraction = Crea una nuova estrazione dati + .current-drawing = disegno corrente .cursor-dependent-position = Cursor-dependent position - .dataextraction-specify-insertion-point = DATAEXTRACTION Specify insertion point: - .dataextraction-external-file-created = DATAEXTRACTION: external file created. - .dimbreak-select-dimension-to-add-remove-break-or-multiple = DIMBREAK Select dimension to add/remove break or [Multiple]: - .dimbreak-select-dimensions-selected-press-enter-when-done = DIMBREAK Select dimensions (__ocs_fmt_0__ selected, press Enter when done): - .dimbreak-select-object-to-break-dimension-or-auto-manual-remove-auto = DIMBREAK Select object to break dimension or [Auto/Manual/Remove] : - .dimbreak-specify-first-break-point = DIMBREAK Specify first break point: - .dimbreak-specify-second-break-point = DIMBREAK Specify second break point: - .dimbreak-no-editable-dimensions-were-selected = DIMBREAK: no editable dimensions were selected. - .dimbreak-no-intersections-were-found = DIMBREAK: no intersections were found. - .dimbreak-removed-breaks-from-dimension-s = DIMBREAK: removed breaks from __ocs_fmt_0__ dimension(s). - .dimbreak-select-a-dimension = DIMBREAK: select a dimension. - .dimbreak-updated-dimension-s = DIMBREAK: updated __ocs_fmt_0__ dimension(s). - .dimedit-enter-new-dimension-text-measured-value = DIMEDIT Enter new dimension text : - .dimedit-enter-obliquing-angle-press-enter-for-none = DIMEDIT Enter obliquing angle (press Enter for none): - .dimedit-enter-type-of-dimension-editing-home-new-rotate-oblique-home = DIMEDIT Enter type of dimension editing [Home/New/Rotate/Oblique] : + .dataextraction-specify-insertion-point = DATAEXTRACTION specifica punto di inserimento: + .dataextraction-external-file-created = DATAEXTRACTION: file esterno creato. + .dimbreak-select-dimension-to-add-remove-break-or-multiple = DIMBREAK Selezionare quota per aggiunta/rimozione interruzione o [Multipla]: + .dimbreak-select-dimensions-selected-press-enter-when-done = DIMBREAK Seleziona quote (__ocs_fmt_0__ selected, premi Enter al termine): + .dimbreak-select-object-to-break-dimension-or-auto-manual-remove-auto = DIMBREAK Seleziona oggetti per interrompere le quote o [Auto/Manual/Remove] : + .dimbreak-specify-first-break-point = DIMBREAK Specifica primo punto di interruzione: + .dimbreak-specify-second-break-point = DIMBREAK Specifica secondo punto di interruzione: + .dimbreak-no-editable-dimensions-were-selected = DIMBREAK: nessuna quota modificabile selezionata. + .dimbreak-no-intersections-were-found = DIMBREAK: nessuna intersezione trovata. + .dimbreak-removed-breaks-from-dimension-s = DIMBREAK: rimosse interruzioni da __ocs_fmt_0__ quota(e). + .dimbreak-select-a-dimension = DIMBREAK: seleziona una quota. + .dimbreak-updated-dimension-s = DIMBREAK: aggiornate __ocs_fmt_0__ quota(e). + .dimedit-enter-new-dimension-text-measured-value = DIMEDIT Nuovo testo quota : + .dimedit-enter-obliquing-angle-press-enter-for-none = DIMEDIT Angolo obliquo (Enter per nessuno): + .dimedit-enter-type-of-dimension-editing-home-new-rotate-oblique-home = DIMEDIT Scegli tipo di modifica quota [Home/New/Rotate/Oblique] : .dimedit-select-objects = DIMEDIT Select objects: - .dimedit-specify-angle-for-dimension-text = DIMEDIT Specify angle for dimension text: - .dimedit-no-editable-dimensions-were-selected = DIMEDIT: no editable dimensions were selected. + .dimedit-specify-angle-for-dimension-text = DIMEDIT Selezionare l'angolo del testo di quota: + .dimedit-no-editable-dimensions-were-selected = DIMEDIT: nessuna quota modificabile selezionata. .dimedit-updated-dimension-s = DIMEDIT: updated __ocs_fmt_0__ dimension(s). - .dimjogline-select-dimension-to-add-jog-or-remove = DIMJOGLINE Select dimension to add jog or [Remove]: - .dimjogline-select-dimension-to-remove-jog = DIMJOGLINE Select dimension to remove jog: - .dimjogline-specify-jog-location-or-press-enter = DIMJOGLINE Specify jog location (or press Enter): + .dimjogline-select-dimension-to-add-jog-or-remove = DIMJOGLINE Scegli la quota a cui aggiungere la riduzione o [Remove]: + .dimjogline-select-dimension-to-remove-jog = DIMJOGLINE Scegli la quota a cui rimuovere la riduzione: + .dimjogline-specify-jog-location-or-press-enter = DIMJOGLINE specifica la posizione della riduzione (o premi Enter): .dimjogline-jog-added = DIMJOGLINE: jog added. .dimjogline-jog-removed = DIMJOGLINE: jog removed. - .dimjogline-select-a-linear-or-aligned-dimension = DIMJOGLINE: select a linear or aligned dimension. - .dimspace-specify-distance-between-dimensions-or-auto-auto = DIMSPACE Specify distance between dimensions or [Auto] : - .dimspace-enter-a-non-negative-spacing-value-or-auto = DIMSPACE: enter a non-negative spacing value or Auto. - .dimspace-select-a-linear-or-aligned-dimension = DIMSPACE: select a linear or aligned dimension. + .dimjogline-select-a-linear-or-aligned-dimension = DIMJOGLINE: selezionare una quota lineare o allineata. + .dimspace-specify-distance-between-dimensions-or-auto-auto = DIMSPACE Specificare la distanza fra le quote o [Auto] : + .dimspace-enter-a-non-negative-spacing-value-or-auto = DIMSPACE: inserisci una spaziatura non negativa o Auto. + .dimspace-select-a-linear-or-aligned-dimension = DIMSPACE: selezionare una quota lineare o allineata. .dimspace-select-one-or-more-linear-or-aligned-dimensions = DIMSPACE: select one or more linear or aligned dimensions. - .dimspace-spacing-value-cannot-be-negative = DIMSPACE: spacing value cannot be negative. - .dimtedit-specify-angle-for-dimension-text = DIMTEDIT Specify angle for dimension text: - .dimtedit-specify-new-location-for-dimension-text-or-left-right-center-home-angle = DIMTEDIT Specify new location for dimension text or [Left/Right/Center/Home/Angle]: - .dimtedit-select-a-dimension = DIMTEDIT: select a dimension. + .dimspace-spacing-value-cannot-be-negative = DIMSPACE: la spaziatura non può essere negativa. + .dimtedit-specify-angle-for-dimension-text = DIMTEDIT specifica l'angolo per il testo: + .dimtedit-specify-new-location-for-dimension-text-or-left-right-center-home-angle = DIMTEDIT specifica una nuova posizione per il testo o [Left/Right/Center/Home/Angle]: + .dimtedit-select-a-dimension = DIMTEDIT: seleziona una quota. .divide-marker-s-placed = DIVIDE: __ocs_fmt_0__ marker(s) placed. .dof = DOF: __ocs_fmt_0__ .draworder-selection-reordered-relative-to-reference-objects = DRAWORDER: selection reordered relative to reference objects. - .data-extraction = Data Extraction - .data-extraction-wizard = Data Extraction Wizard - .data-link-manager = Data Link Manager - .data-extraction-2 = Data extraction - .data-link = Data link - .data-link-name = Data link name - .data-rows = Data rows - .define-data-source = Define data source - .display-quick-properties-palette-on-selection = Display Quick Properties palette on selection - .display-selection-cycling-list-box = Display Selection Cycling List Box - .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs - .display-grid-beyond-limits = Display grid beyond Limits + .data-extraction = Estrazione dati + .data-extraction-wizard = Autocomposizione per l'estrazione dati + .data-link-manager = Gstione link ai dati + .data-extraction-2 = Estrazione dati + .data-link = Link ai dati + .data-link-name = Nome del link ai dati + .data-rows = Righe dei dati + .define-data-source = Definizione della sorgente dati + .display-quick-properties-palette-on-selection = Mostra proprietà rapide alla selezione + .display-selection-cycling-list-box = Mostra box elenco per la selezione ciclica + .display-coordinate-input-near-crosshairs = Mostra le coordinate vicino al mirino + .display-grid-beyond-limits = Mostra griglia oltre ai limiti .display-selection-candidate-list-box-on-click = Display selection candidate list box on click - .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. + .distance-and-angle-tolerances-must-be-non-negative-numbers = Distanze e tolleranze degli angoli non possono essere numeri negativi. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ .draw-section = Draw section .drawing-table = Drawing table .drawings-folders = Drawings / folders .dynamic-prompts = Dynamic Prompts - .edit-an-existing-data-extraction = Edit an existing data extraction + .edit-an-existing-data-extraction = Modifica una estrazione dati esistente .editing-weighted-or-tolerance-fitted-interpolation-data-is-not-supported = Editing weighted or tolerance-fitted interpolation data is not supported. - .empty-table = Empty table - .enable-pointer-input-f12 = Enable Pointer Input (F12) - .enable-dimension-input-fields = Enable dimension input fields + .empty-table = Tabella vuota + .enable-pointer-input-f12 = Attiva input dinamico (F12) + .enable-dimension-input-fields = Attiva campi di input sulle quote .enter-a-body-editing-option-shell-exit = Enter a body editing option [Shell/eXit]: .enter-a-solid-editing-option-body-exit = Enter a solid editing option [Body/eXit]: - .entire-sheet = Entire sheet - .equal-x-and-y-spacing = Equal X and Y spacing - .external-file = External file - .extraction-settings = Extraction settings - .fillet-select-2d-polyline-r = FILLET Select 2D polyline [R=__ocs_fmt_0__]: - .fillet-select-first-object-or-polyline-radius-r = FILLET Select first object or [Polyline/Radius] [R=__ocs_fmt_0__]: - .fillet-specify-fillet-radius-or-first-point = FILLET Specify fillet radius or first point <__ocs_fmt_0__>: - .fillet-specify-second-point-for-radius = FILLET Specify second point for radius: + .entire-sheet = Foglio intero + .equal-x-and-y-spacing = Spaziature X e Y uguali + .external-file = File esterno + .extraction-settings = Impostazioni di estrazione + .fillet-select-2d-polyline-r = FILLET Seleziona una polilinea 2D [R=__ocs_fmt_0__]: + .fillet-select-first-object-or-polyline-radius-r = FILLET Selezionare primo oggetto o [Polyline/Radius] [R=__ocs_fmt_0__]: + .fillet-specify-fillet-radius-or-first-point = FILLET Specificare raggio di raccordo o primo punto <__ocs_fmt_0__>: + .fillet-specify-second-point-for-radius = FILLET Specificare secondo punto per il raggio: .file = File - .file-not-found-check-the-saved-path = File not found — check the saved path. - .first-row = First row + .file-not-found-check-the-saved-path = File non trovato — controllare il percorso salvato. + .first-row = Prima riga .fit-data-cannot-be-purged-without-a-stored-control-curve = Fit data cannot be purged without a stored control curve. .fit-data-does-not-define-a-valid-control-curve = Fit data does not define a valid control curve. .fit-points-do-not-define-a-valid-spline = Fit points do not define a valid spline. .formula = Formula - .full-path = Full path + .full-path = Percorso completo .fully-constrained-no-remaining-degrees-of-freedom = Fully constrained — no remaining degrees of freedom - .grid-on-f7 = Grid On (F7) - .grid-x-spacing = Grid X spacing: - .grid-y-spacing = Grid Y spacing: - .grid-behavior = Grid behavior - .grid-spacing = Grid spacing + .grid-on-f7 = Griglia On (F7) + .grid-x-spacing = Spaziatura X: + .grid-y-spacing = Spaziatura Y: + .grid-behavior = Aspetto griglia + .grid-spacing = Spaziatura griglia .hatchedit-pattern-scale-angle-style-origin-properties-color-layer-transparency-draw-order-associate-disassociate-annotative-recreate-boundary-separate-hatches-properties = HATCHEDIT Pattern:%__ocs_fmt_0__ Scale:%__ocs_fmt_1__ Angle:%__ocs_fmt_2__ [Style/Origin/Properties/COlor/LAyer/Transparency/DRaw order/ASsociate/DIsassociate/ANnotative/recreate Boundary/separate Hatches] : .intersect-created-result-object-s = INTERSECT: created %__ocs_fmt_0__ result object(s). .intersect-no-positive-area-common-result-original-object-s-retained = INTERSECT: no positive-area common result; %__ocs_fmt_0__ original object(s) retained. @@ -2040,17 +2040,17 @@ common = .intersect-the-selected-coincident-geometry-is-ambiguous = INTERSECT: the selected coincident geometry is ambiguous. .intersect-the-selected-objects-do-not-have-a-supported-coplanar-surface-intersection = INTERSECT: the selected objects do not have a supported coplanar surface intersection. .intersect-the-selected-topology-could-not-be-intersected-safely = INTERSECT: the selected topology could not be intersected safely. - .include-current-drawing = Include current drawing - .include-subfolders = Include subfolders - .increment-angle = Increment angle: + .include-current-drawing = Includi disegno corrente + .include-subfolders = Includi sottocartelle + .increment-angle = Angolo incremento: .indicator-fill-color = Indicator Fill Color .indicator-transparency = Indicator Transparency - .insert-table = Insert Table - .insert-data-extraction-table-into-drawing = Insert data extraction table into drawing - .insert-options = Insert options - .insert-table-after-saving-link = Insert table after saving link - .insertion-behavior = Insertion behavior - .keep-table-updated-to-source-formatting = Keep table updated to source formatting + .insert-table = Inserisci tabella + .insert-data-extraction-table-into-drawing = Inserisci tabella con i dati estratti nel disegno + .insert-options = Opzioni inserimento + .insert-table-after-saving-link = Inserisci tabella dopo aver salvato il link + .insertion-behavior = Comportamento inserimento + .keep-table-updated-to-source-formatting = Aggiorna tabella con formatazione di origine .knot = Knot .leader-enter-an-annotation-option-none-mtext = LEADER Enter an annotation option [None/Mtext]: .leader-enter-first-line-of-annotation-text-or-options = LEADER Enter first line of annotation text or : @@ -2071,30 +2071,30 @@ common = .measure-0-markers-placed = MEASURE: 0 markers placed. .measure-marker-s-placed = MEASURE: __ocs_fmt_0__ marker(s) placed. .maintain-associativity = Maintain associativity - .major-line-every = Major line every: - .midpoint-on-edge = Midpoint on edge - .moment-of-inertia = Moment of inertia + .major-line-every = Linea principale ogni: + .midpoint-on-edge = Punto medio su spigolo + .moment-of-inertia = Momento di inerzia .more-options = More options - .move-down = Move Down - .move-up = Move Up + .move-down = Sposta giù + .move-up = Sposta su .named-parameters = Named Parameters - .named-range = Named range - .nearest-to-face = Nearest to face - .no-path = No path + .named-range = Intervallo con nome + .nearest-to-face = Vicino sulla faccia + .no-path = Nessun percorso .no-preview-available = No preview available. .no-surfaces-selected = No surfaces selected. .objectscale-the-selected-objects-already-have-the-current-scale-or-do-not-support-annotation-scales = OBJECTSCALE: the selected objects already have the current scale, or do not support annotation scales. .objectscale-the-selected-objects-do-not-have-the-current-scale = OBJECTSCALE: the selected objects do not have the current scale. .objectscale-the-current-scale-on-object-s = OBJECTSCALE: __ocs_fmt_0__ the current scale on __ocs_fmt_1__ object(s). .object-snap-on-f3 = Object Snap On (F3) - .object-snap-tracking-on-f11 = Object Snap Tracking On (F11) - .object-snap-modes-2 = Object Snap modes + .object-snap-tracking-on-f11 = Traccia snap ad oggetti On (F11) + .object-snap-modes-2 = Modalità snap ad oggetti .on-by-default-turn-off-to-show-just-the-constraint-glyph-in-the-viewport-enough-to-see-that-a-constraint-is-present-without-the-driven-value-or-named-parameter-text-covering-nearby-geometry = On by default. Turn off to show just the constraint glyph in the viewport — enough to see that a constraint is present — without the driven value or named parameter text covering nearby geometry. .one-or-more-parametric-constraints-conflict-or-are-redundant-click-to-remove-one-and-re-solve = One or more parametric constraints conflict or are redundant Click to remove one and re-solve - .ortho-mode-f8 = Ortho mode (F8) - .output-data-to-external-file = Output data to external file - .output-file = Output file + .ortho-mode-f8 = Orto (F8) + .output-data-to-external-file = Output dei dati in un file esterno + .output-file = File di output .pedit-convert-lines-and-arcs-to-polylines-yes-no-yes = PEDIT Convert lines and arcs to polylines [Yes/No] : .pedit-enter-polyline-linetype-generation-option-on-off = PEDIT Enter polyline linetype generation option [ON/OFF]: .pedit-select-polyline-or-a-line-arc-to-convert-or-multiple = PEDIT Select polyline (or a line/arc to convert) or [Multiple]: @@ -2104,10 +2104,10 @@ common = .parameters = Parameters .perpendicular-objects-must-share-an-intersection-point = Perpendicular objects must share an intersection point .perpendicular-to-face = Perpendicular to face - .plane = Plane + .plane = Piano .pointer-input = Pointer Input - .polar-angle-settings = Polar Angle Settings - .polar-tracking-on-f10 = Polar Tracking On (F10) + .polar-angle-settings = Impostazioni angolo polare + .polar-tracking-on-f10 = Tracciamento polare On (F10) .polar-tracking-guides-cursor-movement-along-specified-angles-ortho-mode-constrains-movement-to-orthogonal-axes = Polar Tracking guides cursor movement along specified angles. Ortho mode constrains movement to orthogonal axes. .press-enter-to-accept-the-chamfer-or-distance = Press Enter to accept the chamfer or [Distance]: .principal-directions = Principal directions @@ -2120,7 +2120,7 @@ common = .recent-colors = Recent Colors .reference-changes-are-not-available-on-web-the-reference-list-is-read-only = Reference changes are not available on web — the reference list is read-only. .refine-data = Refine data - .relative-path = Relative path + .relative-path = Percorso relativo .remaining-degrees-of-freedom-in-the-current-parametric-constraint-scope = Remaining degrees of freedom in the current parametric constraint scope .requires-an-integer-between-0-and-99 = Requires an integer between 0 and 99. .requires-numeric-distance-or-two-points = Requires numeric distance or two points. @@ -2182,21 +2182,21 @@ common = .select-spline-fit-polylines = Select spline-fit polylines: .select-surfaces-to-thicken = Select surfaces to thicken: .selected-objects-in-current-drawing = Selected objects in current drawing - .set-cell-styles = Set cell styles - .sheet = Sheet + .set-cell-styles = Imposta stile celle + .sheet = Foglio .show-associativity = Show associativity .show-command-prompting-and-command-input-near-crosshairs = Show command prompting and command input near crosshairs - .show-count-column = Show count column + .show-count-column = Mostra conteggio colonne .show-cycling-badge-when-objects-overlap = Show cycling badge when objects overlap .show-name-column = Show name column .show-values-and-parameter-names-on-constraint-markers = Show values and parameter names on constraint markers .slice = Slice .slice-depth = Slice Depth .snap-on-f9 = Snap On (F9) - .snap-x-spacing = Snap X spacing: - .snap-y-spacing = Snap Y spacing: - .snap-spacing = Snap spacing - .snap-type = Snap type + .snap-x-spacing = Dist. Snap X: + .snap-y-spacing = Dist. Snap Y: + .snap-spacing = Spaziatura Snap + .snap-type = Tipo Snap .specify-distance1-or-expression = Specify Distance1 or [Expression] <__ocs_fmt_0__>: .specify-distance2-or-expression = Specify Distance2 or [Expression] <__ocs_fmt_0__>: .specify-insertion-point = Specify insertion point @@ -2208,10 +2208,10 @@ common = .specify-thickness = Specify thickness .specify-window = Specify window .spline-cannot-be-converted-within-the-requested-precision = Spline cannot be converted within the requested precision. - .spreadsheet-links = Spreadsheet Links - .start-from-data-extraction = Start from data extraction - .start-from-data-link = Start from data link - .start-from-empty-table = Start from empty table + .spreadsheet-links = Collegamenti foglio elettronico + .start-from-data-extraction = Basata su estrazione dati + .start-from-data-link = Basata su link dati + .start-from-empty-table = Inizia con tabella vuota .state2 = State2 .static-quadrant-location = Static quadrant location .status-linked = Status: Linked @@ -2338,13 +2338,13 @@ command = .command-aliases = Alias di comando .key = Chiave .keyboard-shortcuts = Scorciatoie da tastiera - .layer-0-and-the-current-layer-can-t-be-deleted = Il livello "0" e il livello corrente non possono essere eliminati: saltati. + .layer-0-and-the-current-layer-can-t-be-deleted = Il layer "0" e il layer corrente non possono essere eliminati: saltati. .no-drawing-open-use-new-or-open-to-start-a-dra = Nessun disegno aperto. Utilizzare NEW o OPEN per iniziare un disegno. - .object-is-on-locked-layer-layer-unlock-the-lay = L'oggetto si trova sul livello bloccato "__ocs_fmt_0__": sblocca il livello per modificarne gli attributi. + .object-is-on-locked-layer-layer-unlock-the-lay = L'oggetto si trova su layer bloccato "__ocs_fmt_0__": sblocca il livello per modificarne gli attributi. .pan-ended = PAN è terminato. .polyline-broken-at-vertex = Polilinea spezzata al vertice. .rename-select-the-object-type-to-rename = RENAME Selezionare il tipo di oggetto da rinominare: - .rename-type-enter-the-current-name = RENAME __ocs_arg_type__ Enter il nome attuale: + .rename-type-enter-the-current-name = RENAME __ocs_arg_type__ Indica il nome attuale: .rename-type-rename-old-to = RENAME __ocs_arg_type__ Rinomina "__ocs_arg_old__" in: .specify-new-vertex-location = Specificare la nuova posizione del vertice: .type-shortcuts-set-key-cmd-to-add-custom-short = Digita SHORTCUTS SET per aggiungere scorciatoie personalizzate. @@ -2377,7 +2377,7 @@ file = .files-you-open-will-show-up-here = I file aperti verranno visualizzati qui. .new-drawing = Nuovo disegno .no-plot-style-table-loaded-load-or-create-one = Nessuna tabella stili di stampa caricata. Caricane o creane uno prima. - .nothing-to-plot-model-space-contains-no-printa = Niente da tracciare: lo spazio modello non contiene geometria stampabile. + .nothing-to-plot-model-space-contains-no-printa = Niente da stampare: lo spazio modello non contiene geometria stampabile. .oops-nothing-to-restore = OOPS: niente da ripristinare. .oops-restored-n-object-s = OOPS: oggetto/i __ocs_fmt_0__ ripristinato/i. .open-cad-studio-ready = Open CAD Studio pronto. @@ -2391,7 +2391,7 @@ file = .opened-read-only-against-other-editors-error = Aperto in sola lettura contro altri editor: __ocs_fmt_0__ .page-setup-applied-to-the-layout = Impostazione della pagina applicata al layout. .path-type = Tipo di percorso: - .plot-area-is-empty-pick-a-larger-window = L'area del tracciato è vuota. Scegli una finestra più grande. + .plot-area-is-empty-pick-a-larger-window = L'area di stampa è vuota. Scegli una finestra più grande. .plot-style-aci-aci-updated = Stile di stampa ACI __ocs_fmt_0__ aggiornato. .plot-style-table-is-not-loaded = La tabella stili di stampa '__ocs_fmt_0__' non è caricata. .quick-print-works-in-model-space = La stampa rapida funziona nello spazio modello. @@ -2511,7 +2511,7 @@ inquiry = .usage-cal-expression-e-g-cal-2-3-4 = Utilizzo: CAL ad es. CAL (2+3)*4 .usage-qselect-type-layer-color-linetype-value = Utilizzo: QSELECT TYPE|LAYER|COLOR|LINETYPE .x-x-y-y-z-z =X = __ocs_arg_x__, Y = __ocs_arg_y__, Z = __ocs_arg_z__ - .type-name-handle-x-layer-color-lt = __ocs_fmt_0__ Maniglia:__ocs_fmt_1__ Strato:__ocs_fmt_2__ Colore:__ocs_fmt_3__ LT:__ocs_fmt_4____ocs_fmt_5__ + .type-name-handle-x-layer-color-lt = __ocs_fmt_0__ Maniglia:__ocs_fmt_1__ Livello:__ocs_fmt_2__ Colore:__ocs_fmt_3__ LT:__ocs_fmt_4____ocs_fmt_5__ .area-4-perimeter-4-centroid-4-4 = __ocs_fmt_0__ Area=__ocs_fmt_1__ Perimetro=__ocs_fmt_2__ Centroide=(__ocs_fmt_3__,__ocs_fmt_4__) draw = @@ -2588,7 +2588,7 @@ draw = .axis = Asse .axis-end =Asse, Fine .boundary-pick-internal-point-miss = BOUNDARY Selezionare punto interno:__ocs_arg_miss__ - .boundary = Confine + .boundary = Contorno .centerline-select-first-line = CENTERLINE Selezionare la prima riga: .centerline-select-second-line = CENTERLINE Selezionare la seconda riga: .circle-specify-center-point = CIRCLE Specificare il punto centrale: @@ -2607,8 +2607,8 @@ draw = .circle-ttt-select-second-tangent-object = CIRCLE TTT Selezionare il secondo oggetto tangente: .circle-ttt-select-third-tangent-object = CIRCLE TTT Seleziona il terzo oggetto tangente: .copy-specify-base-point-count-objects = COPY Specificare il punto base [oggetti __ocs_arg_count__]: - .center-line = Linea centrale - .center-mark = Marchio centrale + .center-line = Linea d'asse + .center-mark = Contrassegno del centro .center-axes = Centro, Assi .center-diameter = Centro, Diametro .center-radius = Centro, Raggio @@ -2634,7 +2634,7 @@ draw = .ellipse-arc-specify-major-axis-endpoint = ELLIPSE ARC Specificare il punto finale dell'asse principale: .ellipse-arc-specify-minor-axis-point-or-type-h = ELLIPSE ARC Specificare il punto dell'asse minore o tipo mezza lunghezza [maggiore r=__ocs_arg_r__]: .ellipse-arc-specify-start-angle-point-or-type = ELLIPSE ARC Specificare il punto dell'angolo iniziale o digitare i gradi: - .ellipse-arc = Arco dell'ellisse + .ellipse-arc = Arco di ellisse .ext-line-color-aci-dimclre = Colore linea esterna ACI (DIMCLRE) .ext-line-weight-dimlwe = Spessore linea esterno (DIMLWE) .gradient-boundary-point-1 = GRADIENT Punto di confine 1: @@ -2645,7 +2645,7 @@ draw = .hatch-pick-internal-point-miss = HATCH Selezionare punto interno:__ocs_arg_miss__ .hatch-point-n = HATCH Punto __ocs_arg_n__: .hatchedit-pattern-name-scale-scale-angle-angle = HATCHEDIT Modello:__ocs_arg_name__ Scala:__ocs_arg_scale__ Angolo:__ocs_arg_angle__ [P / S / A | Enter da applicare]: - .hatchedit-select-hatch = HATCHEDIT Seleziona portello: + .hatchedit-select-hatch = HATCHEDIT Seleziona tratteggio: .hatchedit-selected-entity-is-not-a-hatch = HATCHEDIT: l'entità selezionata non è un tratteggio. .helix-enter-number-of-turns-3 = HELIX Enter numero di giri <3>: .helix-specify-base-radius = HELIX Specificare il raggio della base: @@ -2661,7 +2661,7 @@ draw = .line-specify-next-point-undo =LINE Specificare il punto successivo [Undo]: .line-color-aci = Colore linea (ACI): .line-type = Tipo di linea: - .line-weight = Peso della linea: + .line-weight = Spessore di linea: .linear-factor-dimlfac = Fattore lineare (DIMLFAC) .literal-spaces-space-stays-in-the-line-instead = Spazi letterali: Space rimane nella riga invece di eseguire il comando (come digitare un '>' iniziale). Rimane acceso finché non viene disattivato. .mline-enter-scale-factor = MLINE Enter fattore di scala: @@ -2803,8 +2803,8 @@ draw = .trace-specify-next-point-undo = TRACE Specificare il punto successivo [Undo]: .trace-specify-start-point = TRACE Specificare il punto iniziale: .trace-specify-trace-width-w = TRACE Specificare la larghezza della traccia <__ocs_arg_w__>: - .tan-tan-radius = Abbronzatura, Abbronzatura, Raggio - .tan-tan-tan = Abbronzatura, abbronzatura, abbronzatura + .tan-tan-radius = Tangente, Tangente, Raggio + .tan-tan-tan = Tangente, Tangente, Tangente .trace = Traccia .ttt = Ttt .usage-attdisp-on-off-normal = Utilizzo: ATTDISP ON | OFF | NORMAL @@ -3029,7 +3029,7 @@ modify = .pedit-select-polyline-or-a-line-arc-to-convert = PEDIT Seleziona la polilinea (o una linea/arco da convertire): .pedit-specify-new-width = PEDIT Specificare la nuova larghezza: .pedit-join-select-objects-to-join-count-picked = PEDIT Unisci Seleziona gli oggetti da unire (__ocs_arg_count__ selezionato), Enter da unire: - .path-array = Matrice di percorsi + .path-array = Matrice su percorso .polar-array = Matrice polare .refclose-save-discard-save = REFCLOSE [Salva/Elimina] : .refedit-select-block-reference-to-edit = REFEDIT Selezionare il riferimento di blocco da modificare: @@ -3068,7 +3068,7 @@ modify = .trim-edge-fence-pick-points-placed-enter-trim = TRIM__ocs_fmt_0__ Recinzione: punti di selezione [__ocs_fmt_1__ posizionato, Enter = taglio incrociato]: .through = Attraverso .tol-scale-dimtfac = Tol. scala (DIMTFAC) - .trim = Tagliare + .trim = Taglia .exit = esci .area-keyword = Area .displacement = Spostamento @@ -3076,7 +3076,7 @@ modify = .array-keyword = Serie .use-first-point-as-displacement = Primo punto come spostamento .offset-erase-source-object-after-offsetting = OFFSET Cancellare l'oggetto di origine dopo l'offset? [Yes/No] : - .offset-enter-layer-option-for-offset-objects = OFFSET Layer degli oggetti di offset [Current/Source] : + .offset-enter-layer-option-for-offset-objects = OFFSET Livello per gli oggetti di offset [Current/Source] : groups = .group-enter-group-name-name = GROUP Enter nome del gruppo [__ocs_arg_name__]: @@ -3084,11 +3084,11 @@ groups = .ungroup = Separa layers = - .n-layers = Strati __ocs_arg_n__ + .n-layers = Layer __ocs_arg_n__ .n-saved-layers = __ocs_arg_n__ livelli salvati .active-ucs-named = UCS attivo: __ocs_fmt_0__ | Denominato: __ocs_fmt_1__ .active-ucs-no-named-ucss-defined = UCS attivo: __ocs_fmt_0__ | Nessun UCS con nome definito. - .all-layers-thawed = Tutti gli strati si sono scongelati. + .all-layers-thawed = Tutti i livelli si sono scongelati. .all-layers-turned-on = Tutti i livelli sono accesi. .changes-affect-the-saved-state-only-the-drawin = Le modifiche influiscono solo sullo stato salvato; il disegno rimane invariato fino al ripristino. .choose-new-to-capture-the-current-layer-settin = Scegli Nuovo per acquisire le impostazioni del livello corrente. @@ -3113,7 +3113,7 @@ layers = .isolated-n-object-s-unisolateobjects-to-restor = Oggetto(i) __ocs_fmt_0__ isolato(i). UNISOLATEOBJECTS da ripristinare. .isolation-ended-all-objects-shown = Isolamento terminato: tutti gli oggetti visualizzati. .laydel-layer-to-delete = Livello LAYDEL da eliminare: - .laydel-deleted-layer-layer-and-n-object-s = LAYDEL: layer eliminato "__ocs_fmt_0__" e oggetto(i) __ocs_fmt_1__. + .laydel-deleted-layer-layer-and-n-object-s = LAYDEL: livelloeliminato "__ocs_fmt_0__" e oggetto(i) __ocs_fmt_1__. .laydel-layer-0-cannot-be-deleted = LAYDEL: il livello "0" non può essere eliminato. .laydel-no-layer-named-name = LAYDEL: nessun livello denominato "__ocs_fmt_0__". .layer-already-exists = LAYER: '__ocs_fmt_0__' esiste già. @@ -3121,9 +3121,9 @@ layers = .layer-created = LAYER: '__ocs_fmt_0__' creato. .layer-not-found = LAYER: '__ocs_fmt_0__' non trovato. .layer-current-layer-set-to = LAYER: livello corrente impostato su '__ocs_fmt_0__'. - .layer-layers-frozen = LAYER: strati congelati. + .layer-layers-frozen = LAYER: livelli congelati. .layer-layers-locked = LAYER: livelli bloccati. - .layer-layers-thawed = LAYER: strati scongelati. + .layer-layers-thawed = LAYER: livelli scongelati. .layer-layers-turned-off = LAYER: livelli disattivati. .layer-layers-turned-on = LAYER: livelli attivati. .layer-layers-unlocked = LAYER: livelli sbloccati. @@ -3131,8 +3131,8 @@ layers = .layerstate-no-saved-state-named-arg = LAYERSTATE: nessuno stato salvato denominato "__ocs_fmt_0__". .layerstate-restored-arg-n-layer-s = LAYERSTATE: ripristinato "__ocs_fmt_0__" (livelli __ocs_fmt_1__). .layerstate-saved-arg = LAYERSTATE: salvato "__ocs_fmt_0__". - .layiso-isolated-layer-s = LAYISO: strato/i __ocs_fmt_0__ isolato/i. - .layiso-select-entities-on-the-layers-to-isolat = LAYISO: seleziona prima le entità sui layer da isolare. + .layiso-isolated-layer-s = LAYISO: livello/i __ocs_fmt_0__ isolato/i. + .layiso-select-entities-on-the-layers-to-isolat = LAYISO: seleziona prima le entità sui livelli da isolare. .laymatch-select-objects-to-change-layer = LAYMATCH Seleziona gli oggetti per cambiare livello: .laymatch-select-source-object-to-match-layer-f = LAYMATCH Seleziona l'oggetto sorgente per far corrispondere il livello da: .laymrg-source-layer-merged-away = Livello sorgente LAYMRG (unito): @@ -3140,21 +3140,21 @@ layers = .laymrg-layer-0-cannot-be-merged-away = LAYMRG: il livello "0" non può essere unito. .laymrg-merged-src-into-dst-moved-object-s = LAYMRG: unito "__ocs_fmt_0__" in "__ocs_fmt_1__" (oggetto(i) __ocs_fmt_2__). .laymrg-source-and-target-are-the-same-layer = LAYMRG: sorgente e destinazione sono lo stesso livello. - .laymrg-source-and-target-layers-must-both-exis = LAYMRG: i layer di origine e di destinazione devono esistere entrambi. + .laymrg-source-and-target-layers-must-both-exis = LAYMRG: i livelli di origine e di destinazione devono esistere entrambi. .layuniso-all-layers-restored = LAYUNISO: tutti i livelli ripristinati. .layer-freeze = Congelamento dei livelli .layer-lock = Blocco livello .layer-manager = Gestore livelli - .layer-off = Strato disattivato + .layer-off = Livello disattivato .layer-state-manager = Gestore dello stato dei livelli .layer-unlock = Sblocco livello .layer-state-name = Nome dello stato del livello - .layer-states-are-stored-inside-the-drawing-and = Gli stati dei layer vengono memorizzati all'interno del disegno e rimangono disponibili dopo averlo riaperto. - .layer-s-frozen = Strato/i congelato/i. - .layer-s-locked = Strati bloccati. - .layer-s-turned-off = Strati disattivati. - .layer-s-unlocked = Strati sbloccati. - .layers = Strati: __ocs_fmt_0__ + .layer-states-are-stored-inside-the-drawing-and = Gli stati dei livelli vengono memorizzati all'interno del disegno e rimangono disponibili dopo averlo riaperto. + .layer-s-frozen = Livello/i congelato/i. + .layer-s-locked = Livelli bloccati. + .layer-s-turned-off = Livelli disattivati. + .layer-s-unlocked = Livelli sbloccati. + .layers = Livelli: __ocs_fmt_0__ .lock = Bloccare .mleaderstyle-style-name-prop-val-3 = MLEADERSTYLE: '__ocs_fmt_0__'.__ocs_fmt_1__ = __ocs_fmt_2__ .mleaderstyle-already-exists = MLEADERSTYLE: '__ocs_fmt_0__' esiste già. @@ -3178,7 +3178,7 @@ layers = .new-vp = Nuovo VP .new-vp-freeze = Nuovo congelamento VP .new-layer-state = Nuovo stato del livello - .no-dim-styles-defined = Nessuno stile attenuato definito. + .no-dim-styles-defined = Nessuno stile quota definito. .no-hidden-objects = Nessun oggetto nascosto. .no-layer-states-in-this-drawing =Nessuno stato layer in questo disegno .no-matching-layer-states = Nessuno stato di livello corrispondente @@ -3211,7 +3211,7 @@ layers = Stili tabella: __ocs_fmt_0__ .text-styles = Stili di testo: __ocs_fmt_0__ - .thaw-all-layers = Scongela tutti gli strati + .thaw-all-layers = Scongela tutti i livelli .turn-all-layers-on = Attiva tutti i livelli .ucs-name-not-found = UCS '__ocs_fmt_0__' non trovato. .ucs-activated = UCS '__ocs_fmt_0__' attivato. @@ -3361,10 +3361,10 @@ annotate = .dimspace-select-dimension-to-space-count-selec = DIMSPACE Seleziona la dimensione dello spazio (__ocs_arg_count__ selezionato, Enter al termine): .dimtedit-select-dimension = DIMTEDIT Seleziona dimensione: .dimtedit-specify-new-location-for-dimension-te = DIMTEDIT Specificare la nuova posizione per il testo della quota: - .dim-break = Pausa oscura - .dim-edit = Modifica attenuata + .dim-break = Interruzione quota + .dim-edit = Modifica quota .dim-space = Dimmer Space - .dim-text-edit = Modifica testo attenuato + .dim-text-edit = Modifica testo quota .explode-no-explodable-objects-selected = EXPLODE: nessun oggetto esplodibile selezionato. .edit-text = Modifica testo .extents-all = Estende tutto @@ -3412,7 +3412,7 @@ annotate = .qdim-made-dimensions-created = Dimensioni QDIM __ocs_fmt_0__ create. .qdim-endpoints-collapse-to-a-single-position = QDIM: gli endpoint collassano in un'unica posizione. .qdim-no-dimensionable-endpoints-in-the-selecti = QDIM: nessun punto finale dimensionabile nella selezione. - .quick-dim = Oscuramento rapido + .quick-dim = Quota rapida .requires-0-or-1-or-multiple-or-single = Richiede 0 OR 1 OR MULTIPLE OR SINGLE. .requires-single-or-multiple = Richiede singolo o multiplo. .scale-edit = Modifica scala @@ -3641,7 +3641,7 @@ insert = .attsync-block-name-to-sync = ATTSYNC nome del blocco da sincronizzare: .attsync-no-block-named-arg = ATTSYNC: nessun blocco denominato "__ocs_fmt_0__". .attsync-synchronised-synced-insert-s-of-block = ATTSYNC: inserimento/i __ocs_fmt_0__ sincronizzato/i di "__ocs_fmt_1__" rispetto alle definizioni degli attributi __ocs_fmt_2__. - .adjust = Regolare + .adjust = Regolazione .array-insert = Inserimento di matrice .attach = Allega .attach-xref = Allega XREF @@ -3729,8 +3729,8 @@ insert = Sottofondi .synchronize = Sincronizza .underlay-layers = - Sottofondo - Strati + Livelli + Sottoposti .usage-attsync-block-name-blocks = Utilizzo: ATTSYNC . Blocchi: __ocs_fmt_0__ .usage-base-x-y-z = Utilizzo: BASE [z] .write-block = Scrivi blocco @@ -4432,7 +4432,7 @@ view = .mview-switch-to-a-paper-space-layout-first = MVIEW: passa prima al layout dello spazio carta. .model-viewports = Viste del modello .mono = Mono - .named = Nominato + .named = Con nome .navigate = Navigare .no-annotation-scale-named-arg = Nessuna scala di annotazione denominata __ocs_fmt_0__. .no-annotation-scales-defined = Nessuna scala di annotazione definita. @@ -4447,13 +4447,13 @@ view = .opening-feedback-page = Apertura della pagina di feedback... .opening-release-notes = Note sulla versione di apertura... .pan-drag-with-the-left-mouse-button-press-esc =PAN: trascinare con il tasto sinistro del mouse. Premere Esc per uscire. - .plotwindow-specify-first-corner-of-plot-window = PLOTWINDOW Specificare il primo angolo della finestra del tracciato: + .plotwindow-specify-first-corner-of-plot-window = PLOTWINDOW Specificare il primo angolo della finestra di stampa: .plotwindow-specify-opposite-corner = PLOTWINDOW Specificare l'angolo opposto: .palettes = Tavolozze .pan = Padella .persp = Pers .projection = Proiezione - .quickprint-count-selected-enter-to-plot-or-kee = QUICKPRINT __ocs_arg_count__ selezionato: Enter per tracciare o continuare a selezionare: + .quickprint-count-selected-enter-to-plot-or-kee = QUICKPRINT __ocs_arg_count__ selezionato: Enter per stampare o continuare a selezionare: .quickprint-select-objects-to-quick-print = QUICKPRINT Selezionare gli oggetti da stampare rapidamente: .removed-annotation-scale-arg = Scala di annotazione __ocs_fmt_0__ rimossa. .scalelistedit-add-delete = SCALELISTEDIT [Aggiungi/Elimina]: @@ -4466,8 +4466,8 @@ view = .scale-arg-already-exists = La scala __ocs_fmt_0__ esiste già. .shaded = Ombreggiato .sheet-set-manager = - Set di lenzuola - Direttore + Gestione + Set di fogli .shortcut-key-not-found = Scorciatoia "__ocs_fmt_0__" non trovata. .shortcut-key-removed = Scorciatoia "__ocs_fmt_0__" rimossa. .shortcut-set-key-cmd-str = Serie di scorciatoie: __ocs_fmt_0__ → __ocs_fmt_1__ @@ -4475,10 +4475,10 @@ view = .table-cell-set-row-col-text = TABLE CELL: impostare [__ocs_fmt_0__,__ocs_fmt_1__] = "__ocs_fmt_2__". .toolpalettes-tool-palettes-not-yet-implemented = TOOLPALETTES: tavolozze degli strumenti non ancora implementate. .tile-horiz = - Piastrella + Affianca Orizz. .tile-vert = - Piastrella + Affianca Vert. .ucs-icon = UCS @@ -4522,8 +4522,8 @@ view = .usage-userr-1-5-real = Utilizzo: USERR <1-5> .usage-xdata-list-set-app-value-clear-app = Utilizzo: XDATA LIST | SET | CLEAR [app] .vplayer-enter-a-viewport-first-double-click-or = VPLAYER: inserire prima una finestra (fare doppio clic o MS). - .vplayer-frozen-layers = VPLAYER: strati congelati: __ocs_fmt_0__ - .vplayer-no-frozen-layers-in-active-viewport = VPLAYER: nessun layer congelato nella vista attiva. + .vplayer-frozen-layers = VPLAYER: livelli congelati: __ocs_fmt_0__ + .vplayer-no-frozen-layers-in-active-viewport = VPLAYER: nessun livello congelato nella vista attiva. .vplayer-switch-to-a-paper-space-layout-first = VPLAYER: passa prima al layout dello spazio carta. .vports-configuration-single-2h-2v-4 = Configurazione VPORTS [Singola/2H/2V/4]: .vports-created-viewport-s = VPORTS: viste __ocs_fmt_0__ create [__ocs_fmt_1__]. @@ -4733,11 +4733,11 @@ properties = .diffuse-map = Mappa diffusa .dim-line-1 = Linea debole 1 .dim-line-2 = Linea debole 2 - .dim-line-color = Colore della linea attenuata + .dim-line-color = Colore della linea di quota .dim-line-ext = Linea fioca est .dim-line-forced = Linea fioca forzata .dim-line-inside = Linea debole all'interno - .dim-line-lineweight = Spessore di linea della linea attenuata + .dim-line-lineweight = Spessore di linea della linea di quota .dim-prefix-suffix = Prefisso/suffisso debole .dim-roundoff = Arrotondamento debole .dim-scale-linear = Scala debole lineare @@ -4814,7 +4814,7 @@ properties = .font = Carattere .frame-text = Testo della cornice .from-dxf = Da DXF - .frozen-layers = Strati congelati + .frozen-layers = Livelli congelati .geographic-position-marker = Indicatore di posizione geografica .global-width = Larghezza globale .gloss = Lucentezza @@ -4857,19 +4857,19 @@ properties = .leader-1-x = Direttrice 1 X .leader-1-y = Direttrice 1 Y .leader-1-z = Direttrice 1 Z - .leader-2-x = Capo 2 X - .leader-2-y = Capo 2 Y - .leader-2-z = Capo 2 Z + .leader-2-x = Leader 2 X + .leader-2-y = Leader 2 Y + .leader-2-z = Leader 2 Z .leader-length = Lunghezza della guida - .leader-x = Capo X - .leader-y = Capo Y - .leader-z = Capo Z - .leader-color = Colore capo + .leader-x = Leader X + .leader-y = Leader Y + .leader-z = Leader Z + .leader-color = Colore leader .leader-extension = Estensione del leader .leader-linetype = Tipo di linea direttrice .leader-lineweight = Spessore linea principale .leader-type = Tipo di leader - .left-attachment = Allegato sinistro + .left-attachment = Aggancio a sinistra .left-offset = Scostamento sinistro .left-to-right = Da sinistra a destra .legacy-entity = Entità legacy @@ -4904,7 +4904,7 @@ properties = .manual-positions = Posizioni manuali .map-size = Dimensioni della mappa .mass-properties = Proprietà di massa - .match = Partita + .match = Corrispondenza .material = Materiale .material-details = Dettagli sui materiali .maximum-intensity = Massima intensità @@ -4969,7 +4969,7 @@ properties = .physical-method = Metodo fisico .pitch-and-family = Campo e famiglia .planar = Planare - .plot-glyph = Trama Glifo + .plot-glyph = Stampa Glifo .plot-style-table = Tabella stili di stampa .plot-table-attached-to =Tabella di stampa allegata a .plot-table-type = Tipo di tabella di stampa @@ -5018,7 +5018,7 @@ properties = .render-flags = Rendering di bandiere .repeat-bottom-labels = Ripeti le etichette inferiori .repeat-top-labels = Ripeti le etichette superiori - .right-attachment = Giusto attaccamento + .right-attachment = Attacco a destra .right-offset = Scostamento destro .rows = Righe .shx = SHX @@ -5140,7 +5140,7 @@ properties = .ucs-per-viewport = UCS per finestra .underlay = Sottofondo .underlay-adjust = Regolazione sottofondo - .underlay-layers = Strati sottostanti + .underlay-layers = Livelli sottostanti .underlay-name = Nome del sottofondo .underlay-path = Percorso sottostante .underlined = Sottolineato @@ -5212,7 +5212,7 @@ properties = styles = .blocks = Blocchi: __ocs_fmt_0__ .color-cur-color = Colore: __ocs_arg_cur_color__ - .layers-value = Strati: __ocs_fmt_0__ + .layers-value = Livelli: __ocs_fmt_0__ .linetypes-value-indented-title-case = Tipi di linea: __ocs_fmt_0__ .lineweight-cur-lw = Spessore linea: __ocs_arg_cur_lw__ .screening-cur-scr = Schermatura: __ocs_arg_cur_scr__ @@ -5224,7 +5224,7 @@ styles = .aci = ACI: .audit-no-issues-found = AUDIT: nessun problema trovato. .audit-reference-s-to-undefined-block-s = AUDIT: riferimento/i a blocchi non definiti: __ocs_fmt_0__ - .audit-reference-s-to-undefined-layer-s = AUDIT: riferimento/i a strati non definiti: __ocs_fmt_0__ + .audit-reference-s-to-undefined-layer-s = AUDIT: riferimento/i a livelli non definiti: __ocs_fmt_0__ .audit-report-only-no-automatic-repair-performe = AUDIT: solo rapporto: nessuna riparazione automatica eseguita. .audit-scanned-total-object-s = AUDIT: oggetto/i __ocs_fmt_0__ scansionato/i. .above-text = Sopra il testo @@ -5241,7 +5241,7 @@ styles = .at-second-ext = Al secondo est .basepoint = Punto base .before-text = Prima del testo - .best-fit =La migliore vestibilità + .best-fit =Il miglior adattamento .big-font = Carattere grande: .blockextents = Blocca estensioni .bottomline = In conclusione @@ -5252,7 +5252,7 @@ styles = .by-annotation-scale = Per scala di annotazione .cdimsty-new-current-dimension-style-name = CDIMSTY nuovo nome dello stile di quota corrente: .cdimsty-cur = CDIMSTY = "__ocs_fmt_0__" - .cdimsty-dim-style-not-found = CDIMSTY: stile attenuato '__ocs_fmt_0__' non trovato. + .cdimsty-dim-style-not-found = CDIMSTY: stile quota '__ocs_fmt_0__' non trovato. .celtscale-new-current-object-line-type-scale = CELTSCALE nuova scala del tipo di linea dell'oggetto corrente: .celtscale-v-4 = CELTSCALE = __ocs_fmt_0__ .celtscale-set-to-v-4 = CELTSCALE impostato su __ocs_fmt_0__ @@ -5271,7 +5271,7 @@ styles = .clayer-cur = CLAYER = "__ocs_fmt_0__" .clayer-set-to-name-arg = CLAYER impostato su "__ocs_fmt_0__" .clayer-layer-not-found = CLAYER: livello '__ocs_fmt_0__' non trovato. - .color-new-object-colour-bylayer-byblock-1-255 = COLOR nuovo colore oggetto [PerLayer / PerBlocco / 1-255 / rosso / giallo / verde / ciano / blu / magenta / bianco]: + .color-new-object-colour-bylayer-byblock-1-255 = COLOR nuovo colore oggetto [DaLayer / DaBlocco / 1-255 / rosso / giallo / verde / ciano / blu / magenta / bianco]: .centeroftext = Centro del testo .centeroftextoverline = Centro del testo sopralineato .clear-table = Tabella chiara @@ -5284,9 +5284,9 @@ styles = .current-values = Valori attuali: .decimal-degrees = Gradi decimali .diagonal = Diagonale - .dim-line-between-ext-dimtofl = Linea attenuata tra esterno (DIMTOFL) - .dim-line-color-aci-dimclrd = Colore linea dimmerabile ACI (DIMCLRD) - .dim-line-linetype-dimltype = Tipo di linea linea attenuata (DIMLTYPE) + .dim-line-between-ext-dimtofl = Linea quota esterna (DIMTOFL) + .dim-line-color-aci-dimclrd = Colore linea quota ACI (DIMCLRD) + .dim-line-linetype-dimltype = Tipo di linea quota (DIMLTYPE) .dim-line-weight-dimlwd = Spessore linea ridotta (DIMLWD) .dimstyle-updated = DimStyle '__ocs_fmt_0__' aggiornato. .dimension-line = Linea di quota @@ -5318,9 +5318,9 @@ styles = .isavebak-set-to-0 = ISAVEBAK impostato su 0 .isavebak-set-to-1 = ISAVEBAK impostato su 1 .keep-with-dim-line = Continua con la linea debole - .layers = Strati + .layers = Livelli .linetype-list-set = LINETYPE [Elenco/Imposta]: - .linetype-set-linetype-name-bylayer-byblock = LINETYPE SET nome del tipo di linea (PerLayer / PerBlocco / …): + .linetype-set-linetype-name-bylayer-byblock = LINETYPE SET nome del tipo di linea (DaLayer / DaBlocco / …): .linetype-name-is-not-loaded-use-linetype-list = LINETYPE: "__ocs_fmt_0__" non è caricato. Utilizza LINETYPE LIST per vedere i tipi di linea disponibili. .ltscale-new-global-line-type-scale = LTSCALE nuova scala globale di tipo linea: .ltscale-v-4 =LTSCALE = __ocs_fmt_0__ @@ -5432,16 +5432,16 @@ plot = .no-page-setups = (nessuna impostazione di pagina) .none = .previous = - .center-the-plot = Centrare la trama + .center-the-plot = Centrare la stampa .copies = Copie .export-pdf = Esporta PDF .fit-to-paper = Adatta alla carta - .layout-plots-the-current-sheet-using-the-selec = Layout traccia il foglio corrente utilizzando il formato carta selezionato. + .layout-plots-the-current-sheet-using-the-selec = Layout stampa il foglio corrente utilizzando il formato carta selezionato. .sheet-sizes-and-printable-areas-reported-by-th = Sheet sizes and printable areas reported by the printer. .custom-paper-size = Custom paper size .printable-margins = Printable margins .enter-a-positive-width-and-height = Enter a positive width and height. - .paper-size = Paper size + .paper-size = Formato foglio .count-driver-option-s-set-for-this-printer = __ocs_fmt_0__ driver option(s) set for this printer. .printer-properties-printer = Printer properties — __ocs_fmt_0__ .this-printer-reports-no-driver-options = This printer reports no driver options. @@ -5457,14 +5457,14 @@ plot = .paper-space-last = Spazio carta per ultimo .pick = Scegli… .plot-area = Area del terreno - .plot-in-background = Trama sullo sfondo - .plot-offset = Offset della trama - .plot-options = Opzioni di trama - .plot-scale = Scala del grafico - .plot-stamp = Timbro di trama + .plot-in-background = Stampa in background + .plot-offset = Offset di stampa + .plot-options = Opzioni di stampa + .plot-scale = Scala di stampa + .plot-stamp = Timbro .plot-style-table-pen-assignments = Tabella stili di stampa (assegnazioni penne) - .plot-transparency =Trasparenza della trama - .plot-upside-down = Trama sottosopra + .plot-transparency =Trasparenza della stampa + .plot-upside-down = Stampa sottosopra .named-plot-style-tables-stb-are-not-supported-yet-name = Le tabelle di stili di stampa con nome (.stb) non sono ancora supportate: __ocs_fmt_0__ .name-was-not-found-in-the-plot-styles-folder-folder = __ocs_fmt_0__ non è stato trovato nella cartella degli stili di stampa (__ocs_fmt_1__). .preview = Anteprima @@ -5473,10 +5473,10 @@ plot = .save-to-pdf-file = Salva nel file PDF… .save = Salva… .scale-lineweights = Ridimensiona gli spessori di linea - .set-current = Imposta la corrente + .set-current = Imposta corrente .shaded-viewport-options = Opzioni della vista ombreggiata .system-default-printer = Stampante predefinita del sistema - .what-to-plot = Cosa tracciare + .what-to-plot = Cosa stampare .x-mm = X (mm) .select-drawing-to-import-page-setups-from = Seleziona il disegno da cui importare le impostazioni di pagina .drawings-and-templates = Disegni e modelli @@ -5509,7 +5509,7 @@ plot = .y-mm = Y (mm) manage = - .about = Circa + .about = Informazioni .application = Applicazione .audit = Controllo .cleanup = Pulizia @@ -5517,14 +5517,14 @@ manage = .edit-aliases = Modifica alias .export = Esportazione .find-non-purgeable-items = - Trova non- - Articoli eliminabili + Trova elementi + non eliminabili .load-partial-cui = Carica CUI parziale - .overkill = Eccessivo + .overkill = Elimina duplicati .purge = Eliminazione .user-interface = - Utente Interfaccia + Utente plugins = .api-incompatible = API incompatibile @@ -5595,9 +5595,9 @@ ui = .bring-to-front = Portare in primo piano .building-scene-caches = Creazione delle cache delle scene… .cad-application-for-architecture-engineering = Applicazione CAD per Architettura e Ingegneria - .clean-screen = Schermo pulito + .clean-screen = Schermo intero .clean-screen-hide-ribbon-and-panels = - Schermo pulito + Schermo intero Nascondi nastro e pannelli .collapsed = Crollato .color =Colore __ocs_fmt_0__ @@ -5610,7 +5610,7 @@ ui = Personalizzazione Mostra o nascondi gli elementi della barra di stato .custom = Personalizzato… - .draw-order = Disegna l'ordine + .draw-order = Ordine di visualizzazione .dynamic-input = Ingresso dinamico .dynamic-input-f12 = Ingresso dinamico @@ -5685,16 +5685,16 @@ ui = .replace-with = Sostituisci con: .searches-text-mtext-attribute-definitions-and = Cerca testo, testoM, definizioni di attributo e valori di attributo di blocco. .select-similar = Seleziona Simile - .selection-cycling = Selezione Ciclismo + .selection-cycling = Selezione Ciclica .selection-cycling-repeat-click-to-step-through = - Selezione Ciclismo + Selezione Ciclica Fai ripetutamente clic per spostarti tra gli oggetti sovrapposti .selection-filtering = Filtraggio della selezione .selection-filtering-limit-which-object-types-c = Filtraggio della selezione Limita i tipi di oggetto che possono essere selezionati - .send-under-object = Invia sotto oggetto - .send-to-back = Invia a Indietro + .send-under-object = Manda sotto oggetto + .send-to-back = Manda dietro .show-annotation-objects = Mostra oggetti di annotazione .show-lineweight = Mostra spessore linea .show-lineweight-lwdisplay = @@ -5754,7 +5754,7 @@ dimstyle = .display-alternate-units = Visualizza unità alternative .draw-dimension-line-between-extension-lines = Disegna la linea di quota tra le linee di estensione .extend-beyond-dimension-line = Estendere oltre la linea di quota - .extend-beyond-ticks = Estendersi oltre le zecche + .extend-beyond-ticks = Estendersi oltre le linee .extension-line-color = Colore della linea di estensione .extension-lineweight = Spessore linea di estensione .feet-and-inches = Piedi e pollici @@ -5872,7 +5872,7 @@ style-manager = .left-attachment = Attacco sinistro .line-color = Colore della linea .line-type = Tipo di linea - .line-weight = Peso della linea + .line-weight = Spessore di linea .maximum-leader-points = Punti leader massimi .multileader-draw-order = Ordine di visualizzazione delle multidirettrici .no-preview = Nessuna anteprima @@ -5881,7 +5881,7 @@ style-manager = .paper-height = Altezza della carta .paper-text-height = Altezza del testo cartaceo .path-type = Tipo di percorso - .right-attachment = Attaccamento giusto + .right-attachment = Attacco a destra .scale-factor = Fattore di scala .second-segment-angle = Angolo del secondo segmento .size-and-effects = Dimensioni ed effetti From 51abbd897caa1edc3b8457135d6bafcc092cdaf7 Mon Sep 17 00:00:00 2001 From: Christopher Overbeck Date: Fri, 2 Oct 2026 15:35:54 -0500 Subject: [PATCH 07/43] feat(offset): open on the live preview for pre-selected objects; signed typed distance With objects already selected, OFFSET opens at the side step with the preview following the cursor instead of asking for a distance first (#422). At the side step a typed distance places the offset at once on the cursor's side, and a negative one on the other side; Enter at the start repeats the last distance (#418). Erase and Layer, which lived on the skipped distance step, are offered there too. With nothing selected the distance-first flow is unchanged. The opposite side is found by mirroring the cursor through its nearest point on the outline, capped at half the offset distance so it cannot cross a narrow gap back to the cursor's own side. Two new prompts are added to the catalog and every locale. Co-Authored-By: Claude Opus 5.5 --- .../no-selection-distance-first.png | Bin 0 -> 132720 bytes .../offset-drag/preselected-live-preview.png | Bin 0 -> 171280 bytes .../typed-minus-10-lands-outside.png | Bin 0 -> 169541 bytes locales/ar-SA/opencadstudio.ftl | 2 + locales/bg-BG/opencadstudio.ftl | 2 + locales/cs-CZ/opencadstudio.ftl | 2 + locales/de-DE/opencadstudio.ftl | 2 + locales/el-GR/opencadstudio.ftl | 2 + locales/en-US/opencadstudio.ftl | 2 + locales/es-ES/opencadstudio.ftl | 2 + locales/fi-FI/opencadstudio.ftl | 2 + locales/fr-FR/opencadstudio.ftl | 2 + locales/hi-IN/opencadstudio.ftl | 2 + locales/hu-HU/opencadstudio.ftl | 2 + locales/it-IT/opencadstudio.ftl | 2 + locales/ja-JP/opencadstudio.ftl | 2 + locales/ko-KR/opencadstudio.ftl | 2 + locales/nl-NL/opencadstudio.ftl | 2 + locales/pl-PL/opencadstudio.ftl | 2 + locales/pt-BR/opencadstudio.ftl | 2 + locales/ru-RU/opencadstudio.ftl | 2 + locales/tr-TR/opencadstudio.ftl | 2 + locales/zh-CN/opencadstudio.ftl | 2 + locales/zh-TW/opencadstudio.ftl | 2 + src/app/commands/dim.rs | 3 +- src/locale_catalog.rs | 2 + src/modules/draw/modify/offset.rs | 427 +++++++++++++----- 27 files changed, 365 insertions(+), 109 deletions(-) create mode 100644 docs/screenshots/offset-drag/no-selection-distance-first.png create mode 100644 docs/screenshots/offset-drag/preselected-live-preview.png create mode 100644 docs/screenshots/offset-drag/typed-minus-10-lands-outside.png diff --git a/docs/screenshots/offset-drag/no-selection-distance-first.png b/docs/screenshots/offset-drag/no-selection-distance-first.png new file mode 100644 index 0000000000000000000000000000000000000000..32835108cf480ea5ef668a4e362f3c6b1b55832d GIT binary patch literal 132720 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/offset-drag/preselected-live-preview.png b/docs/screenshots/offset-drag/preselected-live-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..d7eda8df4d66c5c8615b2be94862295d576de0cc GIT binary patch literal 171280 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 z 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
Fj@dI)kHWvXO2iNF^KB*J-BiRc<%dZyNM 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 UamH+gE(Rd*boFyt=akR{09)JS#sB~S literal 0 HcmV?d00001 diff --git a/locales/ar-SA/opencadstudio.ftl b/locales/ar-SA/opencadstudio.ftl index b16eb479b..eef98f760 100644 --- a/locales/ar-SA/opencadstudio.ftl +++ b/locales/ar-SA/opencadstudio.ftl @@ -3035,6 +3035,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ انقر نقطة العبور أو [متعدد]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ متعدد انقر الجانب التالي [المسافة __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ متعدد انقر نقطة العبور التالية: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ انقر نقطة العبور أو اكتب المسافة، والقيمة السالبة للجهة الأخرى [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ متعدد انقر نقطة العبور أو اكتب المسافة، والقيمة السالبة للجهة الأخرى [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = إزاحة (DIMEXO) .overall-scale-dimscale = المقياس الإجمالي (DIMSCALE) .pedit-enter-option = PEDIT أدخل الخيار: diff --git a/locales/bg-BG/opencadstudio.ftl b/locales/bg-BG/opencadstudio.ftl index 395758ea7..44a94f001 100644 --- a/locales/bg-BG/opencadstudio.ftl +++ b/locales/bg-BG/opencadstudio.ftl @@ -3022,6 +3022,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Кликни точка на преминаване или [Многократно]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Многократно Кликни следваща страна [разстояние __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Многократно Кликни следваща точка на преминаване: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Кликни точка на преминаване или въведи разстояние, отрицателно за другата страна [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Многократно Кликни точка на преминаване или въведи разстояние, отрицателно за другата страна [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Отместване (DIMEXO) .overall-scale-dimscale = Общ мащаб (DIMSCALE) .pedit-enter-option = PEDIT Въведи опция: diff --git a/locales/cs-CZ/opencadstudio.ftl b/locales/cs-CZ/opencadstudio.ftl index 724bf6e48..65f42ab34 100644 --- a/locales/cs-CZ/opencadstudio.ftl +++ b/locales/cs-CZ/opencadstudio.ftl @@ -3022,6 +3022,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Bod prokliku nebo [Multiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Vícenásobné kliknutí na další stranu [vzdálenost __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Vícenásobné kliknutí dalším průchozím bodem: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Klikněte na průchozí bod nebo zadejte vzdálenost, zápornou pro druhou stranu [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Vícenásobně Klikněte na průchozí bod nebo zadejte vzdálenost, zápornou pro druhou stranu [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Odsazení (DIMEXO) .overall-scale-dimscale = Celková stupnice (DIMSCALE) .pedit-enter-option = Možnost PEDIT Enter: diff --git a/locales/de-DE/opencadstudio.ftl b/locales/de-DE/opencadstudio.ftl index e5a685229..64eb484b4 100644 --- a/locales/de-DE/opencadstudio.ftl +++ b/locales/de-DE/opencadstudio.ftl @@ -3023,6 +3023,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Klicken Sie durch Punkt oder [Multiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Mehrfachklicken Sie auf die nächste Seite [Abstand __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Mehrfachklicken Sie als nächstes durch den Punkt: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Durch Punkt klicken oder Abstand eingeben, negativ für die andere Seite [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Mehrfach Durch Punkt klicken oder Abstand eingeben, negativ für die andere Seite [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Abstand der Maßhilfslinie (DIMEXO) .overall-scale-dimscale = Gesamtmaßstab (DIMSCALE) .pedit-enter-option = PEDIT Option eingeben: diff --git a/locales/el-GR/opencadstudio.ftl b/locales/el-GR/opencadstudio.ftl index aaa837e5b..91d2ef1ec 100644 --- a/locales/el-GR/opencadstudio.ftl +++ b/locales/el-GR/opencadstudio.ftl @@ -3023,6 +3023,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Κάντε κλικ σε σημείο διέλευσης ή [Πολλαπλά]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Πολλαπλά Κάντε κλικ στην επόμενη πλευρά [απόσταση __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Πολλαπλά Κάντε κλικ στο επόμενο σημείο διέλευσης: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Κάντε κλικ σε σημείο διέλευσης ή πληκτρολογήστε απόσταση, αρνητική για την άλλη πλευρά [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Πολλαπλά Κάντε κλικ σε σημείο διέλευσης ή πληκτρολογήστε απόσταση, αρνητική για την άλλη πλευρά [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Μετατόπιση (DIMEXO) .overall-scale-dimscale = Συνολική κλίμακα (DIMSCALE) .pedit-enter-option = PEDIT Δώστε επιλογή: diff --git a/locales/en-US/opencadstudio.ftl b/locales/en-US/opencadstudio.ftl index b1e22ed13..a6d01eb81 100644 --- a/locales/en-US/opencadstudio.ftl +++ b/locales/en-US/opencadstudio.ftl @@ -3024,6 +3024,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Click through point or [Multiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Multiple Click next side [distance __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Multiple Click next through point: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Click through point or type distance, negative for the other side [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Multiple Click through point or type distance, negative for the other side [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Offset (DIMEXO) .overall-scale-dimscale = Overall scale (DIMSCALE) .pedit-enter-option = PEDIT Enter option: diff --git a/locales/es-ES/opencadstudio.ftl b/locales/es-ES/opencadstudio.ftl index 8c7b1d012..ed8b705a5 100644 --- a/locales/es-ES/opencadstudio.ftl +++ b/locales/es-ES/opencadstudio.ftl @@ -3023,6 +3023,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Pulse el punto de paso o [Múltiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Múltiple Pulse el siguiente lado [distancia __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Múltiple Pulse el siguiente punto de paso: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Pulse el punto de paso o escriba la distancia, negativa para el otro lado [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Múltiple Pulse el punto de paso o escriba la distancia, negativa para el otro lado [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Desfase (DIMEXO) .overall-scale-dimscale = Escala general (DIMSCALE) .pedit-enter-option = PEDIT Indique una opción: diff --git a/locales/fi-FI/opencadstudio.ftl b/locales/fi-FI/opencadstudio.ftl index 4844bc1dd..dbde538b3 100644 --- a/locales/fi-FI/opencadstudio.ftl +++ b/locales/fi-FI/opencadstudio.ftl @@ -3022,6 +3022,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Napsautuskohta tai [Multiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Useita Napsauta seuraavaa reunaa [etäisyys __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Useita napsauttamalla seuraava kohta: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Napsauta läpikulkupistettä tai kirjoita etäisyys, negatiivinen toiselle puolelle [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Useita Napsauta läpikulkupistettä tai kirjoita etäisyys, negatiivinen toiselle puolelle [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Siirtymä (DIMEXO) .overall-scale-dimscale = Kokonaismittakaava (DIMSCALE) .pedit-enter-option = PEDIT Enter vaihtoehto: diff --git a/locales/fr-FR/opencadstudio.ftl b/locales/fr-FR/opencadstudio.ftl index b1ab5b3bf..0f6dbf6cb 100644 --- a/locales/fr-FR/opencadstudio.ftl +++ b/locales/fr-FR/opencadstudio.ftl @@ -3023,6 +3023,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Cliquez sur le point ou [multiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Cliquer sur le côté suivant [distance __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Cliquez sur plusieurs ci-dessous pour accéder au point suivant: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Cliquez sur le point de passage ou saisissez la distance, négative pour l'autre côté [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Multiple Cliquez sur le point de passage ou saisissez la distance, négative pour l'autre côté [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Décomposition (DIMEXO) .overall-scale-dimscale = Échelle globale (DIMSCALE) .pedit-enter-option = PEDIT Saisissez l'option : diff --git a/locales/hi-IN/opencadstudio.ftl b/locales/hi-IN/opencadstudio.ftl index e0abed923..1c652a226 100644 --- a/locales/hi-IN/opencadstudio.ftl +++ b/locales/hi-IN/opencadstudio.ftl @@ -3011,6 +3011,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ बिंदु के माध्यम से क्लिक करें या [एकाधिक]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ अगली दिशा की ओर क्लिक करें [दूरी __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ एकाधिक बिंदु के माध्यम से आगे क्लिक करें: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ पारगमन बिंदु पर क्लिक करें या दूरी टाइप करें, दूसरी ओर के लिए ऋणात्मक [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ एकाधिक पारगमन बिंदु पर क्लिक करें या दूरी टाइप करें, दूसरी ओर के लिए ऋणात्मक [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = ऑफसेट (DIMEXO) .overall-scale-dimscale = कुल मिलाकर स्केल (DIMSCALE) .pedit-enter-option = PEDIT विकल्प दर्ज करें: diff --git a/locales/hu-HU/opencadstudio.ftl b/locales/hu-HU/opencadstudio.ftl index 3a412ad09..bd470afc9 100644 --- a/locales/hu-HU/opencadstudio.ftl +++ b/locales/hu-HU/opencadstudio.ftl @@ -3022,6 +3022,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Átkattintási pont vagy [Multiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Több kattintás a következő oldalon [távolság __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Több kattintás a következő ponton: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Kattintson az átmenő pontra, vagy írja be a távolságot, negatívat a másik oldalhoz [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Többszörös Kattintson az átmenő pontra, vagy írja be a távolságot, negatívat a másik oldalhoz [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Eltolás (DIMEXO) .overall-scale-dimscale = Teljes skála (DIMSCALE) .pedit-enter-option = PEDIT Enter opció: diff --git a/locales/it-IT/opencadstudio.ftl b/locales/it-IT/opencadstudio.ftl index 29901bfdc..62201d656 100644 --- a/locales/it-IT/opencadstudio.ftl +++ b/locales/it-IT/opencadstudio.ftl @@ -3022,6 +3022,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Punto di passaggio o [Multiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Clic multiplo sul lato successivo [distanza __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Clic multiplo sul punto successivo: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Fare clic sul punto di passaggio o digitare la distanza, negativa per l'altro lato [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Multiplo Fare clic sul punto di passaggio o digitare la distanza, negativa per l'altro lato [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Spostamento (DIMEXO) .overall-scale-dimscale = Scala totale (DIMSCALE) .pedit-enter-option = Opzione PEDIT Enter: diff --git a/locales/ja-JP/opencadstudio.ftl b/locales/ja-JP/opencadstudio.ftl index 616fbee9e..2080e66fa 100644 --- a/locales/ja-JP/opencadstudio.ftl +++ b/locales/ja-JP/opencadstudio.ftl @@ -3013,6 +3013,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ 通過点をクリックまたは [複数]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ 複数 次の側をクリック [距離 __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ 複数 次の通過点をクリック: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ 通過点をクリックまたは距離を入力、負の値で反対側 [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ 複数 通過点をクリックまたは距離を入力、負の値で反対側 [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = オフセット (DIMEXO) .overall-scale-dimscale = 全体尺度 (DIMSCALE) .pedit-enter-option = PEDIT オプションを入力: diff --git a/locales/ko-KR/opencadstudio.ftl b/locales/ko-KR/opencadstudio.ftl index 4e963349d..c08256edf 100644 --- a/locales/ko-KR/opencadstudio.ftl +++ b/locales/ko-KR/opencadstudio.ftl @@ -3022,6 +3022,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ 클릭 통과 점 또는 [Multiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ 다중 다음 측면 클릭 [거리 __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ 다중 클릭 다음 통과 지점: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ 통과점을 클릭하거나 거리 입력, 음수는 반대쪽 [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ 다중 통과점을 클릭하거나 거리 입력, 음수는 반대쪽 [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = 오프셋(DIMEXO) .overall-scale-dimscale = 전체 규모(DIMSCALE) .pedit-enter-option = PEDIT Enter 옵션: diff --git a/locales/nl-NL/opencadstudio.ftl b/locales/nl-NL/opencadstudio.ftl index 80e8ac9eb..b3f8b9128 100644 --- a/locales/nl-NL/opencadstudio.ftl +++ b/locales/nl-NL/opencadstudio.ftl @@ -3023,6 +3023,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Klik door punt of [meerdere]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Meerdere klik op volgende zijde [afstand __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Meerdere klik volgende door punt: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Klik door punt of typ afstand, negatief voor de andere kant [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Meerdere Klik door punt of typ afstand, negatief voor de andere kant [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Verschuiving (DIMEXO) .overall-scale-dimscale = Totale schaal (DIMSCALE) .pedit-enter-option = PEDIT Voer optie in: diff --git a/locales/pl-PL/opencadstudio.ftl b/locales/pl-PL/opencadstudio.ftl index 9fdaea28d..ead09a42c 100644 --- a/locales/pl-PL/opencadstudio.ftl +++ b/locales/pl-PL/opencadstudio.ftl @@ -3022,6 +3022,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Punkt przelotowy lub [Multiple]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Wielokrotne kliknięcie następnej strony [odległość __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Wielokrotne kliknięcie następnego punktu przelotowego: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Kliknij punkt przelotowy lub wpisz odległość, ujemną dla drugiej strony [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Wielokrotnie Kliknij punkt przelotowy lub wpisz odległość, ujemną dla drugiej strony [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Przesunięcie (DIMEXO) .overall-scale-dimscale = Skala ogólna (DIMSCALE) .pedit-enter-option = Opcja PEDIT Enter: diff --git a/locales/pt-BR/opencadstudio.ftl b/locales/pt-BR/opencadstudio.ftl index 8901c55da..5f4346007 100644 --- a/locales/pt-BR/opencadstudio.ftl +++ b/locales/pt-BR/opencadstudio.ftl @@ -3023,6 +3023,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Clique no ponto de passagem ou [Múltiplo]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Múltiplo Clique no próximo lado [distância __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Múltiplo Clique no próximo ponto de passagem: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Clique no ponto de passagem ou digite a distância, negativa para o outro lado [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Múltiplo Clique no ponto de passagem ou digite a distância, negativa para o outro lado [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Deslocamento (DIMEXO) .overall-scale-dimscale = Escala geral (DIMSCALE) .pedit-enter-option = PEDIT Insira a opção: diff --git a/locales/ru-RU/opencadstudio.ftl b/locales/ru-RU/opencadstudio.ftl index 40697720e..f3205c936 100644 --- a/locales/ru-RU/opencadstudio.ftl +++ b/locales/ru-RU/opencadstudio.ftl @@ -3026,6 +3026,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Нажмите на точку или [Множественное число]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Несколько кликов на следующую сторону [расстояние __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Несколько кликов по следующей точке: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Укажите точку прохождения или введите расстояние, отрицательное для другой стороны [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Несколько Укажите точку прохождения или введите расстояние, отрицательное для другой стороны [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Отступ от объекта (DIMEXO) .overall-scale-dimscale = Общий масштаб (DIMSCALE) .pedit-enter-option = PEDIT Введите опцию: diff --git a/locales/tr-TR/opencadstudio.ftl b/locales/tr-TR/opencadstudio.ftl index 5ca8fb648..c72668224 100644 --- a/locales/tr-TR/opencadstudio.ftl +++ b/locales/tr-TR/opencadstudio.ftl @@ -3005,6 +3005,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Geçiş noktasına tıklayın veya [Birden Çok]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Birden Çok Sonraki tarafa tıklayın [mesafe __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Birden Çok Sonraki geçiş noktasına tıklayın: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Geçiş noktasına tıklayın veya mesafe yazın, diğer taraf için negatif [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ Birden Çok Geçiş noktasına tıklayın veya mesafe yazın, diğer taraf için negatif [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = Ofset (DIMEXO) .overall-scale-dimscale = Genel ölçek (DIMSCALE) .pedit-enter-option = PEDIT Seçeneği girin: diff --git a/locales/zh-CN/opencadstudio.ftl b/locales/zh-CN/opencadstudio.ftl index 078806de7..5b89f5ada 100644 --- a/locales/zh-CN/opencadstudio.ftl +++ b/locales/zh-CN/opencadstudio.ftl @@ -3010,6 +3010,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ 单击通过点或 [多个]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ 多个 单击下一侧 [距离 __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ 多个 单击下一个通过点: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ 单击通过点或输入距离,负值偏移到另一侧 [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ 多个 单击通过点或输入距离,负值偏移到另一侧 [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = 偏移 (DIMEXO) .overall-scale-dimscale = 全局比例 (DIMSCALE) .pedit-enter-option = PEDIT 输入选项: diff --git a/locales/zh-TW/opencadstudio.ftl b/locales/zh-TW/opencadstudio.ftl index 3af162dc8..90d5489f3 100644 --- a/locales/zh-TW/opencadstudio.ftl +++ b/locales/zh-TW/opencadstudio.ftl @@ -3022,6 +3022,8 @@ modify = .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ 按一下通過點或 [多個]: .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ 多個 按一下下一側 [距離 __ocs_arg_d__]: .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ 多個 按一下下一個通過點: + .offset-n-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ 按一下通過點或輸入距離,負值偏移到另一側 [Multiple/Erase/Layer] <__ocs_arg_d__>: + .offset-n-multiple-click-through-point-or-type-distance = OFFSET__ocs_arg_n__ 多個 按一下通過點或輸入距離,負值偏移到另一側 [Erase/Layer] <__ocs_arg_d__>: .offset-dimexo = 偏移 (DIMEXO) .overall-scale-dimscale = 全局比例 (DIMSCALE) .pedit-enter-option = PEDIT 輸入選項: diff --git a/src/app/commands/dim.rs b/src/app/commands/dim.rs index 2bc34742a..297e89d2a 100644 --- a/src/app/commands/dim.rs +++ b/src/app/commands/dim.rs @@ -1268,7 +1268,8 @@ impl OpenCADStudio { }) .collect(); // Pick-first (#422): with offsettable objects already selected, - // skip the pick step and go straight to distance / side. + // skip the distance and pick steps and open on the live side + // preview. let preselected: Vec<_> = self.tabs[i] .scene .selected_entities() diff --git a/src/locale_catalog.rs b/src/locale_catalog.rs index ba91e7781..3fcae5ffd 100644 --- a/src/locale_catalog.rs +++ b/src/locale_catalog.rs @@ -2049,6 +2049,8 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static "OFFSET%{n} Click through point or [Multiple]:" => Some(("modify", "offset-n-click-through-point-or-multiple")), "OFFSET%{n} Multiple Click next side [distance %{d}]:" => Some(("modify", "offset-n-multiple-click-next-side-distance-d")), "OFFSET%{n} Multiple Click next through point:" => Some(("modify", "offset-n-multiple-click-next-through-point")), + "OFFSET%{n} Click through point or type distance, negative for the other side [Multiple/Erase/Layer] <%{d}>:" => Some(("modify", "offset-n-click-through-point-or-type-distance")), + "OFFSET%{n} Multiple Click through point or type distance, negative for the other side [Erase/Layer] <%{d}>:" => Some(("modify", "offset-n-multiple-click-through-point-or-type-distance")), "OK" => Some(("common", "ok")), "OLE Frame" => Some(("properties", "ole-frame")), "OOPS: nothing to restore." => Some(("file", "oops-nothing-to-restore")), diff --git a/src/modules/draw/modify/offset.rs b/src/modules/draw/modify/offset.rs index be4a901b2..843c67a11 100644 --- a/src/modules/draw/modify/offset.rs +++ b/src/modules/draw/modify/offset.rs @@ -9,6 +9,10 @@ // 2. Pick object to offset (Line, Arc, Circle, LwPolyline) // 3. Pick a point on the side to offset toward, or choose Multiple // to keep offsetting the newly created result at the same distance +// +// With objects already selected, the command opens at step 3 instead, the +// preview following the cursor. At step 3 a typed distance places the +// offset at once on the cursor's side; a negative one, on the other side. use crate::entities::curve::{entity_curve, lwpolyline_world_xy}; use crate::modules::draw::modify::spline_ops::spline_sample_xy; @@ -331,13 +335,18 @@ fn compute_offsets(entity: &EntityType, dist: f64, side_pt: Vec3) -> Vec f64 { + closest_on_wire(entity, pt).map_or(0.0, |(_, d)| d) +} + +/// Nearest point of the entity outline to `pt`, and its distance. +fn closest_on_wire(entity: &EntityType, pt: Vec3) -> Option<([f64; 2], f64)> { let pts = entity_wire_pts(entity); if pts.len() < 2 { - return 0.0; + return None; } let px = pt.x as f64; let py = pt.y as f64; - let mut best = f64::INFINITY; + let mut best = ([px, py], f64::INFINITY); for w in pts.windows(2) { let ax = w[0][0] as f64; let ay = w[0][1] as f64; @@ -354,11 +363,35 @@ fn perp_distance(entity: &EntityType, pt: Vec3) -> f64 { let cx = ax + t * dx; let cy = ay + t * dy; let d = ((px - cx).powi(2) + (py - cy).powi(2)).sqrt(); - if d < best { - best = d; + if d < best.1 { + best = ([cx, cy], d); } } - best + Some(best) +} + +// ── Opposite side ───────────────────────────────────────────────────────── +// +// A negative typed distance offsets away from the cursor. Rather than teach +// every offset function a sign, the cursor is mirrored through its nearest +// point on the outline, which puts it on the other side for every type: the +// other half-plane of a line, inside instead of outside a circle or closed +// loop. The mirror stops at half the offset distance so that, in a narrow +// part of a shape, it cannot cross the far wall and come back to the +// cursor's own side. + +fn far_side(entity: &EntityType, pt: Vec3, dist: f64) -> Option { + let ([qx, qy], d) = closest_on_wire(entity, pt)?; + if d < 1e-9 { + // On the outline itself: there is no side to be opposite to. + return None; + } + let step = d.min(dist * 0.5) / d; + Some(Vec3::new( + (qx + (qx - pt.x as f64) * step) as f32, + (qy + (qy - pt.y as f64) * step) as f32, + pt.z, + )) } // ── Wire preview points ───────────────────────────────────────────────────── @@ -440,9 +473,13 @@ pub struct OffsetCommand { /// Unlike the command's opening snapshot, this also includes objects /// created by earlier offsets while the command remains active. picked: Option, - /// Pre-selected offsettable objects (pick-first, #422); consumed when the - /// distance step resolves. - preselected: Vec, + /// Last cursor position the preview saw. A distance typed at the side + /// step places the offset relative to it. + cursor: Option, + /// The command opened on pre-selected objects (#422) and has made nothing + /// yet: Enter takes the last distance, and Erase / Layer, which the + /// skipped distance step would have offered, are offered here. + drag_start: bool, /// A Yes/No or Current/Source answer is being collected for this option. awaiting: Option, /// Erase option: replace the source object with its offset. @@ -485,7 +522,8 @@ impl OffsetCommand { all_entities, entity_index, picked: None, - preselected: Vec::new(), + cursor: None, + drag_start: false, awaiting: None, erase_source: false, layer_current: false, @@ -494,38 +532,28 @@ impl OffsetCommand { } } - /// Pick-first flow (#422): the distance step still comes first, then the - /// pre-selected objects go straight to the side step. + /// Pick-first flow (#422): the objects are already chosen, so the command + /// opens at the side step with the preview following the cursor. Clicking + /// offsets through the cursor; typing a distance places it at that + /// distance; Enter repeats the last distance (#418). pub fn with_selection(all_entities: Vec, targets: Vec) -> Self { - let entity_index = ModifyEntityIndex::build(&all_entities); - Self { - step: Step::Distance, - all_entities, - entity_index, - picked: None, - preselected: targets, - awaiting: None, - erase_source: false, - layer_current: false, - targets_are_sources: false, - made: 0, + let mut cmd = Self::new(all_entities); + if !targets.is_empty() { + cmd.step = Step::PickSide { + targets, + locked: None, + multiple: false, + }; + cmd.targets_are_sources = true; + cmd.drag_start = true; } + cmd } /// Leave the distance step with the given mode (Some = locked distance, - /// None = through): pre-selected objects jump to the side step, otherwise - /// the object-pick loop starts. + /// None = through) for the object-pick loop. fn advance_from_distance(&mut self, locked: Option) -> CmdResult { - if self.preselected.is_empty() { - self.step = Step::SelectObject { locked }; - } else { - self.step = Step::PickSide { - targets: std::mem::take(&mut self.preselected), - locked, - multiple: false, - }; - self.targets_are_sources = true; - } + self.step = Step::SelectObject { locked }; CmdResult::NeedPoint } @@ -554,6 +582,73 @@ impl OffsetCommand { t!("OFFSET distance = %{d}", d = d).into_owned() ) } + + /// Offset the side step's targets with `pt` choosing the side: toward it, + /// or away from it when `flip` is set. Each target offsets by its own + /// through-distance, or by the locked magnitude. + fn place(&mut self, pt: DVec3, flip: bool) -> CmdResult { + let (locked, targets, multiple) = match &self.step { + Step::PickSide { + locked, + targets, + multiple, + } => (*locked, targets.clone(), *multiple), + + _ => return CmdResult::NeedPoint, + }; + let per_target: Vec<(Handle, Vec)> = targets + .iter() + .filter_map(|entity| { + let mag = locked.unwrap_or_else(|| perp_distance(entity, pt.as_vec3())); + if mag < 1e-9 { + return None; + } + let side = if flip { + far_side(entity, pt.as_vec3(), mag)? + } else { + pt.as_vec3() + }; + let offsets = compute_offsets(entity, mag, side); + (!offsets.is_empty()).then(|| (entity.common().handle, offsets)) + }) + .collect(); + let mut news: Vec = per_target + .iter() + .flat_map(|(_, offsets)| offsets.iter().cloned()) + .collect(); + if news.is_empty() { + return CmdResult::NeedPoint; + } + self.made += 1; + self.drag_start = false; + // Erase option: the offset replaces its source object. Only the + // objects picked from the drawing qualify — a Multiple chain's + // targets are the offsets just made, which are not replaced again. + let erase = self.erase_source && self.targets_are_sources; + self.targets_are_sources = false; + if multiple { + // Multiple mode chains from the result just created, matching + // OFFSET's repeated fixed-distance behavior (parallel/concentric + // series instead of duplicate copies at the first offset). + self.step = Step::PickSide { + targets: news.clone(), + locked, + multiple: true, + }; + } else { + // Classic loop (#418): commit this offset and go back to the object + // pick at the same distance, until Enter / Esc finishes. + self.step = Step::SelectObject { locked }; + } + if erase { + return CmdResult::ReplaceManyContinue(per_target); + } + if news.len() == 1 { + CmdResult::CommitEntity(news.pop().unwrap()) + } else { + CmdResult::CommitEntities(news) + } + } } impl CadCommand for OffsetCommand { @@ -602,6 +697,23 @@ impl CadCommand for OffsetCommand { } else { std::borrow::Cow::Borrowed("") }; + if self.drag_start { + let d = format!("{:.4}", defaults::get_offset_dist()); + return if *multiple { + t!( + "OFFSET%{n} Multiple Click through point or type distance, negative for the other side [Erase/Layer] <%{d}>:", + n = n, + d = d + ) + } else { + t!( + "OFFSET%{n} Click through point or type distance, negative for the other side [Multiple/Erase/Layer] <%{d}>:", + n = n, + d = d + ) + } + .into_owned(); + } match (locked, multiple) { (Some(d), false) => { let d = format!("{:.4}", d); @@ -658,6 +770,16 @@ impl CadCommand for OffsetCommand { opts.push(CmdOption::enter("Exit")); opts } + Step::PickSide { multiple, .. } if self.drag_start => { + let mut opts = Vec::new(); + if !multiple { + opts.push(CmdOption::new("Multiple", "M")); + } + opts.push(CmdOption::new("Erase", "E")); + opts.push(CmdOption::new("Layer", "L")); + opts.push(CmdOption::enter(&format!("{:.4}", defaults::get_offset_dist()))); + opts + } Step::PickSide { multiple, .. } => { let mut opts = Vec::new(); if !multiple { @@ -777,19 +899,23 @@ impl CadCommand for OffsetCommand { { return self.undo_last(); } + // Erase / Layer belong to the distance step, or to the side step when + // a pre-selection skipped the distance step. + if matches!(self.step, Step::Distance) || self.drag_start { + if upper == "E" || upper == "ERASE" { + self.awaiting = Some(Await::Erase); + return Some(CmdResult::NeedPoint); + } + if upper == "L" || upper == "LAYER" { + self.awaiting = Some(Await::Layer); + return Some(CmdResult::NeedPoint); + } + } match &mut self.step { Step::Distance => { if t.eq_ignore_ascii_case("t") || t.eq_ignore_ascii_case("through") { return Some(self.advance_from_distance(None)); } - if upper == "E" || upper == "ERASE" { - self.awaiting = Some(Await::Erase); - return Some(CmdResult::NeedPoint); - } - if upper == "L" || upper == "LAYER" { - self.awaiting = Some(Await::Layer); - return Some(CmdResult::NeedPoint); - } if let Some(d) = crate::entities::common::parse_typed_length(&t) { return Some(self.accept_distance(d)); } @@ -804,15 +930,20 @@ impl CadCommand for OffsetCommand { *multiple = true; return Some(CmdResult::NeedPoint); } - if !t.is_empty() { - if let Some(d) = crate::entities::common::parse_typed_length(&t) { - let d = d.abs().max(1e-9); - defaults::set_offset_dist(d); - *locked = Some(d); - } + let Some(d) = crate::entities::common::parse_typed_length(&t) else { + return Some(CmdResult::NeedPoint); + }; + let mag = d.abs().max(1e-9); + defaults::set_offset_dist(mag); + *locked = Some(mag); + // The cursor has already chosen the side, so the value places + // the offset now: on the cursor's side, or the other side when + // negative. Before the cursor has been seen, the click still + // chooses. + match self.cursor { + Some(cursor) => Some(self.place(cursor, d < 0.0)), + None => Some(CmdResult::NeedPoint), } - // Stay on the side step — the click chooses which side. - Some(CmdResult::NeedPoint) } _ => None, } @@ -863,66 +994,11 @@ impl CadCommand for OffsetCommand { _ => {} } - let (locked, targets, multiple) = match &self.step { - Step::PickSide { - locked, - targets, - multiple, - } => (*locked, targets.clone(), *multiple), - - _ => return CmdResult::NeedPoint, - }; - // Each target offsets by its own through-distance (or the locked - // magnitude), toward the clicked side. - let per_target: Vec<(Handle, Vec)> = targets - .iter() - .filter_map(|entity| { - let mag = locked.unwrap_or_else(|| perp_distance(entity, pt.as_vec3())); - if mag < 1e-9 { - return None; - } - let offsets = compute_offsets(entity, mag, pt.as_vec3()); - (!offsets.is_empty()).then(|| (entity.common().handle, offsets)) - }) - .collect(); - let mut news: Vec = per_target - .iter() - .flat_map(|(_, offsets)| offsets.iter().cloned()) - .collect(); - if news.is_empty() { - return CmdResult::NeedPoint; - } - self.made += 1; - // Erase option: the offset replaces its source object. Only the - // objects picked from the drawing qualify — a Multiple chain's - // targets are the offsets just made, which are not replaced again. - let erase = self.erase_source && self.targets_are_sources; - self.targets_are_sources = false; - if multiple { - // Multiple mode chains from the result just created, matching - // OFFSET's repeated fixed-distance behavior (parallel/concentric - // series instead of duplicate copies at the first offset). - self.step = Step::PickSide { - targets: news.clone(), - locked, - multiple: true, - }; - } else { - // Classic loop (#418): commit this offset and go back to the object - // pick at the same distance, until Enter / Esc finishes. - self.step = Step::SelectObject { locked }; - } - if erase { - return CmdResult::ReplaceManyContinue(per_target); - } - if news.len() == 1 { - CmdResult::CommitEntity(news.pop().unwrap()) - } else { - CmdResult::CommitEntities(news) - } + self.place(pt, false) } fn on_preview_wires(&mut self, pt: DVec3) -> Vec { + self.cursor = Some(pt); if let Step::ReferenceSecond { first } = &self.step { return vec![WireModel::solid( "offset_reference_distance".into(), @@ -979,6 +1055,17 @@ impl CadCommand for OffsetCommand { let d = defaults::get_offset_dist(); self.accept_distance(d) } + // Opened on a pre-selection, the same Enter offsets by the last + // distance on the cursor's side. + Step::PickSide { .. } if self.drag_start => { + let Some(cursor) = self.cursor else { + return CmdResult::NeedPoint; + }; + if let Step::PickSide { locked, .. } = &mut self.step { + *locked = Some(defaults::get_offset_dist()); + } + self.place(cursor, false) + } _ => CmdResult::Cancel, } } @@ -1100,3 +1187,127 @@ mod option_tests { assert!(matches!(cmd.on_point(DVec3::new(5.0, 5.0, 0.0)), CmdResult::CommitEntity(_))); } } + +#[cfg(test)] +mod drag_tests { + use super::*; + use codec::types::Vector2; + + fn line_y0() -> EntityType { + let mut line = codec::entities::Line::from_coords(0.0, 0.0, 0.0, 10.0, 0.0, 0.0); + line.common.handle = Handle::new(1); + EntityType::Line(line) + } + + /// OFFSET opened on `target`, with the cursor hovering at `cursor`. + fn dragging(target: EntityType, cursor: [f64; 2]) -> OffsetCommand { + let mut cmd = OffsetCommand::with_selection(vec![target.clone()], vec![target]); + cmd.on_preview_wires(DVec3::new(cursor[0], cursor[1], 0.0)); + cmd + } + + fn committed_line_y(result: Option) -> f64 { + match result { + Some(CmdResult::CommitEntity(EntityType::Line(l))) => l.start.y, + _ => panic!("expected one committed line"), + } + } + + #[test] + fn preselection_opens_on_the_live_preview() { + let mut cmd = OffsetCommand::with_selection(vec![line_y0()], vec![line_y0()]); + assert!(matches!(cmd.step, Step::PickSide { locked: None, .. })); + assert_eq!(cmd.options().into_iter().map(|o| o.keyword).collect::>(), ["M", "E", "L", ""]); + // The preview passes through the cursor before anything is typed. + assert_eq!(cmd.on_preview_wires(DVec3::new(5.0, 3.0, 0.0)).len(), 1); + assert_eq!(cmd.dyn_live_value(DVec3::new(5.0, 3.0, 0.0)), Some(3.0)); + // A click still offsets through the cursor. + assert!(matches!(cmd.on_point(DVec3::new(5.0, 3.0, 0.0)), CmdResult::CommitEntity(_))); + } + + #[test] + fn typed_distance_places_on_the_cursor_side() { + let mut cmd = dragging(line_y0(), [5.0, 3.0]); + assert!((committed_line_y(cmd.on_text_input("2")) - 2.0).abs() < 1e-9); + // The loop continues at the typed distance. + assert!(matches!(cmd.step, Step::SelectObject { locked: Some(d) } if d == 2.0)); + } + + #[test] + fn negative_distance_places_on_the_other_side() { + let mut cmd = dragging(line_y0(), [5.0, 3.0]); + assert!((committed_line_y(cmd.on_text_input("-2")) + 2.0).abs() < 1e-9); + assert_eq!(defaults::get_offset_dist(), 2.0); + } + + #[test] + fn negative_distance_inside_a_circle_grows_it() { + let circle = EntityType::Circle(CircleEnt { + center: codec::types::Vector3::new(0.0, 0.0, 0.0), + radius: 10.0, + ..Default::default() + }); + let mut cmd = dragging(circle.clone(), [3.0, 0.0]); + match cmd.on_text_input("-1") { + Some(CmdResult::CommitEntity(EntityType::Circle(c))) => assert!((c.radius - 11.0).abs() < 1e-9), + _ => panic!("expected one committed circle"), + } + let mut cmd = dragging(circle, [3.0, 0.0]); + match cmd.on_text_input("1") { + Some(CmdResult::CommitEntity(EntityType::Circle(c))) => assert!((c.radius - 9.0).abs() < 1e-9), + _ => panic!("expected one committed circle"), + } + } + + // A U whose arms sit 1 apart. From inside the left arm the nearest wall + // faces the gap; mirroring the cursor its full 1.9 across would land in + // the right arm, back inside the loop. -0.25 must still go outward. + #[test] + fn negative_distance_does_not_mirror_across_a_gap() { + let u = EntityType::LwPolyline(LwPolyline { + vertices: [ + [0.0, 0.0], [9.0, 0.0], [9.0, 10.0], [5.0, 10.0], + [5.0, 2.0], [4.0, 2.0], [4.0, 10.0], [0.0, 10.0], + ] + .iter() + .map(|&[x, y]| LwVertex::new(Vector2::new(x, y))) + .collect(), + is_closed: true, + ..Default::default() + }); + let mut cmd = dragging(u, [2.1, 6.0]); + match cmd.on_text_input("-0.25") { + Some(CmdResult::CommitEntity(EntityType::LwPolyline(p))) => { + let min_x = p.vertices.iter().map(|v| v.location.x).fold(f64::INFINITY, f64::min); + assert!((min_x + 0.25).abs() < 1e-6, "offset went inward: min x {min_x}"); + } + _ => panic!("expected one committed polyline"), + } + } + + #[test] + fn enter_repeats_the_last_distance_on_the_cursor_side() { + defaults::set_offset_dist(4.0); + let mut cmd = dragging(line_y0(), [5.0, -1.0]); + match cmd.on_enter() { + CmdResult::CommitEntity(EntityType::Line(l)) => assert!((l.start.y + 4.0).abs() < 1e-9), + _ => panic!("expected one committed line"), + } + // After that, Enter finishes as before. + assert!(matches!(cmd.on_enter(), CmdResult::Cancel)); + } + + #[test] + fn erase_is_offered_without_the_distance_step() { + let mut cmd = dragging(line_y0(), [5.0, 3.0]); + cmd.on_text_input("E"); + cmd.on_text_input("Y"); + assert!(matches!(cmd.on_text_input("2"), Some(CmdResult::ReplaceManyContinue(_)))); + } + + #[test] + fn without_preselection_the_distance_comes_first() { + let cmd = OffsetCommand::new(vec![line_y0()]); + assert!(matches!(cmd.step, Step::Distance)); + } +} From 1093900a490b0ff3b00a4a9bd12d69d884618286 Mon Sep 17 00:00:00 2001 From: Christopher Overbeck Date: Fri, 2 Oct 2026 15:38:47 -0500 Subject: [PATCH 08/43] feat(ribbon): highlight the running command's button A command started from the command line, an alias, a shortcut or Repeat now lights the same ribbon button a click on it would, so users learn where the tools they type live. A button inside a dropdown lights the dropdown, a slide-out tool lights its group title, a tool hidden in a collapsed panel lights the panel's opener, and a button on another tab lights that tab's header. Always on, in the existing active-button blue. Buttons are matched by the command they dispatch, so ids that differ from their command still resolve; the tab on show wins when a command appears twice, and a clicked button keeps its highlight. Transparent commands leave the running command lit. The #355 rule that a highlight lasts only while something runs moves from the ribbon click handler into dispatch_command, so typed commands are cleared the same way. Co-Authored-By: Claude Opus 5.5 --- .../ribbon-highlight/after-dimbreak.png | Bin 0 -> 39875 bytes .../ribbon-highlight/after-offset.png | Bin 0 -> 39706 bytes .../ribbon-highlight/after-xline.png | Bin 0 -> 39783 bytes .../ribbon-highlight/before-dimbreak.png | Bin 0 -> 39400 bytes .../ribbon-highlight/before-offset.png | Bin 0 -> 39400 bytes .../ribbon-highlight/before-xline.png | Bin 0 -> 39400 bytes src/app/commands/mod.rs | 72 ++++- src/app/update/dialog.rs | 22 +- src/ui/ribbon/draw_panel.rs | 48 ++- src/ui/ribbon/locate.rs | 283 ++++++++++++++++++ src/ui/ribbon/mod.rs | 33 +- 11 files changed, 425 insertions(+), 33 deletions(-) create mode 100644 docs/screenshots/ribbon-highlight/after-dimbreak.png create mode 100644 docs/screenshots/ribbon-highlight/after-offset.png create mode 100644 docs/screenshots/ribbon-highlight/after-xline.png create mode 100644 docs/screenshots/ribbon-highlight/before-dimbreak.png create mode 100644 docs/screenshots/ribbon-highlight/before-offset.png create mode 100644 docs/screenshots/ribbon-highlight/before-xline.png create mode 100644 src/ui/ribbon/locate.rs diff --git a/docs/screenshots/ribbon-highlight/after-dimbreak.png b/docs/screenshots/ribbon-highlight/after-dimbreak.png new file mode 100644 index 0000000000000000000000000000000000000000..b8dff2f5145b06abd6ba4c872a0fcf58b38cda0f GIT binary patch literal 39875 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 F{|Bh^Nv{9^ literal 0 HcmV?d00001 diff --git a/docs/screenshots/ribbon-highlight/after-offset.png b/docs/screenshots/ribbon-highlight/after-offset.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c79c1f7466bb3a4706f3036f4d568f07f0fcb1 GIT binary patch literal 39706 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

jULr3+TKXplk1e+7o(1=b&NH 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 UxZQ%R9y(xIncJE*n0O`q7b)4)YybcN literal 0 HcmV?d00001 diff --git a/docs/screenshots/ribbon-highlight/after-xline.png b/docs/screenshots/ribbon-highlight/after-xline.png new file mode 100644 index 0000000000000000000000000000000000000000..e0edc2e7a6f27e1a699a9f3f556830377ac5a0ed GIT binary patch literal 39783 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%0Am zr3p9oj?bP3-OvUjn{1*G4_^rW$7TL&=uDN{uvGv4Y5)5ODeUnViz?&a zl=RMW!sHO2@K*})H#|6G1_TISOIX6*fZ~^tkF2DmXSW=!ob|y7&o)3o7Ybn?3R0}0 zB+3a@p+aG(?R)Q-@!??w5095W8+=R^paG>9MSJ+R<0v(*?1Ud>Zf~&RWj?~ zET*nYm#>vy@tohJBM^gm!iSmPKI0ILjJ%5)3k@YkHj@I1n%9Cn7uo zLWm3=cOiCpLSrKbxQz!yA4~B;`UV)&S&YK3hPk=9m6enVN=s>OI)#t_@q!Q%0N#+w zc+@+i3KsTZ>2nO*I%{<r?l`5(NdSwF6y?i)b`C zG(=xGhltNv9OYjUMd4-j%9n~6OFj_n#}OQ6-F79G#p^c1ON@Cbp`wtZxj#+(yov!Y z&FC6|88-U!x<9{#WW{`=D#}d-`>xpl1QUYsWyY62)Xq3qI++KAg&Kq^#QQ--m7aNG zWn9*sQqnUr=4WPD$}iG*-D(*+U+v!x#RXVy7&NF6n=E?nQydM}SuWI39tf8X9TQ z!~)h5)R9ebAox9k)x7W~?~=7>O3{6V_3PDnW|L+&6#cgkc9wSX;Vce!e_t*v9J>nI zH?-d-ZR7rK{#ErF-K?Cb7O!%RXdR@%n|G>FT?bn%Uj0@Rh{7m#?W zk;44ywIysmwc*#aD(lta(@RseW{;M#x$?zY$h3G7$YHsE9(N+xosN~QR_ec1_ytXW zazx%$ke83WF2~7)8=|bW48gzL;yG`<;4k1zkOc0BtkiEE!lZK+E21;#f+kS1esEwK z9bWzHhk*H(6N7giucCl`NDR_iN%Ot!@BvSkIK8#eq?Fg8X|22c`M>-=$L+*az&| zu0p!MC~Gh_>W>1)IZ7q5kZGjtI+IDF-hE_E<70D~OrSym zoI;FR&NKYo;@8fSbIc~ zXpcP=qbs^BYrZ0Ny8Q5X+;r6r!QymeYOJtQa-VqrZDgmwbdNX3XhykiiDG7NlOO8& zBRgr&KPTZt$#kwg9L8P547?I_u(fUdDw_}Rygn3*l@_P6xSK@b4D4 z&;=dF(bmeUqNSw;8iz2%HTQkm=a8QOVJN?^miu;HaF4=pvc1<>3JOp^bW8dvNG7=Q z2YDvJGjtc_qZkxW;r{11@<%zW zsL3|khb?ACRMZ&;Ht$CB{2<3NpsXQ=HVaPCaZXd1AojfU`v>%8@q4Y%O;|z>aFfFa z!yqJy&1360#vQHt=GlE{MTGpGOSgi)ufQcVRjXX(yfp*NIbtPmrKC2J%t(DwEG2!l zI!gC|FYz+#ArErLKbP!n%0CB9b*tmi;ew>GCb+-^I!^N{!ODdXy&w2HYCF)h zUaw;6L$j;(7hF6SgtF(eV__qHXr`;+{mCd^}Y`Z{o!c&S z6_HIc!llb@g2Y0CYtMD0Q`h~7B7vmWge6KIpqE!$a{cI;ej0Q5$~9YWJdTGhc^yB`klr$ZyvE*!Q zJm)5lH*5OsHkVRolU6NOITTgK%6*>aAe{eOI%%XuI+X#*`=RG8la;|?2_8I%rK&u<*w-0$DD|tR^9vAJJZLT$OZdkYMftLP`BN)`JA_C}-LX_wLVU+K> zD`JfW`YtV*@hm0w!Tu^RzbbEy(3Z1Ko)P-UI|kDY+N{#{I=o&cYT>FWno+_yfR5HERkGZ=KIrA7% z6r+GZMj;6cJ0qJX@k_a8!w3$)-qVO$q{8b5{xzxBuwbeZxudmKT8+2ZyL(}$?^LqD z!Zfur>%u_>u?Xc0MK0fnd@}g?Gxs9Zx#ZrJ7Bk8jAFwUyFwf%iD?HjeUr_BBFBKW8 z@N(7xA|4VPG_Wd+>u}C!_(@0t8odxL8bz!u3gSD6nKH3W-&B9kdZ}7}ijM}Ty(htA zZ~1a4%|`i5d20#z>HGQ(J`7?!WRIo%=E+s6!%0OqEhGWZ`E*I+La6%I*w)_a!xu|Q z^gq3$uvhR?;Vt0Vq)0+qM>ru!WD|!SP%oMAx!ZU1>9jgmRJPx*6rRlmINZ4SJh&7E za-dVRmrutTYb>AsIPV-?!rP>#Pc6UBFX2{gRbr)Lm|of6R5huV(b;yU&#Kczmoho5 zsOX$7yyk*`yms8VtqkmtWzMo(qk6w0(COUaxpr?mhHWfuGp*fty4AN@dGCpR5oD$s zMwaCm3eCsJzR>$9ESMfGFjfji^iyO%@9%sa?YwOZew9`!S^Ft;z>b0-A>tfQK^x*B zRgL(T8Sa)y7n`JAa}7<{dWme-%X;m3S%@*b@tfBfuCd~bVu0H}G;$JgKsBFt;h$TH za9RG-bxLP>60KS~dworreAU9f`M?6izywTJ&ZJ2!><~mK&PZ1isN@arInI5g{JCIgN+u~Wda;t z4q^zTf3>q(wkPNK9n$vhXqygvDckQmlU8{jf5gXq3L&mNYP*?Wg}+Nu)17X;=vdwT zqhzSnv=ad@lU`OkJ~^UPw;79ao9o-vJsnitvY)Jl`1SJnq{;*&ZLU3=OtJXeZu|j* zKJBOO>T#55!9^msfS2?|d;0`%vhj72rKd6FYbzR?uB+x*il@>D7oIuH`@_X)gM{TIb0(sT_J`~=^fx1E)Ng}A+qw>NFJv@nTEavzt;8Btsvj~%xQq1(Oj@v|yWx$^+{*Ir2&|35n*-ef^x_9I^M22H z&YY>?fp)m4KE9C$Ra5J3r1Tb06hpeZvDnDf3g60~2RC+?NYCinzr$^UoHnbC4KdVmMFb1Oil+$Ic3RI$Y)6Wl6u#4H-rOWu%Q-2{oQ ztMADyLYTp?B)DfM1fwTQm8fkCL^}{!*CN?LNZS}U&vUL5QVrUkA$uqM6_<%n zA6K9Jky01)`dqV>X7i3)22q3-$>^=}o5ZFUKAEMbB3|LhRAiGYC9IHqL8iA4R>gtT zJ&7s>(i_(<+G>kXskdoYuG?&jyd;%|{_a1=PrxHVl?eU`7YOoC9Nh}k-~*wXM!Db3 zwIHor4s@2(+$&f0!7L&TLmZ)%zqIq#RmPhPDE52uyM5Q8;jNM8m+Fb%f>no_+05KX zW7To-5FBr3#bJx{+uTEW6S)Jyp2jrv7OtoYc(D9H+KUbeCVB2I&rdi zuinvtX+4wTMF<~Q;7+bxXe=>`5m0ZCK74P2%6yQx5!WoSS^4+5Qi!35M<&Igsg=#3 zIy%voboR?GwEg^7*`v=EM22Z%?PJ7|dmvC*6h@Sliuw6(=BVC+p;z0KgCG2IPh6tM zunpfZ;Aplc6`Xo?-S!mNDxWwhT+yYC%cfmM#-P%Qfz;iKH*kq0!QBXw`uafLyu?GYHOji-)kI#9)F%T!wj+Q zaV(b?SSbbn@cm)EhpZukmFUgnvwMeya^OV6F^z**-D(RU!3;YWRtM282cmmEeeC9V zp1*>`qci~fH>Z%XDV62Rq=PnNjn zNEb@T2+e)qM;@aQ4A#k1HD$P;KEl2~EsQKs=DI(5V6<*F{_HA}=5$-AJ(ObCc@S3w z$YJlz9d~4s(cC#s(hsBno{#6tWNh2Otn~Em*TYmYqe%XCSPRDeoV8Uqc$>lix+HwI zEiz9q&*srlo<;Yg!JwcgnsyY`VD)Ut6u{R)Ph9M)DOsE^47cARKxP-s6QkkTyNK@YJZB19?!5C2xu5~qEaGa z^_hloz;ZbXz@=>{&zJ7+HYW3!hD&QS>FQ{IsXt$TxV`9j=kvNN(__DZ%JHO2S~No1 zCf5_(5T*4PqC_1XRs!Er%uthN`YU14V1-Jr-apMVdzBb?Y$Q`S-oJ_!PVB zh_wu9ps>%Dl~{bRrO}7*9Vh=Fj4GQ+1nMh3X({Z1t1vy`Z#vr9z~Nsj$6>$O7sjtW zGUUpv9>nHzxVfl>`HSl`l!zV$=BkgagNo^ur(t4#-%g3SiA%gP7e!8@_&oM{$5=!@ z-^p8cEO-=~Dh@khW*uhPN>SP#GrI!_!=~~O0VqBn^T6FT{UeJKj+ZA>kJ20dgw@GP zw1=g^MV&nzJR%{#`M_aTAyBB+!}T0CGIy=^q;P8(;+hR@bV~nuucFJST z=)-_@s=mL!W@)g@rf)|byW39Y=2Xl2>lkJ$3oc4p?3!fRFVxuZxB|){VzqT+5fr-9k1_#pp$wJ>wT03?htDbAt3uEw^LbC0`PlNNsSXS$E$kv(Z5vGPSp z25E2jX4=8*?1)W07U_M>VKVI{x>r_=N#sK^WdSndK)?m*d{O9cFL=NL0mu>WQ3p3& zccb{+@m_FhKWX8j{bcJkUKbur7xL(Q2|NF#AOJ#9;-I1Yw@nc$ngLZ$94a zWLFPxy+1BaSFMprc$^b=r8RwCe%vx+@f+)SyI+lZi>i#IY6KEje$L>|mfzBL%d!ad zSw9CLkjCdoT2T>(F?;G`hipv%#X_xTRK5WrCHt`5QOb8xQ0YkD@EBB ze`5mukB?8;4C6{I1REW43jBDpG}*Pf&v^E2xaeaR3v8*&8RP_~*C2j%c<0&l87L4g zb?Uue*X5kRY(6!fcf42^bPgzzU47IP8Bb>B?Ms6XzxMy|qPlc!EZMqT<{1OAQnC}O zSkUDYv2qe9Z|BKe7Xq&X&^|IRo+v=SuYUaf!H{dOkc`$tgm)*xucrZgo75jv`CN0I zv%Xw9fOto6mW%0f!|0u$VU#YPeA)eh80NWF)lLN?(l>MMDb+InMS+W5CdFJ>YO7Ei zu@$N|ekiKR*}&SP5uWR?87M?zL>gF$M4F=#RMB3jU>00XPbz4ap#_pW;qrCd&?&LbXw=E*fm!^n=LSiXRnlip9A{TJWG$i>Q= z2V?)JItyMKE9Gz>5OM$v6P1+9D^+XZ(Q7fKilrC5^%A^3KP?EPITfN)*bae0S%*kq zKM{e(<4MN&{PtQukad){7;^mEr>mYjLofggpsopcq$9^@#BvCwvrnIkNwS1I)dqPN z#riyldWL+UUdzP;>^p(Rc1zE1KNq1e3BtOmHVSOCc$+O^LIN8H9jco3O6Ig)vHDQ? zWOBUjmsv}3PPs@%bKDNb?3GsyBMGI^V>TNfaa*TM}c5y=wFdzO1>IQ$)HPf#PeF=;`Nx8e%j4!TQzn5=VLI9mCJ zLEagpCC`J;!RW!a5~Rw7F`ah{T4HwbJCe6C%>$l*o$tzKbMV43;vR_wKGBJ$W%l!j zZ@i>LD7x=5^&%emIxFC#iF{ie?pXhEgi86{>s4jfEn%6p+c}LvN14pBbd`sZ#pNQn zi#IVht7Q#?8Dd+y9QWf>iwGDC<3Ac9C9vwKVHDw$dZgVVGH`6C8||x*%uLymH-qxv z3(n3b8FVgkh=~`1l(5L+mLkIy??)@0n%gp(G1?EvF}|X9r_kwX+m%vAo8moxDkdIq zd2p|}4^I4Ds-I%4oL#nmW6h?a%!WTnZtFcfk$dXTf^aZqIz~EEIN|Yfb*eKW&TOy=k^+Q1?aklj2CPNwfju!34 z)P-6vi@6Fff>K(|OG}9?uiTtm_5jizD+8()E+3XBt%j0z;Cw9-u|NR*La1>mUV4bU zR<`xFLxtv4}XXN<|@M`-#5*<+zW;c@P2dBfs~FWIL9gZj(j=M6#LJe;ISMZuERsB z?tM$bhwH6~Bl_!IHg)+PU&L==9ya)j@WNi|{4Dc_8<-(TE4Xb=PF5by2WfuunBiH) z)W4ej4(%%(xUo?j+@amKvQfNB##T{pFqB8=5eZV$$$y>ER5@MF182L5bgYnF{}Q?) z1u8^?(&P&^Y^uteKSsTT#$HOSm;_5*%9FfXE(=vx>&&d*n`Z3I0gNNmVK zd^x^+Tb-;Qe*O;EFi7XbGAzv|WaGTw;}pVwM(GnM5S56~jN+r&^&}V)ec4Xr%r%+k zA=zhgtt~lE_Nkic;~L>AR6nNNF0fs}THi!u%Z{Te_I9pPF zCXu;^cn+|X$fO!FA1R$C0KcU|`#4gpbpK-%&*72=G@;u1^*wi-~f8LD@^bqMKnHMhUl1HsLUy^11} z!UxWqWXL)uVk)$uv9zxs$!sW>H6fcL1v!yJ znl5e0rwMYQjPArQCYqG$KLbec0U6YyUozj~Gm+n_>oqHwtNfX(h)mOdFLIBJy{s3` zx+pG4tQphXimy=I@A{t>fMcNgxE4hlDFZ)k!Yl!(h_0O3gyaukuA_D}MpgMW|74LR zgoM{BdOZ!WQ_g~$3t$rA0aSXAN$9x!3ETYnol1M-v(?)|-;m6LhGh=z^JaYU6Bv6plh&<~g%Uw}?8 z_&f$hv~19Y3>9FvKq!WiuiJ^2tXnm!_xJ#>HlaM>Cv!bVr1Dn(tDOK}e!?#XGuty- zld)s{){feB*T<}$Bx8|K7MuHvNjyIm&bo;H`<>qVd@Rw>dIyVU*u5}Np(rA9z*byN z+igFIk_R3l{Pb()qhpkiv`Ga&*KMumhVM%2#2R}gr$|1@8P`?wmFlMAub;n1W91U3 z2?f?&;Ov2TY`Ds5SuQcwdUqES?wxrJVp_r4bQe*7$7NT$<*+fEom_ojGSUfsg? zu)cK`C}f-dF|iyT3i{E#42m|4P^^_$Rw;gfsB{H>9>IjZklQaz-C&mrUN&^@(*4AMeJU~ZvE!mbXM((&hS zF`Is4^~?PA4}Z3U@!g%%>wM|_<;lC!Wq7`P2X61OYz}#o1)x2}Qyaz#w~3)&{e>-F zGnIeR(qrX`9Q3SryfoL4ZIxxu^P4W@tJpD!2WtiRK~ z9hpS+)vN-t#L5t_P0SU)(|Ep}=yBd1<0#`)#(XrI#JWsLQT8yGcn!}7Tat=|7tA(X zvN&0Bi$l$~zK{!i`%iWi~0S%wkIw}M@O6LJX-lK#*!+IRk<M2H=+0sjjz0TfM>2N}EWt*gVPOSuC zckc0oPFeIX3+0x-`bzl;tC}VRilNYvF3!&Rj__dTvz3M-w!|kJPF>upE${JEX5o*X zDTmJJ-GR#QZ<9qOEBL&uyg%fMi)zzmRwnVne0b}{cAP5#Def7Z0cq0O!ZtE1^p;QY z>yIF677wPu80@9Uc2LztpGQcC!FYUD>LFRahZ|u#Yo=~pNxaO}a^$^_^9e-)1OJy) zom1Gk+mPP^YDgbR#A<)j=&B;4&52o1F~c0MO&L6ITzSo1GmOvMq7R>G4_x~{Tle9% z+5w2Zrsg>FUKID}(plkg-aPox3bio3B*9A-h+a}2D^pm4R+FoT`t3E1JmV8-_u{g7 zzJ9QfSn3mRIJ`t7_}k{@|QGv2mq0SPjtRp5Z`z-$s8#c)Otgs z8H3I#(rIAum3TAObm5h8CJ!)D<&j%6(Z@7l1-o34u1P+-k#bfdhi;~BTj957`uAC^ zbmQp1vx7-4maX;FFYqTr$fR{iGrQgX5~mU`rBN6lw|}~`2Es_=e{ek#zh4pK$LA=T zkL(VyoJAaVA8x0IZOz!kTyx)YYSaL)*qRBB?)2rq9s)d4ZzN)53Bx5Zuso=;pmGuu zf_3P`zu4CQ2`Qmeud!Nq0-HZ%R?$Ac*<@aA9Pzws>in8zyQ|2dnVL5rakLE`tF-uN zpCCOQbCKFWbD_nz0UU}$!{O>#!gn$BH)b+?wQ)?ut^KwpP2E@=_n3ZR5iS6@K*bAN z%~I2ND9{(5xkAKGm2Ieqw(0i-;9P%H+5e4vg4YN@HjqJS=_~~;@NTBbb|!p6qL{u4 zoE3CuK^s!*jki$o>CH(^rrxi5Rp*jnhtF=++$hn{N=?mSw~w&s?l_V*Cil0?-4E$a zgT+p!jo11uIQwnZ#r(a)>zOO6?|sXn1)S|M&PyB>)i)~()XznOqo{+cg)53y?y)?S z78E`{5*JWCzh*D}mRU+5r<`)oc)Zb&ax@$LB^XD#t(&RkA0;~Mko1Q{nw+@9*){<6 zSpILcQ;`5XNNMX)c0Xq=~ZHZ*YaxY z#-pWt`?r^d>v39RFgTp*@OFMv)%2S8>Ezy`r%XU~Iqz;J-y=z;i@Ct_^th~wV>}pU zRhUGJ;9IS&S*nx|zq6h{TaPPPXcLgWv%+t?5IWce21?~jyFtbP(5Iq2gNdkyk16~r z_gjY@w_FIth{v#&b#%U696{N&lPeZz6my!cMrXkXlbNU4W&5+H(D+=qV_xVn>J`2a z*fK2#r92@m!`DdJ(CHGF7qDS{9ide%Hz=i{#K4P>wd>{&Nfj0&HxQLA<9J4x$GNlc z&J}ie)mg!%nK}oeg=fqD!d@@UKeM6bkmw2H5~kGTND}8N#73na6Oh8)^_!HiQA5ah zgWqPuU>aQFivGlT!jJi!>Oc_@zcpdIuNOE*IaJiJsYXYohgtQmoRrfBU`+c1vtZ$+ zk%laroym^*88Ymj5?${)1oVr5agg(&*x0Vp>RQB{`}7%&+dBy+;TpAQ??4CMSybO! znmOtOM4v>EtE=kazsV}O;rVH?RDW!pPX9jhQYl^)c*hq8J@*`lHlB(ws9;D7=* zjw4IIM2x6Bit_i5{#zz@-^gJLU|yKbn|8R^T+5EC6GO8UI&!7J$5WlS0M^<0+4d{zQw2Rgj zqjiy&pInXXF8?UnQ?~D;Vu_1u89@Sao)(*rUEXVJ&CDO5awDqPf=Y3p*k9jY+>(KKa z!rsgM4RaKIfXDb@FRb$b0^{>xsvLs)xa`Us?H1dP%F0Nyg*d+F5b<|O9!AZ)r>0G7 zQr=jjOrBt_Kv=1(kCG$~BTP2U{f}C;-?p;1vENg_x*fRL3|ZO8?^8`?uyC_vJZl~& z{#eq5zU7sOWFyCi^+x0$NE-Us(Y;H;L}{{B?;=n<8_M2Z7bSCU^B!zhVeir%KSRRJ z?;k)vjfK-#xFOt7KF~Ha?t6sZYyM^wUhP+HaRr4ql1FA`=09Nr_I!y13f3X~d7LEN zP`$|j$npN^-PZy*Bz&~AUW(TbJn4!A-Dc(j? zo5EeuTZA_*ZJ)HN?H26WH!i8dvDD1Lh0WJ(?+96|wK;z5yF$$*zj`@f;jZ}gxs4|A4fkQ6^d za36|zZs@%o|33g!L94!3W)lt0r#IkpChh|633h18qkp4teu;|ekM?9X^@dEBoZI`4 z5BL4=f8Xp}+aKuB`^+=XWKE`bHX?B9pekSgsT!~Qp6b8!x6(6zuY%({OnKesjl{n* zsv3#=$7_S|zIq5DAh>DVJOJUsIRko66;7J2DYt!Bk!gF?b^dZ~jQZvK^i6YoCZjP3 zV@NM{d1E_Ugd5L?WAGy=$=o92h?HtFj#5peb%mqa-I=4B&N7`SoUW)mXYHKla5hku zlP6C$SqOba6>uIYc}co3GK7JrrwRRN2XijgXU-ppnK?N&t~Rsii){M*{p?!%VSlbB zmzNrnhB7+V)9-%wyHS_fWP$NbMhN@A$IP_$TISe1nH|!wh zuEXHriG)>naHHBfzouATk$EjtP^KMMd{43U_iJ(E9_1-&%A4qY)mtO+Q;~r7hVm7P zc~sh5r5SJiRI&9>x!d3{EF=y23@%Kq%pKJ8G*++AWDt%K&BRvC^D{wYJ4FuhtvB^OUf8Yn^x|ukSAR?scDxx@wQhYyZ7aXj^LntTQhP4`18MWa zT3o-=kWPIy5})o1>V|?w1&$wA^zDZf`{?GU0crN&$S59!5!9<`0c{o}bocsw9!Xuby67CJFA z$YeTwxKUjbFIUw?%gt+;1Sg`o3Wmy5nFU!MM58HVVBEQud+)v1WRnfnF@l&NdVllH zH=EQ?%JL{FOttY7EGSp~c{i%9a-n(NRX$hwm)vQ#QO|GB&iRr}gcHIY2blZc8z3La zfJ!FeRH&#{#ya$I%%>_1pK!uRV7}3`IFqu0)$4Dmmp|u3_mf`WZ>={@ufzC4-t_s3 zUilSmoV!d9AKjz_zx&;&CYur)hEpm7xkO`d2qgM7QI>7VCz=LBJh4`JAEJaZd2}Ym zIywh}ibpDYGLlz8!JX>=i0JyhVBF9*;-SoC4EN!=ic0 zVnxcQs(ja5!}<+2^}rdzVIV3`01kakFAi)a2)kq;SUgD$3$B!J=Nls;oR}vB{KLl;oVG}z znag@!?VpBXN3$U@O{8Cz^+^IQfzGz5I%fZ~aiwNOqTYIAk{n;3GpI zixT~h-uw|OYw%mxITiw+hTUZGB4@Fa=}Gv7FMPqQKT5hDfBf;3ZV-T6M@HHnhl${o zuH0g?iArv${VcN+SwP^Qev#-~t^pYg>1)g2$vE7xV@KBb)m$fjNMF8)!@w|g7SX7J z=d4iO?f*gEV7n=MjuuxaQaMvC_{Jyq$=`a~^mH0cjl})qwLy3yNNwl5Sb+Es34pe!}v5`<`9o`L@8Ns{1#<%eJM^9-*9WZ z|M-vp*ciapxnQpF|L^|se@LI%l(jefJGCxYB~Lhr#*ut}lNm7W(Z5!1&A|cBpOPG! zL}o&12K{-aXGLM-aV-i~YhF=Nue;+g##OEL+7}I~t$30#&;y@svz;z5R`E`peQx^@ z#HT3R?PjwD$v7AL9qGI-WNFT-FGw>M>111%p4f6gg$EDGKL&hh)-rR3^^BZHcR+SP zKtXz!RRG0!SU?Ohp|hUgMFXxgMctio0D8p$L=kgd`_(i-mPewc9ldH-G2M+W-VbmKrrBp$FCj6@x~i()U(e%o0fBO zNDj!5{ilEWC-ZkGV0Tr>8DuDZ1a0;b>k2(Jefo40P+`LhWE#2**_(>;Z?b*vzyJPT z31)OzE4t*`KawJ0O@Hwpl+$$bEIq*n2n2SJ8ze&TT@cr7=7FAtOe4dX>&^E5J=uWv z+!Et&mYn`PVAxza*N`^_U0JfrUo@(soo~s1`k1jf65(&Fm$&nCE@d<|68EQ~LHHm1 z!5uKeR=`X^Tzc?c5_;a_$#KE|DrqBp3(o8OP9{Bwf7_0*%$mJGNb+xyuy`kUzlPf>q&^uHreVE%@2J}hD}`NCZT_9Noj zFye>^0ir}SOpYfvf|WBB2?bU5+E2}{3LWz%zy7SIE%>C+(_$nzW){;fnsv{KE2g~nM@%l$pTD2o>{hVx5=6Es;nFUctpFFm! zk2g4|p(i^flYQlEvtSzb|z@{5XfQQapx`NY4d>%@L}#{k)c zu3NKajR^|9{`%|Y9x-QZ!*EjG$y}mz2GYq!S2+fv2_v2RU;{IdSI9!l1DPfF;crKW+>w8 zmKFT%temCX`r`xkPU{WaW3p{>{e`-G$=y2doU8Qg2mh=?r}oL~2}ljob=jg@RekUu zwQ1vKMWX4?ZemOclre_c*r=X!BAbx=%>6}HGe(?mqHT;_0nt6w?Zro$JxG8rJYi<9 z@AuV69J_#QNCL``PU+M)+;a%qM;>`Z%a$!O0b}f69yY6m^Pyzlf-xm4i_8|*ANPY} zxCgw(cQWRD))Mi&&i&v!`Mqp&;*t$)F=RRO5HJq37)j^4;5#G(b6D19z@EYB}$Ed4ruQ`t(&5v}RYcPbL_K0O{M-sX)N;pxmxEphOYKTt8)W=_E>W zf^BBYPcmbIljbVWT%)p&pHg0Dc4Uqv0>wer&(&97Z6YR&6{)+{5P_tjuM+pc_BBbT zAr|%LsB!iRwa@I{DdN5PmzcjNJ3gUamp~1aa>X%_re~p zUi21g?!>9OyR$~K_k5&hTACG{G~F2K^pF^KhD|J{{D$M2^!EL#z4|+n2P(YSYK~9-`kzy6+S1J^@gIA8HM0vh)0rm)-|MLB%pqb__v4AOweUB(@9d0_Tk&OETxK%{av#L(f2pa?Y$V8uj;fY&y|d zJW2JJe@(%2F6#4`-WrMHDM=SpQ^!Kv={BnS{I}NP~S0 zk-~kZq?k-j2qy?Z-nV^Gk#7(gknDDc&an(+`em10X0pc!LUYak_HX}|)(RE$2bu4z zWt+V^7;r51IoFT~Ubk7jtaEIs#H{gTg7uBhh3vG~z*V$PTdGsH{Rf37&QbCE4{G8^ zkINrClPrQX!^hzI3EsrdIf8g31rP|b6$h>X_u!BlY*opJkE-FayA}TQHRH$goY%7r zo+0W0GM%!$k$BPwCxiox^k`@h-rH8!WDs!PL~Z(G1QAVz^+#3s_WjEC>mtI862=gN z1R?r7Z{EB!vLp~*7!70&*ghPYD8(r_wNE)O{z#$xQu#ZZ6^LcW0_hDnYDDodvM4*m zXo<+9pf6YcXjuMe$VA0Z+8l>cKtZGnY@^z=bgldaMaru`q2f^Y8qCf4Jj1D@s8S76 z7pVBrzfz`gJe;eDC$rnSW;-Zd!azzir22B|ab)`I6_PF_v!P|Cw#m*kX_pFcPly7O z%||veBr;j95a-A$<{P?$`-ibhN`E|X%J>|?C9><#EzCKL8@>Z4I+YP|^jqYHJGF7k z+nT>;vzAm<>Gy$31^j*!`5g}7)HZ3p!bNQP-tB+{j%`=RRo_swxVukH&Y>;xH`l0j z#%EhTN5iI>cy9CO8;lHu*^@8Os`+2nq}T%8ep!)%q0i^^l!?<-;hUgU3p@1g_D9s- zH9RMt%+<0@&#Ly8KR4xcA+kJP{73Wpa1i$T)jsP2#k>L4$|JwGTubLnQ~SlYtEjPB zp3QIQ;OSOHjoC2SL}v4A4rGj+g+#?+gM?r%qMvyU8xLXuxd<`AG1y3udyozMC4dBh z0r_foDo!?7S2*!xMdOfW8l8Eis$Kg7wOxAWfXBu+5}$tLL)D!)mQfoYI}7_A-GE(2 z(3ET^?lFW?B1wY2#Mb3=IP?&I+yeqiWEWx!6G$Xr!}l>4_-?XF2%u++KL{v^Vrhq~bR)kFh@zNilp>?o(eoQ>P1de6dS;jD);H9;Z4p780kpX1_Y? z&sEJWf3D)KFPZ1ruq*PVmt3OBaT_rV7ap(I=(4>0Jbn4gU(TvV;{Ng2AUqx{5`+^# z*&wjS5>OOmJE36d(}YrucUmD$h-h=KGTrmVuc-VTL#x@&1Q{>rAL~%jY@J?ppCZ-&OTN>`&-yNmB_c_d1jJFJkIIOgHIGl8 z&NdbActd3e*6XshYt758ufN`NNd5Hl)qLx}SEdmS04K#ZZXOKbl1;J)&^rCR&)*AmsyrMT65({!vU_y2YM-|5TX)ubhig8O*W=fU`8Vs+LvIg> zaEin{irB2nn3Q*TiwZYCr`C(VsG`l!ndfX-FHg70=Zi+<>(0#|5MhsBjdL$GvKr(E zyqdXknSPVET#F{m)2y6;w(mWmP&ebG{Hoo`J#`>srKgamkRZrK<}q^;oj?y4a0fM2PZC5=cd=>YwcbanF3{s*i6VFh$ikO&K6`iBvE3fAel?}Dcoa- z346ae9+C-L0h`VSV!1!qd$#}ScmeYezkxZLskRWq0lp`jT2Qe}(Pv z=xJ*+_K^{(3}j)Mohq89Q#b#6c~2gcA|ZuloNLIYiR&LyPFwH(4)O~h0Q(NRHZiLX zSz-IUvHmiZb;mjK+pMW?ed}8z8cPBK);CS1Oz{Lef zRbEiqE8&FE%lA-@LR223XFM4;(NLH6cIBu%;^vI^q8-!0iR}D+9l&|Kn1bW=JJEUM)8d({_oBx~jkM|4}r*q~|rH zL^Q8R$}LpK`PZv@;i@zG&3QYTHT8vmFpZ)ILQXWODVv@!WR+I|$rIML9mTryrn}W~ z>bMSn@R}xfF&-X86qGmEAzudjoFNk_5kCI~p4mh9KeUx93 z1%Y##n9-LkkWob>AJ|?0&{s6RZfXl=eZC z;H;Cq#69I0$i=_=XnI!j?zDnq{RP{bGJJfY_X-`3( z!uh4rtn*Aiz=Dm>Y2y12_DMDY$N{c}tYg}9(CWeV-bF@1@Bm(CPG@RYII>4cE@3A< z?*$k<-o>r{dH zoh^RQun4EHFGnZt{{O3E{$;8SS^%*^x69;A@9K*yJ?VXwFOjApa1Ews2>MVuQ@g^2Va(H}V1{ znm6TQMPp$dImthm42GYBU#Jh=DVSM&u9=55A1@&FQ=%-mD}67<)<{jGLho+~Y# zZOB~EwfG8!U;Ib)7gFGwfBW0t>M#HDFHM7RvW_XkMMj~MsVZWg;)~GVlWWLCb7MT`ORl;PwC(g4;(HWG8%v)_%T*ss0~q6RIK9SX(qx(bmHLt zJ^Jv?*ZMWiP#PFG!-4J7LnPOx<2U73YW>_rnqSbN`I9|HSwY040^My8&wh0%C|UP! zI{n4}sMdL(wjNF#$JoqooJ90H83d^yoD#t~waKsQS(m7J-W9r_`G7V~yhx>G`y|h& zW+&uS!551t|IjA2o^z=p6*Huqd{sREBhwOqK9uo*d@8HjF7e0`B$g6!U$J$NU)TV4 zEhU!J$2;b1azNiMTvzNf7TUp~FW_tu zF(o4aLzWBx6hgd#4)KAa#34$hFhNn;om5cLAUCH>IR%9(tEkX4-!x-54|mrlyG1Th zU%>zIJEgJf5{MR7sJ&={yrC`yizg}eS-+3LfSvN1P90SJb>EZstzW31?$C%xr=fy| zfx(UrV~`L%LV+g&qlK-J+uBD5q3+<23=rYR0Lzx9lZlQ6y$Q%rz_`coeXKsD^TPT1 zvbRmKXtRD7Emo~JXYk)yP^RXESE%67Mpd#KT^u2k*K|@7-@adUtG=eDd6y|~%QH#8 zrr|VAWgN(i9ZDMmf)j(yOyiu8|NPx@=tb?VdE4lL{DORi!p+)O`;K;;cwJQuM~xoh z5^$DM-2gToT)W+ojPg$lnuLSIO*<%`iidSL(c1)*(uLD4ZR#jptO+-LQ8ylbL;0P} zI?!CInu5tHF*bJU2q*4O*_IdNjfT}#F;f#>{og9y_x@RAQzl?{4;zZ@#C#@;Whk&4 z=+&-;19g@vqx5Jjg~%IL7aGhx|fku-;SEh( z6`s}$pKMTQ*9KFLnp1O71;G|mi7?PLaP1IGR8vq2ijISXW6n|z$T*qaf?2*fS0-W0 zYDo&H+PhsVigI);FINv#7;FdR4Gz6 z#Vi_6utNn$w#e6+{e7D(^6L&Mx8|TiGnaM~PvM~Qt9B_j1yM_fu?b2~co0P)HP;F$ zlp_(9bd+=95aM+4u)iNHouX4$R_LR>?`hAz_eVr{K`zmNk!JINI(SQL#UnWHBAvSP zZ%rmwq-3I^B@+k#8{tk>zWab`*ZzrWZv9IYZ+KMshqoxVqe=cjHntrO7_I#JWAbiz zM4`?O<7m)4w70Zi6go=2wz^71TV7C3LseQyF$V{Svq4mq-Yv){49XLAr*+&@D1RiT zJACch5o*`#9>1aq0kXc}>uS@4Ezc>3NOWgQPor#${HBwd^zH+S6ju)Gb_7Emnlt%) zHMjTPh_|e0vhs3^6&ZrlPbtH7*In1ETmh ztfG|Ro9$0B59SpQ=Cwoi!``oCf=ol?IVG^)``-6VrY%j}DKDc8(gN~@Y_>0a;R|QT zKgyKIT7$HLY_PyyC#w;8iOo*`wp0;Ll=3#zRO`O;CTqov7HvO#N}HMv>W15HFvNxh z8J1ih{iZml_;NL5G$nKBH(M6UUp{m3#TT1EH@2xGoCe;popB^MMZZZKh+v*T=6(0O z-!=1qIpfHtEF+w9yIM5$@xN2koQo7Lo2H^eAFKGpc6l>g(>)Xfg6*38>W`JT>s?bG zSa^7oxrX?Nrh~&^6-zesEwhF`&F>{z&yJ?^eSNf1;*Pr%F8`-IZUb)p<=l*N4$T z9e%QuLT-D5at?1YL-gr^Bid0_Z+c%Pg5Nf~hD1Fo+xNb_k@43=)WIR!fKiSyNt0(X z6nP%?`1G8&NZUg`)yX#`H=5mR3afU0{sN7`TkGWOXzqC_x9zmVV;FdD{f~9yMSrA= z7v0?J`yE}a+J5M5oo+cc=0xtd?MU0W+IHALpu14mU`?A5U}5qIc5R!O#i`Gh@1Mv6oBgEgP* z;3{(b!3Q5S&A%ycB?A$1oDD5((|tgh6y>nAl!y-$(w_}7>9Wf%GbObaY<96{&z_zJ z;)$7#$p+v5?V=)GFlUZp4NDE-MRV==@@KL_$-v}XZ6yI<4Untr4 zDUXG9L#R>PeFfU#8+>HFe|QuPV9m1{X9zyC~MgwsgoDQkvoCMpOZR3HZ^D~k_+k_81( zKxPmv4=k{i`AyR(`m@(LPco+!Bf4pHRih=Tx)~SotddVG%6_)pUj3?BovKRkZ1;dQgvqKY^R30xG zRAVC&+2zkuu%Nup>@Ug%*?}-8)X}dC>lBhhIxyCqPKWV}Z1mD^mM>CkBjyUc7j*KK=AllQrRx*?Y+YlEU=^%Wl{W1?)yS4h{|ueZdh2$Q)45e0EW#DON$G=nBZmEF{A>hjE)GmX)PqKDWa;+JWd-BdoSv4uFJ;T|ca zS6p$0$><`IX|E50?d6wW&h#leI3xu)Lbu#kZ)GkXm5x&=8ol zN>kwYaxB&{K{ae7nhawfA;++R$gHBD3!q$wM#I~-ZOiIyzQ;Po(^lc58SXwgUw zv30Nq=_fdzNqck;K@Y1_AY*U5@kZ^~v17o%$5@9WoW>Ava4?wIDaJZSOm-U1VN_9O z$NLytG_WMIiKcYaG^03(RM61QHdTXodgYZ@GJRR*Jc(FBlCfI@#v|vo~R-Zh*#D)ukl#BcCFd@#O@%K>@;i$FR}q3 z#2}yeO_VIJBXewj0n=#xvxv3LwB%fQaNfLc&za-72F}-hp63`ZTr=On=Qx(n_4e8L z@8|hQON23|Akrw&L8kIM_8jc_$6pV>$uabZ;Iqgp9AQW&+tk?}6F)A_xpHtA87RXd z3mTaR32sSm)*?GPVKW>*e!OQVQfvm+H4ockY4z&WhOkQ2&Q%T$4i00{@5CO&#<}L2 zYxMZzkN4Q9*gM!p@z3$$@ZZ+2U*Gedwc$p4rX1Hr`xi26u@BKRWZG6$RT*8wwW4o$ zFMeFCO&f2&0&GKcnJqE4z3r@hZO6`5{a8EG>c8H;yEogL=jck#6?>H+a+2LTZ6UuLY``eT_ zPdIO^Lu3w0Y3|&)Mvkyn`902uwQA27nZj-$WM8s9?V?4CjPu89WG2p@J=+{d_5t5Z zLwrk+clay>I%D$AJMS3cJpQv}CahVr#*7UanmkXY(o7tCqIr4Xwn-@tEZ0ls1d1IZkiTrvi-LdZsi%yS>@Ym|yaD9~3KR@?B)!=-_o*PK zRN-hyU7@z5elLbP^9h5`?sS^1JrqX+kUNyovF2~T{dThsfo;%>J%bEo%#l}&H}(*+ z3}V=BJ&sf0O7#etp9Y^I2IuM)i zs;jOt*{2_T@PRgN+&HR-9lx6(DK;NIHh;;^k4B>=c*(d>S%jVh`V0FN zo0l=;GX!z5iLo;Yykbk+=JM=TcZ$%aBg5xShc7UG5t8;nyMZ%ksKvzXZ~6(^TPixKJIFcv|SgSCwkA&So$wj|9>H{E3ZfB4~t zjRJb;p@)WC1~ydKtR5USA}7cW)+mY#1$f6DcbF_njzeK`3}g*P2*el!H-?5yH|BU` zm`%+_;c=~$0i%Rj+iU|&CIWIH@w1ErvJJ8c2Q!&uQ*UF>Uw#vrx?;r&V@UA#g%@5h z*9;MbY$eSa*~HjT_DnVy=SC#ZWm60l9@^XBNHdAI3w%Q5XZwob{KN6ckNVY|5px|jLN`bBR$3?0Z8#uX#m$|Zoo&i~7o zFE{cKQk-%J2wwtO*hn0M9faJx@WKntn#_iF0uFrxSxULJZ932TNtC6mEgY(Bv1J_` z#v)jQ*hAh$Pyx@j@Oy2*#M%FEIz1>hII^j;sRRm?tN@f43d@#-u_hs`c_33zjwnof zUSu3_?!1qp#mVD1WRqRbTni4ORkp|~zTcM3A;Wkbl0E*j$Sh<5%AW7Qcu8i8cH-DG z-ef!>mykW2C*#8T#WzyroY=Y?ynvYERCQZPu#)T3;cISoNO6tG4hI+iGHVq0U5!(#3o>F z;+zjQqlyUVV7I7ePN$maP6XG=bz%3g4v7x)oVAGjp>zX>h;>LLmvRBl5z^ZBgk;P( zmgeKOEWsgr0da^k%N#}~qaUyh)2&H#}48%$Y*3NIuYH3|2bGalda&I309zAsLCO;$d=Is0s*5-(bZ%>F=k{mVL#%p zW8abij}Hzp#b@}7d_%8cGXiW#E=n22$a8xfe{qf> zn^3TJt=lLLQ6V0D7AKPQ;P}t-88WGe;2`6Y0isekrYLQ)uHwg@u|{s;c1v44iTebK2M{4it&UUFRo~5p?@%JV7>yY6WOCSzL71n^SLPpcloEOjQ=9F>+(YLNX7d5g^_%y7Qvpx0Nf`6y z^)lzfnB)0A^e(R_+T0f03*=jW zwm0X9{Xqo*=bh}0Gd!zTua3cRIXE~B9tepGF1keJGv+ANSf_AjcPe+x7f`|E848|0 zsbG6|?QJqj{1DU#iT;fEFMs*V#xRN(*pLyw-gHKteL~u|X$=pc}CzAV$BICPJ8Ypqb3Z;O; zVSezJ*LV*D+?H-76E?$#xy5fm?C_V@Z8L4&!$3vh@|UQUJx5;SdQhM!Jx#LAY{OH%rP&`}Ty5Ya;RKsD_G#*uX(Nz86jsIN_zVZLn$;N%EESaGkf1c`^jwuuwT$Uf- zef;z;J^t>0(=C_&scu>Mr>bo@Vw#ed6;IZy8-J;-hhJAHJp7U|%JdZT$|H82`J7y6 zsAugCoqR+d*mZB$0P-J$o-Bot?%o=WdQ=ddtta33iSl!cRghDz9 zh8kqaWrWpr&WZM^t!Rk1y)B717~30LB31nhlS(+D zFzLe1h1!9(QG{%Z3J_(dOFoL9fo3rzo+Heyjh-Z?lj0O}ov`=ZbeC>Az7WVSQ0cL4 z^6cLvW_l#IP|b5zDsbwEbns*IS~wC_ZgICUnJzGws8QHEx*o=hG2$;8%}6Ado0-=Js5}>bo`w>Yp!VwoOk+|Irpx%1~r&%K~q!TZLe*{ zlu1S=oK?nFRjrPuQ__U#DfxW|2Z#Ov*|BQzmlckL^xlp~wEDceb@H>rYPXeQ)PL#9B6K@8&al|*W=Tq;zcUcxmvmC4h2JJ5@9h#b)s&! zYMKr!8XLOJ6z>ot$B1$!%Cn&&7>nrL=Dlk7bxEO4<*8GliL(`n_Ac#x9nH#Zs!oxl z9{qsa2ox5pE5A%1fBa$3>kuAf`Z~gC@PM?V=N3UL+vuGKS%kJc$M$-{xx!wDL?I~0 z|2WH#R+RfdR$)6qLJ{!5cA^Z0tntBSo{be?^SI4-92^|7mT-cgp`MT?S(b1@xMy2W zAWMXyWKdElEEH2B14~LAQ4?NIB$QBK^bi?pzXgY}flynEf&pJosa5mhtL1O0RnftZ zdtPfb^0}jdVFqL0If6bx7;>yXQb!?g$<)fp2`JW; ztFFqK@obp~5B zsceq+9ouNKp7H`k>I}81zPU>0&beI8Z8dsx>%SR-Iv5^YS>>Eb%QdxPzG@l|>vR(v zZG?5amc9rPwRSX^^18f0fr|4c=z=-dE2fxsAAes*YX?s_73EcG#mqajebZi56wf&8 z{nEmTnm_eoy}bEfO%~U1V9PgYplx@=BkDPnGPih;8C$d9QpEzfgE~I1YL6-#tL1l$ z(^;V00e!OPShbF|NTnu-(hclLXG;!!D|Y5O_BljR{ALoi{EciK)&TF(=fv)&%IgqJ ztO;y=yRAFN&>N6ru>I|(I}Q#G4h~sdQb)ZYN|uNNjwJPlY;TVsr->@fVaaHq;cdFN z14iLc<4vtM=ZBJ_t2~Xgh>o!1h0TWIb?Usi21qo!dlFF+j5%taiCpnMO>}LOSlfK? z%{SjnN%LNZ%)uJ(4Hw+3oYTiubma3!?G4LsRbfYqf=&G!D%9)Ve*5h`QD~xU%*kv^ zVV>>p(nXW=bfU6S9WCAIq15^EAaYnWf-(R;&(2J2+sXfY=kC3G6$qYE>#XzDSvku% zI|Z9xkSEx8sTgbVnrp5xWHLa;(05_5+s?C|`F*>Es|D+QwC|kZ;E)I+|Ev`RwxowdC_Dwww}_&vRSG+z0V{d|W z{oFh;O`ot(bT2GfM% zS^COV|IzfQ8Y$t#PI$;MvSuEB_+gX%Ivm0&5Dlqv*PEtCUvJ3q+vhk z**Sf}_UQ;W*Q=;Ky*v3Og0eF*_-VS0j%41TgRw;@qZ+KeihWGb7MnMn;GAjdZ9!iZ z0!Ea};ZN97Y<7Z-$G(00dj5x4VmorK7qSUriTC4=$@ZQyV;Rgz$U^)mY-MB^zErkW zl#r!JgJ*nN&XvqNN;u=^se{9KMal^$6cOYNyQEMLO|$@|hB82iAlOk5H1XsAbf&G^ zEeavQFuEbX>{i;O(Q=NQ4@8(fS4btIAt)wT#ZAhP%1~ zo|tN@k88^(TNUo;cH|(2$N(Ja7Sf?eRIeR6E#I{<}O`oM16Bp@`b^m2p z1aW=KaY4J8aq#AA+rf3ZV%e8<&eRJ{sa;1`vkp{mR50AG6ZN}?b>2R&-w;)i&vw*H zgeA#nUOrrK-{?6*fDBpq>Z`As=flmO@x>x4JlS_2LP)ZO(^qM4)do!|n*APf3syTgq`hf4N({n=hE=!ScALq1B5R1uA{Gw@kzH8n z0?`o80Y%BV@jo@&{LlH>orVw&yarLmf+qt4);%5w0d^##=_9?N$aLa(+k7w^BFJ{9 zC@b^;!h1AjUfHZN>(~J9k0l4wb{;;z+817~oOQ1mvdI&Rb~g=Qa*c9NA64Pet@2E$ z9PoQkOwT>{oXLtqsX|bu)KMG3XM@3zF_@#D%@^)LGIlYD<`(GGHQ!Ug2am|#-l)zg z3l&|mru#PvX8{1m&Gbpg}OpWjHyE zaS)v)Ly*h|oMHkbIFf8}Pn4Fmk1>1Yl~)=${O-H&n!jZC@>v`LbSiD^kh z{2N+4^K!kro8HBDu&f`SI+YO0*sk{ZP`ua`(r)ruH>CMf*F~?>LNuMn?g9X2ft|!P! zptG|ps95<_d6!?OZTq*Yz@OXa<`u~XWn?(SILBo6Ge-14V!W`^A)(Nz1j4Sr{(3`5 zLC|3T5|qVm!G7ji*fEZv>!Xi8I-)*Q_MVVwHB^!`zJF!>{q76#jeQ4myu+EWG9eY~ z2s?~Dn2SHAd0`ekBjq2-mS@%^I`D2>OsAh^(?((sRzVZsC2_DcSnhU3Z5ed9 zFx$FslnslN9V-xQM1OEtQKSH48i7TbPU0>_z%tUdA5CKOK{B5*4Fntl3`4=zxxfAP z+s0_f7UOU*3hun~&NIT>ZWT$1CW1Ge*Wk~~S9#TT6&?A+JU30l7hk17bB&4)ZR$Q( zpWieG9SF=7l;pUD$E#RDiAoQBtXxIZ+}Wze^KUe7mF{|5#ZAZ6C7;^X{*gJhKd|;t zy2C@vl+WRC$47}s<#w@php`Tva55XvSLg{0V2oo7bh4o^f+^F&S%!o~kKkA$cQJx7 zfHD4Ae~G(8r2?Tyr{3G~sOC*uZZd~xV!eLXQwoKLze6Lvpq9*Bt<%lNb?DS5CabBq zty1m5Cbb3YwPDxOx_-rXHGAR(+I`|(Wdp*2Jk`&+L|rqNsdMSI3Qw7*{EwfNzoGA) zf4prCnz-XN1v&=at{g}1&O7fkfBQX;mXn$>%cG0^D-21QEjC5A*bMP7W$0B^nlyQ` zPAOl(xhoXf{Hh`alhj#Qslul8?AnCgO$iWAIeLzOm$lQek6F`X^_tBI^>FMs*Fz4kS)hop(?Z z@7Bkq_ae>EyL3oEF*GTmsT64fA_yi5LVy4wMnEYNiZK)s14IxJY#4e|q)HMXfS}Sl zp$XE00#dxo@6LPQd(R)4oy_d+?30J+ydcvaZR}lU(e&FnrRs>@uIHq zf?K;%=L^9nleR|Y-u**vVBYsrQGG7J zkjC4^FQmM|%ObCuZbEV1QMZP-Fq|}1+J?#sUFC=LAiVU}H z9JLO6bw9o_hkH~{{GrKKihIK7=f0nohA0NKStyA06X9!b8mrGswwz>%LSHrvdva63 zYc$Hby4z}N#>&{iE2yum(HQh2vsdtA@EVod$6W3$#;fi0)> zV&I%5^k_$_uB`oCMpFm8FY~zD>eAD!F_jDUC$D_IH9~k)xGN#$?6jLXicZ~Ki zfz@%;mJ>DZ5sR<^j=MsVou^Taw>5^t5IiB{6b~l{{ztzv--N2?&xzeRHn9NpaKzgl zN^G;fpgMCzv0CeDpR8Omtdz`yT%#*JLtRVMml8?SJ+|52I&fFeb2^=4D{J$DD&$S> zMvU@|rQq=O0vYp|_aO^9GL1I~$k#jCtw_cN7?Z<;WA3LnR49ckAd6Jv!@6^8^J4we zLke;2b}v(v%@1krZ+kVI4*LT8_m{f?661|`^{6<1WA~>6bU6V@Evg=wtyZG1qy4JO zP<|ot=0le;dt+SVm*aH*nHjF|=#XT&{3j&^=Am6mKjMc2T*g7pukXCryqtJX%dkLm zZso6A_0*yy}6~#RZbblIcG};j~U9DWZ(!>*#09e9nJI z=n+9@)D1_azA@+h*l9iGo_c%%Yb}oB5(!}q0jO?OWHTU59fJg8zBqu`f1T;9x@;rm= zH#hqdd3LdnSzpMA@V;+(>RM5DTdOCUb}Z-y0}-%6v(Ki)@+`K|CUwcF%Vj6(c!`h7 zWd-|B&q(Ljgx2iXyYny$nrEJFwbH@AX4kGLvkYVAuwcFk9g?JE@OW^h@c&v^by2u; z!K@1(I&P$JAt=&Aq{tA=j4-4gCJ48K2LlODiU&Lit)l!j;-=r_v1w=RHUQ-aS ziYjxL?lq)iL%ciQdP|O$fDf+Pj|Mn z|0(pvCoU>xhyhPxuj(Z8@K%1F!e~`2G&Qq|FNyIxuXR0-U~89QeK%yfOJylr*_>)V zpJ!%?D{gy01M+5`*~nNFz56ZzqkE$9Tv~YHbG>PfX$FrKYsSH^{tH?>0rXe5c7$sr zuqCG`HGPc_y*{k$mHVj~9N{vBnvdHRvSmA4^UksjU!ww6iOc|nOn+=70>p!&pZYkx zpHk2^yxo?l_NEK)=2TL??3OOVkab@I@pW^q>uV^Ex1;6dxyMzZ zbLYb*hoaSl@envBU6L2hmXMHe8Q?r+8vyXe@a;3_nu+=P;cwGxhYm}6lLeK;_VSyO zZyPWB16)n{L(jPBC}Y!A8^*|Ags>h+jT)u9`*iO{EJ+Pm$z`h`zYIW!^FKe=k$f6$(P}<)w2c)OcXio ztH`Y4wxMqLfLU9HtLtFtP^=9``M(UyeZ7LTmu5$^{G&FCsNz5>EBtO zav%N(wF(#{{tQu8r_4kHdK705kKBP}iM1FTg~vP|Own4p|71^Jam33B4 zv!5YOgda~}`|!M~${AoKyNk9b|7&&)=EL2E{9qxjHF=bt6rBIsO+fB8 zAKRALy0*9o?&P?h$(|{!c;_fxgs3unZnKh(Mo?6IWe~j3AdmnL509#{GPpOS|00o^ z*qwVOH_`&bU@qS?KJh8?k=%{5CZ|IALbjl*N9;bF42dm&E-W)3XtHsfD$9QEtd)62 zJz1g^D8ponOGIof_HpBq+WeTcla*I^cK)-yRwWgEwNWA;< zycaA5wbsW%VWKgK>MSzl!Tbn@XvZTzwn>H#4)^XWtv5_X_+w^4G%jsK1A_s7WGbYY zl(^%gp)!61QH?x25jn3@a&Dg&X|c*sBfXq%a%!8?3?#|B zGj7AQ7gOI{9UARaY_lYrv!05FQ@9zcvBHM}p~>}0wk?F2`=m$c&k_g;kUTMeE$(7% zXwrs{p{OhA(b~LDlyO*Y`7}LBX_BFy4AoiP7tv4u)m&H1Nz78rJ^oN-V3_FVQEAAc zxGC~P4g5=@eI)l=bwIosTWz?Y&AleMa3$J1{9EgvkWkU?^5jLVwU!Hc>)XcbU1QJ_ zF9YH4aPkWb7SIZgRbfRLQhX92sj&&oRw2*Jj=Ql#9*EkB{e`c~+PwFnYz(-;c6?Ug zB}zByjy+H`qc6S6*TooiK2&Dtbx_BlIwdZ8E1PpeB%nefoLPFN^J3figLrY!%2)v5 zj>O%HuXRsBNYL(D;~p_&20T*VtL!t+i;+5L+0nql*o%)G+w_v;n+@TbGwbxR7N6HK z&etXw=0Wr)^<94r@oiLJtVbSvQF{`~TftE{l5RVk3@BQbo;K|lr3-?79E*-Wlx-8q zU}R)qV<>#Khwa0~$E>!bFWHi13XeEBpMb*OJQTa{>V3nVeJ=GXGc}zie zn-JL5wFVZ)BDQ+|zEN zG!{Ygg1Rs?y1rwEjem5g)KKQ`9m(O(P?-q4D?e;V5z9q?RDNx22XOg3hHQ|Sfs)uF zv*Dr?s?hJL6f6li$; zb_JKKbed9HVRK3QCQTS0`hoa!O>H~wo$xf?%_eUjaDlHik~2aZzKwA`*~L-uW?$K?0oSFiPf~KnVb(IJ z;}xJknvWGLP2LoipjshYfpD*RmTjqaO28OgNEIhuy5ZdeR+5p*mLIz+r0`PML98)# z7vWU;zAsKLA(K{F^NqpePKX5UX?)wo1&FAP`7YiG^bsltEe834VjIX;;8HrSyAR8g ze7ZwGA)vrd*IS_o5zsp5*O+hQeJ~C3r+$(G<_^Y&66}&Va+gS-77l-h2dCdW+61Fh zV>*tCC5QSirAyqknZB?Y%Zr?ci8fRB3gS_y_xDUEpTpf|seE~W z*<>5F9NN67)X1b4!`;#Xw}WDNQTF8yWooid>QZ%OI-_ZMa?64Bl509o@mf)=2Ke3U zlM8z?qWHui5_4yU!+_pM3=icl;-~lWuS+9Yb*%1BCCD2kuq}w=c zT7?wPwvvbeU!c(IE@NCLGT+zHTS2U|+v06;AW9o!Y7`8~hu2riOurb!1o%uq?BB1L zkz()YeQtOFO~AI@oBt?!0XH4CV~fomf0>N#9)hHbZr?F5aG~Hn&Y)Nu+MjF+WvTW@ zU2d%C;G`P$HmtrQXa?U)XZ(6Xb>O>-eNf~6;~O0w`lhjZT{N|4uL-+qw2q~wa?N2I zKFOt%&wh}V7}mgyCMVrOISMdehXA4Y8(~SVg5B>AB3I zk1EI6JC4M&{H{b}%lQ@~m}#he-L|qdH}^ZC+2el+k!H8Bc&Rnug%6Z@%z1rYly@LE;8$@kb^(JEQ6=PG68?& z1Va>*3t`67G5QEr=mlw@>t)XeO0wKyv;%FYhu&ZQQb9sbW-WU^O$+QcBJuiYx;<-+ zZjUXb;i^-Awh?^Bvlk>_pALw=NBkYDn zHCU|SeviW#&lyp(X-?`W*I22 zE%@x|0fou7gR+*OMy~PhoVmOZEw{&MT31|EwQ+0#lcU~33ugR*_n$Cot>@ddAwUR#V%u?r3tk#p>{Lv8iZeFe!CA z-KS5pN8iOhxm z8g5V^<>gh#<-zBbYl*4qK4(a08axA4cW5kVGfz&toZy^$zG967Upps1*&TijA}b|+ zV{jxL*8w{8!;EsHMT@by&nBBO+6a)!*Z!8YWEwN<4uUpaTSWanSf6$WyyBKafm!YUjkHrc zOHL-0l@8TKS{~p2(6ysQ;38WYo8}+CK6=UMtC@&LN9DA;tc zs(s|{;AEHh?a|be;wu@hyR`e4`UYI7yxcE8JQgub|CwvH}c$6L{ z1nnVH@jqksm9y(@&ZgR1{89qU72v#*!e52x3%|EqyzLa?6<++kcZ6i z&;Nb2fyfjmR|yglUgZtOS7BcQ$sJ7Oq`XJxf9~_of$YcWhWm+L=_z?$#Kix-L_CS* ZP@4ZOt*DVhRN)v9=Pc~ZiDuq${{o1;6Da@y literal 0 HcmV?d00001 diff --git a/docs/screenshots/ribbon-highlight/before-dimbreak.png b/docs/screenshots/ribbon-highlight/before-dimbreak.png new file mode 100644 index 0000000000000000000000000000000000000000..195fa916bba4e8aacb3cbf1cf4647abfca4838c4 GIT binary patch literal 39400 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

P;PD-+pp#$Ww~8L4%eNM`i7eg9AI(}=`zwPqrb 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

Sy>eXs!gVL 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/ribbon-highlight/before-offset.png b/docs/screenshots/ribbon-highlight/before-offset.png new file mode 100644 index 0000000000000000000000000000000000000000..195fa916bba4e8aacb3cbf1cf4647abfca4838c4 GIT binary patch literal 39400 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

P;PD-+pp#$Ww~8L4%eNM`i7eg9AI(}=`zwPqrb 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

Sy>eXs!gVL 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/ribbon-highlight/before-xline.png b/docs/screenshots/ribbon-highlight/before-xline.png new file mode 100644 index 0000000000000000000000000000000000000000..195fa916bba4e8aacb3cbf1cf4647abfca4838c4 GIT binary patch literal 39400 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

P;PD-+pp#$Ww~8L4%eNM`i7eg9AI(}=`zwPqrb ze&YJ5qV>97JmJIq`Fc}E*XT>F6O?x{VjfVM`4U`8?*-l_clTWKth@eI3LOY$ zAt+K*VXG4~UCCe>4}IZZzU&*9*$*^$bVmVvvK^1B?@E9SWgpboqaY z<{HA>Lj_q*`hI8R4NR76G6~&eL!w3LmbQSjwctd1chsKUq(B2vmKA0TRy9Q9sVi(kC(bj`>Aoy>?d%2AeEGyrcpd& zTtyzt5JhV}y=-~6w$-K?uUDw0&|7m;h=AyMtEuBJkILDygi5zCes*oGe=V3|U64B6 zsnkDrBKciWjihF?;B*9xaEEo^7#0{BV*@+aZ|w5nM<~2|t<%XFBNF0u`hnE8@3XX_RuHsMWTJAOyB=B!&2j=6a448i(0x3 z>uP#cNaM6g`YmD@vkErD!F_ib7?Z;*)BxBcTd6_|90B&E^nE z^KI&z+aN@a9k3{-K6Y^qkGwGT!CS*H4UbOMc?&;BV2^MZdm)yR>{M0h6QQiIOP)E$ zJFB&NyCiCt9*pA9<^9$~YnZRi^Hw#!ONeauOoP&V5$h=_1gCz8i^gtNb);YX9nfYp zdZcxsX+FsIOtR++OXne)cP{9w7@k$4jwQ(lb1rMCfa=TWe#rm8C#m*kf!X>NV@I<5 z2HyOOZ*ES;YHQNx^9)I+J3YE! zL8|ppdC`wdXLm&IE-ID!BXzdrUGM~FJqG+4U2r8H(3WEZ%v>a@)_*iVij z`JuxI)TFBF_hx|TUm$QedHGx&7b4UaHYku)J&@X4n)@McHd$J6y6=z#zqY1QIKFE< zO|!&#$bFTgnpP*v zSt!dyS2tQGXnAx8zfnf{N3*Q3_3m;%4Sr%~>~Gl#H-Dm6FzN_yK{R+T!SKK)rf0Y1 z8st)1(FWtE1&^=xHC)6*pA>hgumH1cAs-EfR1f_f`Xgl5BMA{xj_OOAA1 zRG*Sy@}$0|t0taGfs%V|&8N+NMYj{3SB8pOghNl8ttuJMbDk(J#0i2-CY<;}9%L*d zHa8UaxscIn(?%Bp4NgROYt*w&lAh%IA&hSFpiiC>5tg5h9+r%5Drx-t)4wO@)^ z&Hfa#XL7GD;rtuYbUBaU_HUKjdC-U@9zrMhDX}Tej~#g$^GUIU%$Xx|{)9vtjx`Kq1g#6m zp0jj+H3Xu2$E?@|yY%tbpXHF!wi2hpjjmmQtM^eeaND5mjM~ra;Il-QsyJJ;=cI|# z{9I6|^`#d%3Q%h+Oku^tfx6{uztyIj_O(aDQb}+&dA-Gh8%)}F1K(4*Ham>w&ukps z6BRPt499v$)>9EoPr@Nx5(!zt$CD!&1-!f6`qr;;^n8~L9rd}CfS2R;xcPBWsau6$ z-n37DXXS#jwFJUa`u#>pGydmx8kk9IPZoG*g)$}F-z`9wMw&<6rn02AN;0Y&>dMxn_2Vu74~#XQ&<%EXRY zXciLCYnRyOp`@aoXk}B3Sy~n(M1AiK`^M`tgGbsMe-x6NUQi^sy-YzGN`rX%6@QY# zH9f781kD&;-$=0+z_BvMjk~Iq=*jeMi{J?g(0$vDo9lLUY762xa5mD7U)3w27yT|*ZP}QesX;@z5BdzGMd=`^Zjw!sL|({2^E4rrEi{N zRxs&Djz_hB+ru}%QU%;?5cSHko!>W^vsSbh0s56JO<`^A>{})Kt3sd33$qOipKq+EMA{w!e%~#^JvYca>%y{D*De zN6?XmC60tSStm&1lAee3r$$?bUupPpAm20s{}N9gQQfFF?=sWuu;aH(zxD!-E^o>8 zf3Z%|8oS?fY*a>w5}!$^7;RbOyZ9TgB-;@({4c~R(ADHx?>p>DV;#O26EX!d6D|eT zNi3@|>qduTGRm)H5=L}8$pEMCYQM^|8;lk|~+qim~Uhqd*fwB1`ly zxA(qYc8*w$;qKLoAYT5LTRyPifFl=46U39V@^^Mp+iM9IhvaQakVk3o$fy<^i4pZs zC*oEs+-r@xj+f3zH?D>hr`-^QnR5B5*&bD1Q6vTCm04~vY<|>65yh2j2)BSOb9}8l z^$)5Y!4gx+vpY_sGLfjl>_l_g#|X&A(Pqf5jRmYh^a}$zVIfj+f4@_B zum!RGWc$zwi0qUofdq#`2(P~UwouYFWe>M9?Y4O3Kn#WJm7wg-$5k{aNK%q%{v5KT zsjB$hqHf^1axIS@7SMdEej2CIt##iGb9Nn6P6p| z_P*N2Y8P+ywZ1hRZGDp-xJ2W60ypllUo1QFYfVJeWS3eDzC6p!!bl(Fw-^*7u%hu& zQ(C@b;H4TUo()>=^7kIMiPPwZf9Rbp z46gZms5+8t```}5)JLl7dTeAlmPv*dDz&OO?bn-Yx%wa1tG_N&oMC22yP=GuQYrKD zM*m+|=N-=0|Mqcveb`l@e9dUTv%(TGhl>TAc`OT6?4j zQcA1#Ua484MJdnmd;WNy@9*XK%pJ)SdB5-X%e$GsFs_Mz&|Kjk9+k5K zz1)`pMxTX5QRd;RLbhU3g7~F^yBrS^*eX)xqY{~yWw^o^GV?hircaMz;->Lg6? z=(Eni!n@m2XNxox5;lhBfK9mPZoxCA_?272Iw}*L zUw2=20%pCe=YL<_M7?-oy!~MPPBPE0zfBk8!}Fp$1QfEy&wd){m6+4ztuV_~W@mhU z!Vwt)IOn$LIViF?+hKMCM$;~zjB`E9K{`W-v*gc$XEHd7$&d_hgd zjmwE=MhU#;BDz_0bwO@82R21NpM6bx8e`V-M8s1RDJ_{G!$p6Uc)?Uky;12vsk9E& z?I(iT6hzd5WFpMr>uncooqfsc!nZR$Z=lDzvo)NpAE516gA4ES#M7Dg+`9CPYS#*Y zko)T9J!qg!R@s!xAODT}ze(57^Z6w{N#_o4KgIkb|IpFss75DLQer`r>oI-g50*`K~Nw}d~$g1Osr?w~e!EXqfP zIA!y?O}x=thsdW(z~%7hZ?@Z4DtaVt^#MB50<--NP@V~YymU_{cJlYvv+J+}d>=)uZv<_Um)9Kx+ zjvwBcii!H6pu1*Iu<-1Pc26c~IXCx}-;a!7hT80V-B&YTTq^^3h4~a;9rBj))iV3C zJODz{bp*L;VqN8*SwVvVSyZx$O=2R)G9E+w{gl>T4=8ZeyH+(JkL0~cas4-<>L_tP z+pZ69-8x8PfZzJ!7X3y^Gm-B8Araipb6<=d602_4iTekTyKMTOo9Ot*uv)!}4}(vo z{Q887Eui@DN1VSZZoS;T-aK!<8abu8JCy@lNIzqS`vYl0RMM1Ms2YCSpnars1^0ou_c>v zKbJ?|;w-ZrrW3x~amHm?j3pv_2TD6?@3hn_S$67$csGtazxSvcdsTWF)|ANKUPQGr zL8D9Rhx>>2k2fEOkz30`u1_Mq+SGyhRWF7uK+S%|%Z)1|X3GpQsn$9MJ>|-$^$;F~ zKW_K_HI+J@q+&;1llPEhXw6CU@EQJu@!>c$k5QzRMglQnkof~-3YGth;fSZBpr9^1j2G{_@1!hu~Co8qKE%%C@tH5i6UBUT?e~@ zZJ1ZPIAaL`?|sr(#hdW{mS00I?%<1C5MqOq=zRC)!@g#(D)rX5@#~eIDfR*3Mx!-# zo7z%zE{;nZ)6JeOL4oUTcZWLifM~Z*y&h12_$dTZl0V#q6V;%xBcf7oZjDLbi(OvF zhpvj49qy2{e9499uZe#6)G)_3V>D0*gp4=8ZTtAy*_p@AU3^qxqJh&qkp9Jah=zIq z8l?ONq*WmE;$77w{^$l!38^@m7^`$82E?6=lRHWflG|AXx^szda~FR6RK@B+>~9ip z(;~#{?hbCs_FN4*!0>29%jV#PHD3~;7C`VZDHsP401OYfkMCDCpc8X9gJ|1F{^JQs z+c@a}5MuwmAle5o(f?XzmnZoY|4n-ZJR8N$A~yfo^!WcDXIjWR>nIEqtJ?|U!M<*% zlCWmE){f37f-gZrs}=h!a-uP&w3Qez-__TZs~sRb2`x|N zNI-X={1Ydcvi?z(_@zbwsTKJ5SAX`hQ`5JXwt+j#A5;|;ORjO|RWVY{TUuILnZ^ey zw^MLH*p_}EU1i1p728XDdwX*4I1XYM&GhU-5kQW&0Ek)jL73o|X&|t6l@&m=1{Cu% zoq8xa-s#qquN5Ahj0p7RTRT?(Wo8kCBtQ>~iQQ_7<@Q`rb9hG|9hYOTiJbbBXffu# zQ)vW*WBDva?I{fXee?Rq*An6FV17L7FISZo|59IN7pilh6sD`&Z_vgo`4%T(W1n

Sy>eXs!gVL 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 literal 0 HcmV?d00001 diff --git a/src/app/commands/mod.rs b/src/app/commands/mod.rs index 7b9f22f2b..43ea7742b 100644 --- a/src/app/commands/mod.rs +++ b/src/app/commands/mod.rs @@ -92,7 +92,26 @@ impl OpenCADStudio { } pub(super) fn dispatch_command(&mut self, cmd: &str) -> Task { - self.dispatch_command_inner(cmd, false) + let task = self.dispatch_command_inner(cmd, false); + self.clear_idle_tool_highlight(); + task + } + + /// Turn the ribbon highlight off when the command just dispatched left + /// nothing running: no interactive command, dialog or navigation mode. + /// One-shot commands (view changes, clipboard, toggles, audits…) would + /// otherwise leave it lit forever; interactive commands and dialog owners + /// keep theirs until the command end / modal close clears it. (#355) + pub(in crate::app) fn clear_idle_tool_highlight(&mut self) { + let i = self.active_tab; + if self.tabs[i].active_cmd.is_none() + && self.active_modal.is_none() + && !self.tabs[i].pan_mode + && !self.tabs[i].orbit_mode + && !self.tabs[i].zoom_dynamic_mode + { + self.ribbon.deactivate_tool(); + } } /// Dispatch a verb typed at the interactive command line, falling back to @@ -104,7 +123,9 @@ impl OpenCADStudio { /// callers (ribbon, plugins, headless automation) use `dispatch_command` /// and never get silent substitution. pub(super) fn dispatch_command_or_suggest(&mut self, cmd: &str) -> Task { - self.dispatch_command_inner(cmd, true) + let task = self.dispatch_command_inner(cmd, true); + self.clear_idle_tool_highlight(); + task } fn dispatch_command_inner(&mut self, cmd: &str, allow_suggest: bool) -> Task { @@ -205,6 +226,12 @@ impl OpenCADStudio { return Task::none(); } + // Light the ribbon button of the command now starting, however it was + // started (typed, alias, shortcut, Repeat), so the user sees where it + // lives. A transparent command returned above and leaves the running + // command's highlight alone. + self.ribbon.show_command(cmd); + if !self.suppress_plugin_dispatch && crate::plugin::try_dispatch(self, i, cmd) { // try_dispatch returns true for both finished commands and interactive // commands that it just installed. If no command is now active, the @@ -1071,3 +1098,44 @@ fn strip_command_prefixes(cmd: &str) -> Option<&str> { let bare = cmd.trim_start_matches(['_', '.']); (bare.len() != cmd.len() && !bare.is_empty()).then_some(bare) } + +#[cfg(test)] +mod ribbon_highlight_tests { + use crate::app::OpenCADStudio; + + fn fresh() -> OpenCADStudio { + let mut app = OpenCADStudio::new_for_test(); + app.automation_op(r#"{"op":"new"}"#); + app + } + + #[test] + fn a_typed_alias_lights_the_button_of_the_command_it_starts() { + let mut app = fresh(); + let _ = app.dispatch_command_or_suggest("O"); + assert!(app.tabs[app.active_tab].active_cmd.is_some()); + assert_eq!(app.ribbon.active_tool(), Some("OFFSET")); + let _ = app.dispatch_command_or_suggest("L"); + assert_eq!(app.ribbon.active_tool(), Some("LINE")); + } + + #[test] + fn a_transparent_command_keeps_the_running_command_lit() { + let mut app = fresh(); + let _ = app.dispatch_command_or_suggest("LINE"); + let _ = app.dispatch_command_or_suggest("'ZOOM E"); + assert!(app.tabs[app.active_tab].active_cmd.is_some()); + assert_eq!(app.ribbon.active_tool(), Some("LINE")); + } + + #[test] + fn a_one_shot_command_leaves_nothing_lit() { + // REGEN cancels the running LINE and finishes at once, so neither + // its own button nor LINE's may stay lit. + let mut app = fresh(); + let _ = app.dispatch_command_or_suggest("LINE"); + let _ = app.dispatch_command_or_suggest("REGEN"); + assert!(app.tabs[app.active_tab].active_cmd.is_none()); + assert_eq!(app.ribbon.active_tool(), None); + } +} diff --git a/src/app/update/dialog.rs b/src/app/update/dialog.rs index 943ab3d4a..197091807 100644 --- a/src/app/update/dialog.rs +++ b/src/app/update/dialog.rs @@ -120,25 +120,9 @@ pub(super) fn on_ribbon_tool_click(&mut self, tool_id: String, event: ModuleEven self.ribbon.note_panel_tool(&tool_id); self.ribbon.activate_tool(&tool_id); match event { - ModuleEvent::Command(cmd) => { - let task = self.dispatch_command(&cmd); - // One-shot tools (view changes, clipboard, toggles, - // audits…) leave nothing running: no interactive - // command and no dialog. Their highlight would stick - // forever — turn it off now. Interactive commands and - // dialog owners keep theirs; the command end / modal - // close clears those. (#355) - let i = self.active_tab; - if self.tabs[i].active_cmd.is_none() - && self.active_modal.is_none() - && !self.tabs[i].pan_mode - && !self.tabs[i].orbit_mode - && !self.tabs[i].zoom_dynamic_mode - { - self.ribbon.deactivate_tool(); - } - return task; - } + // `dispatch_command` turns a one-shot tool's highlight off + // again once nothing is left running (#355). + ModuleEvent::Command(cmd) => return self.dispatch_command(&cmd), ModuleEvent::OpenFileDialog => { self.command_line .push_info(crate::t!("Open DWG/DXF: not yet implemented.").as_ref()); diff --git a/src/ui/ribbon/draw_panel.rs b/src/ui/ribbon/draw_panel.rs index fbebf55ee..d76bba909 100644 --- a/src/ui/ribbon/draw_panel.rs +++ b/src/ui/ribbon/draw_panel.rs @@ -207,22 +207,52 @@ pub(super) fn parent_panel(id: &str) -> Option<&'static str> { panel_for_dropdown(id).map(|panel| panel.id) } -pub(super) fn group_title<'a>( - title: &'static str, - group_ids: &[&'static str], - open: &Option, -) -> Element<'a, Message> { - let Some(panel) = PANELS.iter().copied().find(|panel| { +/// The slide-out under the title of the ribbon group `title`, whose items +/// are `group_ids`. +fn panel_for_group(title: &str, group_ids: &[&'static str]) -> Option { + PANELS.iter().copied().find(|panel| { panel.title == title && !panel.tools.is_empty() && panel.anchor.is_none_or(|anchor| group_ids.contains(&anchor)) }) - else { +} + +/// Every command the slide-out of the group `title` offers: each tool and +/// each of its submenu options. +pub(super) fn slide_out_commands( + title: &str, + group_ids: &[&'static str], +) -> impl Iterator { + panel_for_group(title, group_ids) + .into_iter() + .flat_map(|panel| panel.tools) + .flat_map(|tool| { + std::iter::once(tool.command).chain(tool.options.iter().map(|(cmd, _)| *cmd)) + }) +} + +/// A slide-out tool is lit while it or one of its submenu options runs. +fn tool_is_active(tool: &Tool, active_tool: Option<&str>) -> bool { + active_tool.is_some_and(|active| { + tool.command == active || tool.options.iter().any(|(cmd, _)| *cmd == active) + }) +} + +pub(super) fn group_title<'a>( + title: &'static str, + group_ids: &[&'static str], + open: &Option, + active_tool: Option<&str>, +) -> Element<'a, Message> { + let Some(panel) = panel_for_group(title, group_ids) else { return container(text(t!(title)).size(9).style(muted_text_style)) .padding([1, 4]) .into(); }; let expanded = open.as_deref().and_then(parent_panel) == Some(panel.id); + // A command running from the closed slide-out lights its title, the way a + // dropdown lights while one of its items runs. + let lit = expanded || panel.tools.iter().any(|tool| tool_is_active(tool, active_tool)); let arrow = if expanded { icons::themed_arrow_up(GROUP_TITLE_ARROW_SIZE) } else { @@ -239,7 +269,7 @@ pub(super) fn group_title<'a>( .align_y(iced::Center), ) .on_press(Message::ToggleRibbonDropdown(panel.id.to_string())) - .style(move |theme: &Theme, status| tool_btn_style(theme, expanded, status)) + .style(move |theme: &Theme, status| tool_btn_style(theme, lit, status)) .padding([1, 4]), ) .into(); @@ -421,7 +451,7 @@ pub(super) fn overlay<'a>(ribbon: &Ribbon, id: &str, win: (f32, f32)) -> Element .map(|tool| { tool_button( tool, - ribbon.active_tool.as_deref() == Some(tool.command), + tool_is_active(tool, ribbon.active_tool.as_deref()), panel.id, ) }) diff --git a/src/ui/ribbon/locate.rs b/src/ui/ribbon/locate.rs new file mode 100644 index 000000000..e4dd32c35 --- /dev/null +++ b/src/ui/ribbon/locate.rs @@ -0,0 +1,283 @@ +//! Where the ribbon offers a command, so a command started from the command +//! line, an alias, a shortcut or Repeat lights the same button a click on it +//! would. Seeing which button runs a typed command is how its place in the +//! ribbon is learned. + +use crate::modules::{ModuleEvent, RibbonGroup, RibbonItem, ToolDef}; + +use super::{draw_panel, item_id, Ribbon}; + +/// One button of a group: the id its highlight is keyed on, and the command +/// line it dispatches (`None` for a button that raises a non-command event). +type Entry<'a> = (&'static str, Option<&'a str>); + +fn tool_entry(t: &ToolDef) -> Entry<'_> { + match &t.event { + ModuleEvent::Command(cmd) => (t.id, Some(cmd.as_str())), + _ => (t.id, None), + } +} + +/// The buttons one ribbon item shows: itself, the items of a dropdown, or the +/// small tools under a combo. A dropdown item is keyed on the command it +/// dispatches, which is what the dropdown's highlight looks for. +fn item_entries(item: &RibbonItem) -> Vec> { + match item { + RibbonItem::Tool(t) | RibbonItem::LabeledTool(t) | RibbonItem::LargeTool(t) => { + vec![tool_entry(t)] + } + RibbonItem::PropertiesGroup { match_prop } => vec![tool_entry(match_prop)], + RibbonItem::Dropdown { items, .. } + | RibbonItem::LabeledDropdown { items, .. } + | RibbonItem::LargeDropdown { items, .. } => { + items.iter().map(|(cmd, _, _)| (*cmd, Some(*cmd))).collect() + } + RibbonItem::ToolGrid { columns } | RibbonItem::StyleComboGroup { rows: columns, .. } => { + columns.iter().flatten().map(tool_entry).collect() + } + RibbonItem::LayerComboGroup { row2, row3 } => { + row2.iter().chain(row3).map(tool_entry).collect() + } + } +} + +/// Every button `group` offers: its items' buttons and the tools of its title +/// slide-out, keyed like dropdown items on the command they dispatch. +pub(super) fn group_entries(group: &RibbonGroup) -> Vec> { + let mut out: Vec<_> = group.tools.iter().flat_map(item_entries).collect(); + let ids: Vec<_> = group.tools.iter().filter_map(item_id).collect(); + out.extend(draw_panel::slide_out_commands(group.title, &ids).map(|cmd| (cmd, Some(cmd)))); + out +} + +/// Whether `item` shows the button keyed `id`, lit or as the item a lit +/// dropdown holds. +pub(super) fn item_holds(item: &RibbonItem, id: &str) -> bool { + item_entries(item).iter().any(|(entry, _)| *entry == id) +} + +/// Whether `group` holds the button keyed `id`. +pub(super) fn group_holds(group: &RibbonGroup, id: &str) -> bool { + group_entries(group).iter().any(|(entry, _)| *entry == id) +} + +impl Ribbon { + /// Every button of every tab, with the index of the tab it is on. The + /// tab on show comes first, so a command offered on two tabs lights the + /// button the user can already see. + fn entries(&self) -> impl Iterator)> { + let order = std::iter::once(self.active) + .chain((0..self.modules.len()).filter(move |i| *i != self.active)); + order + .filter_map(|i| self.modules.get(i).map(|m| (i, m))) + .flat_map(|(i, module)| { + module + .ribbon_groups() + .iter() + .flat_map(group_entries) + .map(move |entry| (i, entry)) + }) + } + + /// The button id that runs the command line `cmd`: an exact match first, + /// then a button that runs its bare verb (`OFFSET 5` → Offset). + pub(super) fn tool_for_command(&self, cmd: &str) -> Option<&'static str> { + let cmd = cmd.trim(); + let verb = cmd.split_whitespace().next().unwrap_or(cmd); + [cmd, verb].into_iter().find_map(|want| { + self.entries() + .find(|(_, (_, runs))| runs.is_some_and(|runs| runs.eq_ignore_ascii_case(want))) + .map(|(_, (id, _))| id) + }) + } + + /// Light the ribbon button of the command line `cmd` that is starting, + /// however it was started. A button the user just clicked to run `cmd` + /// stays lit, so a command offered on two tabs keeps the clicked one; a + /// command with no button clears the previous command's highlight. + pub fn show_command(&mut self, cmd: &str) { + let clicked = self.active_tool.as_deref().is_some_and(|current| { + self.entries().any(|(_, (id, runs))| { + id == current && runs.is_some_and(|runs| runs.eq_ignore_ascii_case(cmd.trim())) + }) + }); + if !clicked { + self.active_tool = self.tool_for_command(cmd).map(str::to_string); + } + } + + /// The tab holding the lit button, when it is not the tab on show: its + /// header lights instead, pointing at where the button lives. The Layout + /// module has no tab (its tools are on the side toolbar). + pub(super) fn tab_holding_active_tool(&self) -> Option { + let id = self.active_tool.as_deref()?; + let holds = |i: usize| { + self.modules[i] + .ribbon_groups() + .iter() + .any(|group| group_holds(group, id)) + }; + if self + .modules + .get(self.active) + .is_some_and(|_| holds(self.active)) + { + return None; + } + (0..self.modules.len()).find(|i| self.modules[*i].id() != "layout" && holds(*i)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::modules::{CadModule, IconKind}; + + struct TestTab { + id: &'static str, + groups: Vec, + } + + impl CadModule for TestTab { + fn id(&self) -> &'static str { + self.id + } + fn title(&self) -> &'static str { + self.id + } + fn ribbon_groups(&self) -> &[RibbonGroup] { + &self.groups + } + } + + fn tool(id: &'static str, cmd: &str) -> ToolDef { + ToolDef { + id, + label: id, + icon: IconKind::Glyph("x"), + event: ModuleEvent::Command(cmd.to_string()), + } + } + + /// Home: OFFSET (button id differs from its command), a CIRCLE dropdown, + /// LAYERS (a non-command event). View: ZOOM EXTENTS and a second OFFSET. + fn ribbon() -> Ribbon { + let mut layers = tool("LAYERS", ""); + layers.event = ModuleEvent::ToggleLayers; + let home = TestTab { + id: "home", + groups: vec![RibbonGroup { + title: "Modify", + tools: vec![ + RibbonItem::LargeTool(tool("OFFSET_TOOL", "OFFSET")), + RibbonItem::Dropdown { + id: "circle_dd", + icon: IconKind::Glyph("o"), + items: vec![ + ("CIRCLE", "Center, Radius", IconKind::Glyph("o")), + ("CIRCLE_2P", "2-Point", IconKind::Glyph("o")), + ], + default: "CIRCLE", + }, + RibbonItem::Tool(layers), + ], + }], + }; + let view = TestTab { + id: "view", + groups: vec![RibbonGroup { + title: "Navigate", + tools: vec![ + RibbonItem::Tool(tool("ZOOM_EXTENTS", "ZOOM EXTENTS")), + RibbonItem::Tool(tool("OFFSET_VIEW", "OFFSET")), + ], + }], + }; + let mut ribbon = Ribbon::default(); + ribbon.set_modules(vec![Box::new(home), Box::new(view)]); + ribbon + } + + #[test] + fn a_command_lights_the_button_that_runs_it_not_one_named_like_it() { + let mut r = ribbon(); + r.show_command("OFFSET"); + assert_eq!(r.active_tool.as_deref(), Some("OFFSET_TOOL")); + assert_eq!(r.tab_holding_active_tool(), None); + } + + #[test] + fn a_dropdown_item_is_keyed_on_its_command_so_the_dropdown_lights() { + let mut r = ribbon(); + r.show_command("circle_2p"); + assert_eq!(r.active_tool.as_deref(), Some("CIRCLE_2P")); + } + + #[test] + fn a_button_on_another_tab_lights_that_tab() { + let mut r = ribbon(); + r.show_command("ZOOM EXTENTS"); + assert_eq!(r.active_tool.as_deref(), Some("ZOOM_EXTENTS")); + assert_eq!(r.tab_holding_active_tool(), Some(1)); + r.select(1); + assert_eq!(r.tab_holding_active_tool(), None); + } + + #[test] + fn a_command_on_two_tabs_prefers_the_tab_on_show_then_the_clicked_one() { + let mut r = ribbon(); + r.select(1); + r.show_command("OFFSET"); + assert_eq!(r.active_tool.as_deref(), Some("OFFSET_VIEW")); + // A clicked button keeps its highlight when its command dispatches, + // even though another button for the same command comes first. + r.select(0); + r.activate_tool("OFFSET_VIEW"); + r.show_command("OFFSET"); + assert_eq!(r.active_tool.as_deref(), Some("OFFSET_VIEW")); + } + + #[test] + fn arguments_fall_back_to_the_bare_verb() { + let mut r = ribbon(); + r.show_command("OFFSET 5"); + assert_eq!(r.active_tool.as_deref(), Some("OFFSET_TOOL")); + } + + #[test] + fn a_command_without_a_button_clears_the_previous_highlight() { + let mut r = ribbon(); + r.show_command("OFFSET"); + r.show_command("DIST"); + assert_eq!(r.active_tool, None); + assert_eq!(r.tab_holding_active_tool(), None); + // A non-command button has no command line to match. + r.show_command("LAYERS"); + assert_eq!(r.active_tool, None); + } + + #[test] + fn slide_out_tools_and_their_options_belong_to_their_group() { + // The Draw group's title slide-out holds SPLINE; the Modify one holds + // the draw-order submenu. + let draw = RibbonGroup { + title: "Draw", + tools: vec![], + }; + assert!(group_holds(&draw, "SPLINE")); + let modify = RibbonGroup { + title: "Modify", + tools: vec![], + }; + assert!(group_holds(&modify, "DRAWORDER_BACK")); + } + + #[test] + fn the_shipped_ribbon_resolves_its_own_commands() { + let mut r = Ribbon::default(); + for cmd in ["LINE", "OFFSET", "SPLINE", "ZOOM EXTENTS"] { + r.show_command(cmd); + assert!(r.active_tool.is_some(), "{cmd} has no ribbon button"); + } + } +} diff --git a/src/ui/ribbon/mod.rs b/src/ui/ribbon/mod.rs index 20989bd37..1546cb166 100644 --- a/src/ui/ribbon/mod.rs +++ b/src/ui/ribbon/mod.rs @@ -30,6 +30,7 @@ pub use context_tools::{pdf_underlay_tools, point_cloud_tools, xref_tools, Under use widgets::{StyleContext, *}; pub(crate) use widgets::{REDO_HISTORY_ID, UNDO_HISTORY_ID}; mod collapse; +mod locate; use collapse::{CollapsePanels, Panel}; pub use collapse::CollapseMode; use crate::ui::wrap_bar::{PosReport, WrapBar, WrapFlow}; @@ -303,6 +304,10 @@ impl Ribbon { pub fn activate_tool(&mut self, id: &str) { self.active_tool = Some(id.to_string()); } + #[cfg(test)] + pub(crate) fn active_tool(&self) -> Option<&str> { + self.active_tool.as_deref() + } pub fn deactivate_tool(&mut self) { self.active_tool = None; } @@ -516,6 +521,9 @@ impl Ribbon { // The quick-access flow and the tabs flow each flex-wrap; WrapBar stacks // them so a wrapped tab never shares a row with a quick-access button. + // A running command whose button is on another tab lights that tab's + // header in the button's own blue, pointing at where the button lives. + let holding_tab = self.tab_holding_active_tool(); let tab_items = self.modules.iter().enumerate().fold( Vec::>::new(), |mut acc, (i, module)| { @@ -527,6 +535,7 @@ impl Ribbon { let is_active = i == self.active; let is_contextual = module.id() == "layout"; + let holds_tool = holding_tab == Some(i); let btn = container( button(text(crate::i18n::ribbon_module_title(module.id(), module.title())).size(12)) .on_press(Message::RibbonSelectTab(i)) @@ -539,6 +548,7 @@ impl Ribbon { }; let pair = match (is_active, status) { (true, _) => palette.background.weakest, + (false, _) if holds_tool => palette.primary.weak, (false, button::Status::Hovered) => { if is_contextual { palette.warning.weak @@ -550,9 +560,10 @@ impl Ribbon { }; button::Style { background: (is_active + || holds_tool || matches!(status, button::Status::Hovered)) .then_some(Background::Color(pair.color)), - text_color: if is_active { + text_color: if is_active || holds_tool { pair.text } else if is_contextual { accent.color @@ -1414,6 +1425,7 @@ fn render_group<'a>( group.title, &group.tools.iter().filter_map(item_id).collect::>(), open_dd, + active_tool.as_deref(), ), ] .align_x(iced::Center) @@ -1495,6 +1507,19 @@ fn collapse_button<'a>( ) -> Element<'a, Message> { let title = group.title; let localized_title = t!(title).into_owned(); + // A collapsed panel lights its opener while one of its hidden tools runs, + // the way a dropdown lights while one of its items does. + let active = active_tool.as_deref(); + let holds = active.is_some_and(|id| locate::group_holds(group, id)); + let opener_style = move |lit: bool| { + move |theme: &Theme, status| { + if lit { + tool_btn_style(theme, true, status) + } else { + button::subtle(theme, status) + } + } + }; // Tightest form: one button = the panel's FIRST tool icon + its title + ▾. // Clicking opens the flyout listing every tool; no tool runs directly at this @@ -1525,7 +1550,7 @@ fn collapse_button<'a>( .width(Fill), ) .on_press(Message::ToggleRibbonPanel(title.to_string())) - .style(button::subtle) + .style(opener_style(holds)) .width(Fill) .padding([3, 5]); return automatic_large_button(localized_title, content.into()); @@ -1535,6 +1560,8 @@ fn collapse_button<'a>( // that runs the last-used tool — above a title + ▾ opener for the full flyout. // For a Properties panel the representative is its Match button. let rep = representative(group, last_used); + // The face lights itself when it is the running tool. + let face_lit = rep.zip(active).is_some_and(|(item, id)| locate::item_holds(item, id)); let face: Element<'_, Message> = match rep { Some(RibbonItem::PropertiesGroup { match_prop }) => { render_large( @@ -1590,7 +1617,7 @@ fn collapse_button<'a>( .align_y(iced::Center), ) .on_press(Message::ToggleRibbonPanel(title.to_string())) - .style(button::subtle) + .style(opener_style(holds && !face_lit)) .width(Fill) .padding([1, 4]); let opener = automatic_large_button(localized_title, opener.into()); From 278e15405d258e18b7ac1a2d73ac94f6e0d5f5e4 Mon Sep 17 00:00:00 2001 From: Christopher Overbeck Date: Fri, 2 Oct 2026 15:41:39 -0500 Subject: [PATCH 09/43] style(ribbon): tint, rather than fill, the tab holding the running command A full-strength fill on a large tab header read louder than the selected tab's outline. A faint wash of the same blue still points at the tab without looking selected. Co-Authored-By: Claude Opus 5.5 --- .../ribbon-highlight/after-dimbreak.png | Bin 39875 -> 39920 bytes src/ui/ribbon/mod.rs | 15 +++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/screenshots/ribbon-highlight/after-dimbreak.png b/docs/screenshots/ribbon-highlight/after-dimbreak.png index b8dff2f5145b06abd6ba4c872a0fcf58b38cda0f..a6538aa969522420abeb379b1f7f4f912b293d3d 100644 GIT binary patch literal 39920 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 @S@69>* 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 z

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%0DCaLVSlKQAuqn-n?g_r;cRvLEJzYvx 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::new(), @@ -562,9 +563,15 @@ impl Ribbon { background: (is_active || holds_tool || matches!(status, button::Status::Hovered)) - .then_some(Background::Color(pair.color)), - text_color: if is_active || holds_tool { + .then_some(Background::Color(if holds_tool && !is_active { + pair.color.scale_alpha(0.35) + } else { + pair.color + })), + text_color: if is_active { pair.text + } else if holds_tool { + palette.background.base.text } else if is_contextual { accent.color } else { From c9d9f9c2bb9c8f84af0201ee01556d7b028c0c33 Mon Sep 17 00:00:00 2001 From: yztink Date: Fri, 2 Oct 2026 21:01:02 -0700 Subject: [PATCH 10/43] feat(sysvar): add DYNMODE system variable and command for Dynamic Input --- src/app/commands/styleprops.rs | 67 +++++++++++++++++++++++++++++++++- src/app/drafting_settings.rs | 5 +++ src/app/mod.rs | 3 ++ src/app/settings.rs | 2 + src/app/update/file.rs | 2 + src/app/update/mod.rs | 5 +++ 6 files changed, 83 insertions(+), 1 deletion(-) diff --git a/src/app/commands/styleprops.rs b/src/app/commands/styleprops.rs index 5f9fee957..8051eed84 100644 --- a/src/app/commands/styleprops.rs +++ b/src/app/commands/styleprops.rs @@ -1086,6 +1086,7 @@ impl OpenCADStudio { | "CONSTRAINTNAMEFORMAT" | "DYNCONSTRAINTDISPLAY" | "CCONSTRAINTFORM" + | "DYNMODE" ) => { return self.dispatch_styleprops(&format!("SETVAR {cmd}"), i); @@ -1110,7 +1111,7 @@ impl OpenCADStudio { self.command_line.push_info(&super::plotvars::setvar_listing()); self.command_line.push_info(&super::blockvars::setvar_listing()); self.command_line.push_info( - crate::t!("SETVAR: CETRANSPARENCY LTSCALE CELTSCALE PDMODE PDSIZE TEXTSIZE ORTHOMODE FILLMODE MIRRTEXT FRAME IMAGEFRAME PDFFRAME WIPEOUTFRAME XCLIPFRAME POINTCLOUDCLIPFRAME ZOOMWHEEL ZOOMFACTOR SHORTCUTMENU SHORTCUTMENUDURATION CURSORSIZE PICKBOX CURSORTYPE SNAPANG TEXTFILL CLIPROMPTLINES COMMANDLINEFADETIME ATTREQ ATTDIA DIMASSOC DIMCONTINUEMODE CONSTRAINTSOLVEMODE CONSTRAINTINFER CONSTRAINTBARDISPLAY CONSTRAINTBARMODE CONSTRAINTNAMEFORMAT DYNCONSTRAINTDISPLAY ANGBASE ANGDIR SKETCHINC SKPOLY SKTOLERANCE DONUTID DONUTOD CENTEREXE CENTERLAYER CENTERLTYPE CENTERLTSCALE CENTERLTYPEFILE CENTERCROSSSIZE CENTERCROSSGAP CENTERMARKEXE COLORTHEME SELECTIONAREA SELECTIONAREAOPACITY SELECTIONEFFECT SELECTIONEFFECTCOLOR WINDOWSAREACOLOR CROSSINGAREACOLOR SELECTIONPREVIEW GRIPSIZE GRIPCOLOR GRIPHOT GRIPHOVER GRIPOBJLIMIT | CLAYER CELTYPE TEXTSTYLE (read-only)").as_ref(), + crate::t!("SETVAR: CETRANSPARENCY LTSCALE CELTSCALE PDMODE PDSIZE TEXTSIZE ORTHOMODE FILLMODE MIRRTEXT FRAME IMAGEFRAME PDFFRAME WIPEOUTFRAME XCLIPFRAME POINTCLOUDCLIPFRAME ZOOMWHEEL ZOOMFACTOR SHORTCUTMENU SHORTCUTMENUDURATION CURSORSIZE PICKBOX CURSORTYPE SNAPANG TEXTFILL CLIPROMPTLINES COMMANDLINEFADETIME ATTREQ ATTDIA DIMASSOC DIMCONTINUEMODE CONSTRAINTSOLVEMODE CONSTRAINTINFER CONSTRAINTBARDISPLAY CONSTRAINTBARMODE CONSTRAINTNAMEFORMAT DYNCONSTRAINTDISPLAY DYNMODE ANGBASE ANGDIR SKETCHINC SKPOLY SKTOLERANCE DONUTID DONUTOD CENTEREXE CENTERLAYER CENTERLTYPE CENTERLTSCALE CENTERLTYPEFILE CENTERCROSSSIZE CENTERCROSSGAP CENTERMARKEXE COLORTHEME SELECTIONAREA SELECTIONAREAOPACITY SELECTIONEFFECT SELECTIONEFFECTCOLOR WINDOWSAREACOLOR CROSSINGAREACOLOR SELECTIONPREVIEW GRIPSIZE GRIPCOLOR GRIPHOT GRIPHOVER GRIPOBJLIMIT | CLAYER CELTYPE TEXTSTYLE (read-only)").as_ref(), ); } else { // Point cloud settings, kept with the drawing. @@ -1703,6 +1704,24 @@ impl OpenCADStudio { .ok_or_else(|| "SETVAR: 0 or 1 required.".into()), None => Ok((format!("MIRRTEXT = {}", h.mirror_text as i32), false)), }, + "DYNMODE" => match &value { + Some(v) => match v.parse::() { + Ok(mode) if (-3..=3).contains(&mode) => { + self.dyn_mode = mode; + self.dyn_input = mode > 0; + Ok((format!("DYNMODE = {mode}"), true)) + } + _ => Err("SETVAR: integer from -3 to 3 required.".into()), + }, + None => { + let mode = if self.dyn_input { + if self.dyn_mode > 0 { self.dyn_mode } else { 3 } + } else { + if self.dyn_mode <= 0 { self.dyn_mode } else { 0 } + }; + Ok((format!("DYNMODE = {mode}"), false)) + } + }, "ZOOMWHEEL" => match &value { Some(v) => match parse_bool(v) { Some(reversed) => { @@ -2685,6 +2704,7 @@ impl OpenCADStudio { // Without this it marked the drawing // modified instead of persisting. | "TEXTFILL" + | "DYNMODE" ) { self.persist_settings_if_changed(); } else { @@ -3782,6 +3802,51 @@ mod tests { let _ = app.run_command_line("SETVAR DELOBJ 4"); assert_eq!(app.delete_objects, 3); } + + #[test] + fn dynmode_direct_and_setvar_toggles_dynamic_input() { + let mut app = fresh_app(); + assert!(app.dyn_input); + assert_eq!(app.dyn_mode, 3); + + // Turn off via direct command: DYNMODE 0 + let _ = app.run_command_line("DYNMODE 0"); + assert!(!app.dyn_input); + assert_eq!(app.dyn_mode, 0); + + // Turn on via direct command: DYNMODE 3 + let _ = app.run_command_line("DYNMODE 3"); + assert!(app.dyn_input); + assert_eq!(app.dyn_mode, 3); + + // Turn off via SETVAR: SETVAR DYNMODE 0 + let _ = app.run_command_line("SETVAR DYNMODE 0"); + assert!(!app.dyn_input); + assert_eq!(app.dyn_mode, 0); + + // Turn on via SETVAR: SETVAR DYNMODE 1 (pointer input only) + let _ = app.run_command_line("SETVAR DYNMODE 1"); + assert!(app.dyn_input); + assert_eq!(app.dyn_mode, 1); + + // Out of range rejected + let _ = app.run_command_line("DYNMODE 5"); + assert_eq!(app.dyn_mode, 1); + assert!(app.dyn_input); + + let _ = app.run_command_line("DYNMODE -5"); + assert_eq!(app.dyn_mode, 1); + assert!(app.dyn_input); + + // F12 / Message::ToggleDynInput synchronization + let _ = app.update(crate::app::Message::ToggleDynInput); + assert!(!app.dyn_input); + assert_eq!(app.dyn_mode, 0); + + let _ = app.update(crate::app::Message::ToggleDynInput); + assert!(app.dyn_input); + assert_eq!(app.dyn_mode, 3); + } } #[cfg(test)] diff --git a/src/app/drafting_settings.rs b/src/app/drafting_settings.rs index 04f5753ed..2b8b7369f 100644 --- a/src/app/drafting_settings.rs +++ b/src/app/drafting_settings.rs @@ -101,6 +101,11 @@ impl OpenCADStudio { self.snapper.snap3d_enabled = state.osnap3d_on; self.snapper.enabled3d = state.snap3d_modes.clone(); self.dyn_input = state.dyn_input_on; + if self.dyn_input && self.dyn_mode <= 0 { + self.dyn_mode = 3; + } else if !self.dyn_input && self.dyn_mode > 0 { + self.dyn_mode = 0; + } self.quick_properties = state.quick_props_on; self.selection_cycling = state.selection_cycling_on; self.sync_vport_display(self.active_tab); diff --git a/src/app/mod.rs b/src/app/mod.rs index 392e1bed1..755735f17 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -615,6 +615,8 @@ pub(super) struct OpenCADStudio { pub grid_beyond_limits: bool, /// Dynamic input overlay (F12): show coordinate tooltip near cursor. dyn_input: bool, + /// Dynamic input mode (DYNMODE): 0=off, 1=pointer, 2=dimensional, 3=both. + dyn_mode: i16, /// Currently visible page in the application Options dialog. options_tab: crate::ui::window::options::OptionsTab, /// The Options window's commit point (see `options_session`). @@ -4136,6 +4138,7 @@ impl OpenCADStudio { grid_adaptive: true, grid_beyond_limits: true, dyn_input: true, + dyn_mode: 3, options_tab: crate::ui::window::options::OptionsTab::General, options_saved: None, options_close_confirm: false, diff --git a/src/app/settings.rs b/src/app/settings.rs index 690114e91..52907b2bf 100644 --- a/src/app/settings.rs +++ b/src/app/settings.rs @@ -383,6 +383,7 @@ pub const MAX_SELECTED_GRIPS: usize = 4096; pub struct UserSettings { pub spacemouse: crate::input::spacemouse::Preferences, pub dyn_input: bool, + pub dyn_mode: i16, pub polar: bool, pub polar_increment_deg: f32, pub zoom_wheel_reversed: bool, @@ -771,6 +772,7 @@ impl Default for UserSettings { Self { spacemouse: crate::input::spacemouse::Preferences::default(), dyn_input: true, + dyn_mode: 3, polar: false, polar_increment_deg: 45.0, zoom_wheel_reversed: false, diff --git a/src/app/update/file.rs b/src/app/update/file.rs index ca2945cc5..1aaa47170 100644 --- a/src/app/update/file.rs +++ b/src/app/update/file.rs @@ -659,6 +659,7 @@ impl OpenCADStudio { crate::app::settings::UserSettings { spacemouse: self.spacemouse_preferences, dyn_input: self.dyn_input, + dyn_mode: self.dyn_mode, polar: self.polar_mode, polar_increment_deg: self.polar_increment_deg, zoom_wheel_reversed: self.zoom_wheel_reversed, @@ -750,6 +751,7 @@ impl OpenCADStudio { /// Apply restored preferences to live state. pub(in crate::app) fn apply_settings(&mut self, s: &crate::app::settings::UserSettings) { self.dyn_input = s.dyn_input; + self.dyn_mode = if s.dyn_mode != 0 { s.dyn_mode } else if s.dyn_input { 3 } else { 0 }; self.polar_mode = s.polar; self.polar_increment_deg = s.polar_increment_deg; self.zoom_wheel_reversed = s.zoom_wheel_reversed; diff --git a/src/app/update/mod.rs b/src/app/update/mod.rs index fdcac3bea..c6680d3ad 100644 --- a/src/app/update/mod.rs +++ b/src/app/update/mod.rs @@ -4197,6 +4197,11 @@ impl OpenCADStudio { } Message::ToggleDynInput => { self.dyn_input ^= true; + if self.dyn_input && self.dyn_mode <= 0 { + self.dyn_mode = 3; + } else if !self.dyn_input && self.dyn_mode > 0 { + self.dyn_mode = 0; + } Task::none() } Message::ToggleViewCube => { From 9345c7799ce1afb3aa78b9c6e8f627d09b9a3869 Mon Sep 17 00:00:00 2001 From: yztink Date: Fri, 2 Oct 2026 23:16:47 -0700 Subject: [PATCH 11/43] fix(layer): refresh ribbon and layer panel when entities register novel layers --- src/app/command_driver/entity_commit.rs | 7 ++- src/app/command_driver/mod.rs | 2 +- src/app/plugin_host.rs | 58 +++++++++++++++++++++++++ src/app/properties.rs | 5 +++ src/scene/entity.rs | 12 +++-- src/scene/mod.rs | 4 ++ 6 files changed, 82 insertions(+), 6 deletions(-) diff --git a/src/app/command_driver/entity_commit.rs b/src/app/command_driver/entity_commit.rs index 4656fab0c..8caae44ad 100644 --- a/src/app/command_driver/entity_commit.rs +++ b/src/app/command_driver/entity_commit.rs @@ -200,6 +200,7 @@ impl OpenCADStudio { pub(super) fn handle_commit_and_exit( &mut self, entity: codec::EntityType, + preserve_commit_layer: bool, ) -> Option> { let i = self.active_tab; // XATTACH: the definition and its INSERT are created together @@ -255,7 +256,11 @@ impl OpenCADStudio { ); let association_enabled = self.tabs[i].scene.document.header.dimension_associativity == 2; - let committed = self.commit_entity_handle(entity); + let committed = if preserve_commit_layer { + self.commit_entity_handle_preserve_layer(entity) + } else { + self.commit_entity_handle(entity) + }; if is_associative_dimension && association_enabled { if let Some(handle) = committed { let sources = self.infer_dimension_sources_guarded(i, handle); diff --git a/src/app/command_driver/mod.rs b/src/app/command_driver/mod.rs index 76ba3bfb0..21b19199e 100644 --- a/src/app/command_driver/mod.rs +++ b/src/app/command_driver/mod.rs @@ -507,7 +507,7 @@ impl OpenCADStudio { self.handle_copy_to_clipboard(handles, base); } CmdResult::CommitAndExit(entity) => { - if let Some(task) = self.handle_commit_and_exit(entity) { + if let Some(task) = self.handle_commit_and_exit(entity, preserve_commit_layer) { return task; } } diff --git a/src/app/plugin_host.rs b/src/app/plugin_host.rs index edf47fe0c..9f548eb26 100644 --- a/src/app/plugin_host.rs +++ b/src/app/plugin_host.rs @@ -350,6 +350,11 @@ impl<'a> HostSession<'a> { return handle; } let handle = self.app.tabs[self.tab].scene.add_entity(entity); + if self.app.tabs[self.tab].scene.layer_table_dirty { + self.app.tabs[self.tab].scene.layer_table_dirty = false; + self.app.tabs[self.tab].dirty = true; + self.app.refresh_layer_panel(); + } self.publish_document_view(); handle } @@ -362,6 +367,11 @@ impl<'a> HostSession<'a> { let _ = self.normalize_scripted_entity(None, entity); } let handles = self.app.tabs[self.tab].scene.add_entities(entities); + if self.app.tabs[self.tab].scene.layer_table_dirty { + self.app.tabs[self.tab].scene.layer_table_dirty = false; + self.app.tabs[self.tab].dirty = true; + self.app.refresh_layer_panel(); + } self.publish_document_view(); handles } @@ -381,6 +391,11 @@ impl<'a> HostSession<'a> { EntityType::AttributeEntity(attribute) => self.replace_nested_attribute(attribute), entity => self.app.tabs[self.tab].scene.update_entity(entity), }; + if self.app.tabs[self.tab].scene.layer_table_dirty { + self.app.tabs[self.tab].scene.layer_table_dirty = false; + self.app.tabs[self.tab].dirty = true; + self.app.refresh_layer_panel(); + } if ok { self.publish_document_view(); } @@ -439,6 +454,11 @@ impl<'a> HostSession<'a> { }; assert!(updated); } + if self.app.tabs[self.tab].scene.layer_table_dirty { + self.app.tabs[self.tab].scene.layer_table_dirty = false; + self.app.tabs[self.tab].dirty = true; + self.app.refresh_layer_panel(); + } self.set_dirty(); self.publish_document_view(); Ok(()) @@ -9697,6 +9717,44 @@ step('undo_move', lambda: M.move([u], (0, 0, 0), (7, 0, 0))) assert!(!host.modify_layer(non_existent)); } + #[test] + fn test_entity_creation_with_novel_layer_refreshes_gui() { + let mut app = OpenCADStudio::new_for_test(); + app.tabs[0].is_start = false; + + // Verify COGO_LINES does not exist initially + assert!(!app.tabs[0].scene.document.layers.contains("COGO_LINES")); + assert!(!app.ribbon.layer_names.contains(&"COGO_LINES".to_string())); + + // 1. Add entity via HostSession (simulating plugin add_entity / add_line) + { + let mut host = HostSession::new(&mut app, 0); + let mut line = codec::entities::Line::from_coords(0.0, 0.0, 0.0, 10.0, 10.0, 0.0); + line.common.layer = "COGO_LINES".to_string(); + let handle = host.add_entity(codec::EntityType::Line(line)); + assert_ne!(handle, codec::Handle::NULL); + } + + // Verify layer is created in document AND refreshed in ribbon + layer panel + assert!(app.tabs[0].scene.document.layers.contains("COGO_LINES")); + assert!(app.ribbon.layer_names.contains(&"COGO_LINES".to_string()), + "Ribbon layers should contain COGO_LINES after add_entity"); + assert!(app.tabs[0].layers.layers.iter().any(|l| l.name == "COGO_LINES"), + "Layer panel should contain COGO_LINES after add_entity"); + + // 2. Commit entity via command driver (simulating interactive tool / palette commit) + let mut line2 = codec::entities::Line::from_coords(10.0, 10.0, 0.0, 20.0, 20.0, 0.0); + line2.common.layer = "SURVEY_TRAVERSE".to_string(); + let _ = app.commit_entity_handle_preserve_layer(codec::EntityType::Line(line2)); + + // Verify SURVEY_TRAVERSE layer is created and refreshed in ribbon + layer panel + assert!(app.tabs[0].scene.document.layers.contains("SURVEY_TRAVERSE")); + assert!(app.ribbon.layer_names.contains(&"SURVEY_TRAVERSE".to_string()), + "Ribbon layers should contain SURVEY_TRAVERSE after commit_entity"); + assert!(app.tabs[0].layers.layers.iter().any(|l| l.name == "SURVEY_TRAVERSE"), + "Layer panel should contain SURVEY_TRAVERSE after commit_entity"); + } + #[test] fn test_plugin_execute_command() { let mut app = OpenCADStudio::new_for_test(); diff --git a/src/app/properties.rs b/src/app/properties.rs index 6ab2ae1bb..8161a2a1b 100644 --- a/src/app/properties.rs +++ b/src/app/properties.rs @@ -3491,6 +3491,11 @@ handles={handles_ms:.1} panel={:.1} ribbon={ribbon_ms:.1} tail={:.1} selected={} if tracks_dimension_chain { self.tabs[i].scene.last_created_dimension = new_handle; } + if self.tabs[i].scene.layer_table_dirty { + self.tabs[i].scene.layer_table_dirty = false; + self.tabs[i].dirty = true; + self.refresh_layer_panel(); + } new_handle } } diff --git a/src/scene/entity.rs b/src/scene/entity.rs index 6108ac028..de7700ca8 100644 --- a/src/scene/entity.rs +++ b/src/scene/entity.rs @@ -143,13 +143,17 @@ impl Scene { /// layer 0. Auto-registering keeps it on its own layer (#252). Names are /// registered verbatim so the writer's (case-insensitive) lookup matches; /// the always-present default layer "0" and empty names are no-ops. - pub fn ensure_layer(&mut self, name: &str) { - if name.trim().is_empty() || self.document.layers.contains(name) { - return; + pub fn ensure_layer(&mut self, name: &str) -> bool { + let trimmed = name.trim(); + if trimmed.is_empty() || trimmed == "0" || self.document.layers.contains(trimmed) { + return false; } - let mut layer = codec::tables::Layer::new(name); + let mut layer = codec::tables::Layer::new(trimmed); layer.handle = self.document.allocate_handle(); let _ = self.document.layers.add(layer); + self.invalidate_layer_dependencies(&[trimmed.to_string()]); + self.layer_table_dirty = true; + true } pub(crate) fn ensure_app_id(&mut self, name: &str) { diff --git a/src/scene/mod.rs b/src/scene/mod.rs index a08c183b8..2a6b45ee7 100644 --- a/src/scene/mod.rs +++ b/src/scene/mod.rs @@ -2054,6 +2054,9 @@ pub struct Scene { pub preview_text: Vec, /// Committed-segment wire drawn during multi-point commands (normal colour). pub interim_wire: Option, + /// Set when an entity creation or update automatically registers a novel + /// layer into the document layer table, signalling the UI to refresh. + pub layer_table_dirty: bool, pub camera_generation: u64, /// Incremented whenever geometry-affecting state changes (entities, selection, /// preview wires, layer visibility, layout). The GPU pipeline uses this to @@ -2626,6 +2629,7 @@ impl Scene { preview_hatches: Arc::new(Vec::new()), preview_text: vec![], interim_wire: None, + layer_table_dirty: false, camera_generation: 0, geometry_epoch: GEOMETRY_EPOCH.fetch_add(1, Ordering::Relaxed), projection_bounds_epoch: std::cell::Cell::new(0), From 72b95a35bd248fe56f357d5fd86f3bd701ab60ac Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sat, 3 Oct 2026 12:44:39 +0300 Subject: [PATCH 12/43] fix(i18n): Italian review fixes after #1593 Fix joined words (livelloiselezionati, livelloeliminato), typos (Gstione, formatazione), lowercase prompt starts, leftover English (object(s), selected), and meanings that drifted from the source: SLICE plane miss, named range not found, worksheets, extractable objects, data link name, count column, pointer input, solid, Stretch verb form, and the locked layer message mixing layer/livello. Co-Authored-By: Claude Opus 5.5 --- locales/it-IT/opencadstudio.ftl | 44 ++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/locales/it-IT/opencadstudio.ftl b/locales/it-IT/opencadstudio.ftl index 8b2124adb..44c045346 100644 --- a/locales/it-IT/opencadstudio.ftl +++ b/locales/it-IT/opencadstudio.ftl @@ -138,7 +138,7 @@ modal = .recovery-prompt = Recupero del disegno .file-name-could-not-be-saved = Impossibile salvare "__ocs_arg_file_name__". .file-name-was-changed-by-another-application = "__ocs_arg_file_name__" è stato modificato da un'altra applicazione. - .count-selected-layers = __ocs_arg_count__ livelloiselezionati + .count-selected-layers = __ocs_arg_count__ livelli selezionati .subject-still-has-count-obj-deleting-will-also = __ocs_arg_subject__ __ocs_arg_has__ ancora __ocs_arg_count__ __ocs_arg_obj__. L'eliminazione rimuoverà dal disegno anche __ocs_arg_those__. Continuare? @@ -797,7 +797,7 @@ common = .slice-select-at-least-one-target = SLICE: seleziona almeno un solido o una superficie. .slice-invalid-plane = SLICE: il piano di taglio non è valido. .slice-side-point-on-plane = SLICE: scegli un punto esterno al piano di taglio. - .slice-plane-misses-target = SLICE: il piano di taglio non interseca alcun oggetto selezionato; nessuna modifica apportata. + .slice-plane-misses-target = SLICE: il piano di taglio non interseca tutti gli oggetti selezionati; nessuna modifica apportata. .slice-unsupported-intersection = SLICE: la geometria selezionata ha una intersezione fra superfici non supportata; nessuna modifica apportata. .slice-coincident-plane = SLICE: il piano di taglio combacia con la geometria selezionata; nessuna modifica apportata. .slice-topology-refused = SLICE: la topologia selezionata non può essere modificata in modo affidabile; nessuna modifica apportata. @@ -858,7 +858,7 @@ common = .start =Inizia .start-angle = Angolo iniziale .status = Stato - .stretch = Stirare + .stretch = Stira .style-name-created = Stile "__ocs_fmt_0__" creato. .style-name-deleted = Stile "__ocs_fmt_0__" eliminato. .style-new-already-exists = Lo stile "__ocs_fmt_0__" esiste già. @@ -1886,9 +1886,9 @@ common = .enter-a-valid-cell-range-such-as-a1-d10 = Indica un intervallo valido, come A1:D10. .named-ranges-require-a-spreadsheet-file = Intervalli denominati richiedono un foglio elettronico. .select-a-named-range = Seleziona un intervallo denominato. - .the-named-range-was-not-found = Il nome non è stato trovato. + .the-named-range-was-not-found = L'intervallo denominato non è stato trovato. .the-named-range-does-not-refer-to-a-worksheet-cell-range = Il nome indicato non si riferisce a un intervallo sul foglio elettronico. - .the-spreadsheet-contains-no-worksheets = Il file non contiene fogli elettronici. + .the-spreadsheet-contains-no-worksheets = Il foglio elettronico non contiene fogli di lavoro. .the-selected-data-source-is-empty = La sorgente dati selezionata è vuota. .the-data-link-no-longer-exists = Il link ai dati non esiste più. .writing-to-this-data-link-is-disabled = La scrittura sui dati collegati è disattivata. @@ -1900,12 +1900,12 @@ common = .columns-rows-width-and-height-must-be-positive-values = Colonne, Righe, Altezza e Larghezza devono essere numeri positivi. .choose-a-spreadsheet-file = Scegli un file di foglio elettronico .spreadsheet-files = Fogli elettronici - .enter-a-data-link-name = Indica un link ai dati. + .enter-a-data-link-name = Indica un nome per il link ai dati. .a-data-link-with-that-name-already-exists = Un link ai dati con questo nome esiste già. .data-link-deleted-existing-table-values-were-retained = Link ai dati eliminato; i valori nelle tabelle esistenti sono stati mantenuti. .no-objects-were-selected-when-the-wizard-opened = Nessun oggetto selezionato quando l'autocomposizione è stata attivata. .add-a-drawing-or-include-the-current-drawing = Aggiungi un disegno o includi il disegno corrente. - .no-extractable-objects-were-found-in-the-selected-source = Nessun oggetto trovato nella sorgente selezionata. + .no-extractable-objects-were-found-in-the-selected-source = Nessun oggetto estraibile trovato nella sorgente selezionata. .select-at-least-one-object-type = Seleziona almeno un tipo di oggetto. .choose-at-least-one-output = Scegli almeno un output. .data-extraction-settings = Impostazioni di estrazione dati @@ -1919,10 +1919,10 @@ common = .a-numeric-shell-offset-distance-is-required = A numeric shell offset distance is required. .a-selected-edge-no-longer-belongs-to-the-body = Uno spigolo selezionato non appartiene più al corpo. .a-selected-face-could-not-be-resolved = Una delle geometrie delle facce non può essere risolta. - .a-selected-face-does-not-belong-to-the-solid = Una delle facce selezionate non appartiene al corpo. + .a-selected-face-does-not-belong-to-the-solid = Una delle facce selezionate non appartiene al solido. .align-scale-objects-based-on-alignment-points-yes-no-no = ALIGN Scalare gli oggetti in base ai punti di allineamento? [Yes / No] : .annoreset-no-selected-object-has-alternate-scale-representations = ANNORESET: nessuno degli oggetti selezionati ha scale multiple di rappresentazione. - .annoreset-synchronized-object-s-from-the-current-scale = ANNORESET: sincronizzati __ocs_fmt_0__ object(s) dalla scala corrente. + .annoreset-synchronized-object-s-from-the-current-scale = ANNORESET: sincronizzati __ocs_fmt_0__ oggetto/i dalla scala corrente. .adaptive-grid = Griglia adattiva .add-drawing-folder = Aggiungi cartella con disegni .add-drawings-2 = Aggiungi disegni… @@ -1935,7 +1935,7 @@ common = .begin = Begin .chamferedge-select-a-base-face-edge = CHAMFEREDGE: seleziona uno spigolo sulla faccia di base. .cannot-delete-beyond-this = Impossibile eliminare oltre. - .cell-range = intervallo celle + .cell-range = Intervallo celle .center-of-face = Centro della faccia .choose-output = Choose output .clipboard-access-is-unavailable-press-ctrl-c-or-command-c-to-copy-the-selected-history = Clipboard access is unavailable. Press Ctrl+C or Command+C to copy the selected history. @@ -1946,12 +1946,12 @@ common = .copied = Copiato .create-a-new-data-link = Crea un nuovo link ai dati .create-a-new-data-extraction = Crea una nuova estrazione dati - .current-drawing = disegno corrente + .current-drawing = Disegno corrente .cursor-dependent-position = Cursor-dependent position - .dataextraction-specify-insertion-point = DATAEXTRACTION specifica punto di inserimento: + .dataextraction-specify-insertion-point = DATAEXTRACTION Specifica punto di inserimento: .dataextraction-external-file-created = DATAEXTRACTION: file esterno creato. .dimbreak-select-dimension-to-add-remove-break-or-multiple = DIMBREAK Selezionare quota per aggiunta/rimozione interruzione o [Multipla]: - .dimbreak-select-dimensions-selected-press-enter-when-done = DIMBREAK Seleziona quote (__ocs_fmt_0__ selected, premi Enter al termine): + .dimbreak-select-dimensions-selected-press-enter-when-done = DIMBREAK Seleziona quote (__ocs_fmt_0__ selezionate, premi Enter al termine): .dimbreak-select-object-to-break-dimension-or-auto-manual-remove-auto = DIMBREAK Seleziona oggetti per interrompere le quote o [Auto/Manual/Remove] : .dimbreak-specify-first-break-point = DIMBREAK Specifica primo punto di interruzione: .dimbreak-specify-second-break-point = DIMBREAK Specifica secondo punto di interruzione: @@ -1969,7 +1969,7 @@ common = .dimedit-updated-dimension-s = DIMEDIT: updated __ocs_fmt_0__ dimension(s). .dimjogline-select-dimension-to-add-jog-or-remove = DIMJOGLINE Scegli la quota a cui aggiungere la riduzione o [Remove]: .dimjogline-select-dimension-to-remove-jog = DIMJOGLINE Scegli la quota a cui rimuovere la riduzione: - .dimjogline-specify-jog-location-or-press-enter = DIMJOGLINE specifica la posizione della riduzione (o premi Enter): + .dimjogline-specify-jog-location-or-press-enter = DIMJOGLINE Specifica la posizione della riduzione (o premi Enter): .dimjogline-jog-added = DIMJOGLINE: jog added. .dimjogline-jog-removed = DIMJOGLINE: jog removed. .dimjogline-select-a-linear-or-aligned-dimension = DIMJOGLINE: selezionare una quota lineare o allineata. @@ -1978,15 +1978,15 @@ common = .dimspace-select-a-linear-or-aligned-dimension = DIMSPACE: selezionare una quota lineare o allineata. .dimspace-select-one-or-more-linear-or-aligned-dimensions = DIMSPACE: select one or more linear or aligned dimensions. .dimspace-spacing-value-cannot-be-negative = DIMSPACE: la spaziatura non può essere negativa. - .dimtedit-specify-angle-for-dimension-text = DIMTEDIT specifica l'angolo per il testo: - .dimtedit-specify-new-location-for-dimension-text-or-left-right-center-home-angle = DIMTEDIT specifica una nuova posizione per il testo o [Left/Right/Center/Home/Angle]: + .dimtedit-specify-angle-for-dimension-text = DIMTEDIT Specifica l'angolo per il testo: + .dimtedit-specify-new-location-for-dimension-text-or-left-right-center-home-angle = DIMTEDIT Specifica una nuova posizione per il testo o [Left/Right/Center/Home/Angle]: .dimtedit-select-a-dimension = DIMTEDIT: seleziona una quota. .divide-marker-s-placed = DIVIDE: __ocs_fmt_0__ marker(s) placed. .dof = DOF: __ocs_fmt_0__ .draworder-selection-reordered-relative-to-reference-objects = DRAWORDER: selection reordered relative to reference objects. .data-extraction = Estrazione dati .data-extraction-wizard = Autocomposizione per l'estrazione dati - .data-link-manager = Gstione link ai dati + .data-link-manager = Gestione link ai dati .data-extraction-2 = Estrazione dati .data-link = Link ai dati .data-link-name = Nome del link ai dati @@ -2006,7 +2006,7 @@ common = .edit-an-existing-data-extraction = Modifica una estrazione dati esistente .editing-weighted-or-tolerance-fitted-interpolation-data-is-not-supported = Editing weighted or tolerance-fitted interpolation data is not supported. .empty-table = Tabella vuota - .enable-pointer-input-f12 = Attiva input dinamico (F12) + .enable-pointer-input-f12 = Attiva input puntatore (F12) .enable-dimension-input-fields = Attiva campi di input sulle quote .enter-a-body-editing-option-shell-exit = Enter a body editing option [Shell/eXit]: .enter-a-solid-editing-option-body-exit = Enter a solid editing option [Body/eXit]: @@ -2050,7 +2050,7 @@ common = .insert-options = Opzioni inserimento .insert-table-after-saving-link = Inserisci tabella dopo aver salvato il link .insertion-behavior = Comportamento inserimento - .keep-table-updated-to-source-formatting = Aggiorna tabella con formatazione di origine + .keep-table-updated-to-source-formatting = Aggiorna tabella con formattazione di origine .knot = Knot .leader-enter-an-annotation-option-none-mtext = LEADER Enter an annotation option [None/Mtext]: .leader-enter-first-line-of-annotation-text-or-options = LEADER Enter first line of annotation text or : @@ -2186,7 +2186,7 @@ common = .sheet = Foglio .show-associativity = Show associativity .show-command-prompting-and-command-input-near-crosshairs = Show command prompting and command input near crosshairs - .show-count-column = Mostra conteggio colonne + .show-count-column = Mostra colonna conteggio .show-cycling-badge-when-objects-overlap = Show cycling badge when objects overlap .show-name-column = Show name column .show-values-and-parameter-names-on-constraint-markers = Show values and parameter names on constraint markers @@ -2340,7 +2340,7 @@ command = .keyboard-shortcuts = Scorciatoie da tastiera .layer-0-and-the-current-layer-can-t-be-deleted = Il layer "0" e il layer corrente non possono essere eliminati: saltati. .no-drawing-open-use-new-or-open-to-start-a-dra = Nessun disegno aperto. Utilizzare NEW o OPEN per iniziare un disegno. - .object-is-on-locked-layer-layer-unlock-the-lay = L'oggetto si trova su layer bloccato "__ocs_fmt_0__": sblocca il livello per modificarne gli attributi. + .object-is-on-locked-layer-layer-unlock-the-lay = L'oggetto si trova sul layer bloccato "__ocs_fmt_0__": sblocca il layer per modificarne gli attributi. .pan-ended = PAN è terminato. .polyline-broken-at-vertex = Polilinea spezzata al vertice. .rename-select-the-object-type-to-rename = RENAME Selezionare il tipo di oggetto da rinominare: @@ -3113,7 +3113,7 @@ layers = .isolated-n-object-s-unisolateobjects-to-restor = Oggetto(i) __ocs_fmt_0__ isolato(i). UNISOLATEOBJECTS da ripristinare. .isolation-ended-all-objects-shown = Isolamento terminato: tutti gli oggetti visualizzati. .laydel-layer-to-delete = Livello LAYDEL da eliminare: - .laydel-deleted-layer-layer-and-n-object-s = LAYDEL: livelloeliminato "__ocs_fmt_0__" e oggetto(i) __ocs_fmt_1__. + .laydel-deleted-layer-layer-and-n-object-s = LAYDEL: livello eliminato "__ocs_fmt_0__" e oggetto(i) __ocs_fmt_1__. .laydel-layer-0-cannot-be-deleted = LAYDEL: il livello "0" non può essere eliminato. .laydel-no-layer-named-name = LAYDEL: nessun livello denominato "__ocs_fmt_0__". .layer-already-exists = LAYER: '__ocs_fmt_0__' esiste già. From e3c0d456f2858fbef21c56923eb6e88075026523 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sat, 3 Oct 2026 14:59:30 +0300 Subject: [PATCH 13/43] fix(layer): keep auto-registered layer names verbatim; one sync helper ensure_layer had started trimming the name, so an entity on " A" got a table entry "A" it never resolves to. Register the name as given again and drop the unused return value. The five copies of the dirty-flag check become sync_registered_layers. Co-Authored-By: Claude Opus 5.5 --- src/app/layers.rs | 9 +++++++++ src/app/plugin_host.rs | 24 ++++-------------------- src/app/properties.rs | 6 +----- src/scene/entity.rs | 13 ++++++------- 4 files changed, 20 insertions(+), 32 deletions(-) diff --git a/src/app/layers.rs b/src/app/layers.rs index 7b64c3b26..07e7d8b66 100644 --- a/src/app/layers.rs +++ b/src/app/layers.rs @@ -68,6 +68,15 @@ impl OpenCADStudio { self.sync_ribbon_layers(); } + /// Pick up layers an entity edit registered on the fly (`ensure_layer`). + pub(super) fn sync_registered_layers(&mut self, tab: usize) { + if !std::mem::take(&mut self.tabs[tab].scene.layer_table_dirty) { + return; + } + self.tabs[tab].dirty = true; + self.refresh_layer_panel(); + } + pub(super) fn sync_ribbon_layers(&mut self) { let i = self.active_tab; // The Start (welcome) tab has no document — leave the layer and diff --git a/src/app/plugin_host.rs b/src/app/plugin_host.rs index 9f548eb26..6b1d737de 100644 --- a/src/app/plugin_host.rs +++ b/src/app/plugin_host.rs @@ -350,11 +350,7 @@ impl<'a> HostSession<'a> { return handle; } let handle = self.app.tabs[self.tab].scene.add_entity(entity); - if self.app.tabs[self.tab].scene.layer_table_dirty { - self.app.tabs[self.tab].scene.layer_table_dirty = false; - self.app.tabs[self.tab].dirty = true; - self.app.refresh_layer_panel(); - } + self.app.sync_registered_layers(self.tab); self.publish_document_view(); handle } @@ -367,11 +363,7 @@ impl<'a> HostSession<'a> { let _ = self.normalize_scripted_entity(None, entity); } let handles = self.app.tabs[self.tab].scene.add_entities(entities); - if self.app.tabs[self.tab].scene.layer_table_dirty { - self.app.tabs[self.tab].scene.layer_table_dirty = false; - self.app.tabs[self.tab].dirty = true; - self.app.refresh_layer_panel(); - } + self.app.sync_registered_layers(self.tab); self.publish_document_view(); handles } @@ -391,11 +383,7 @@ impl<'a> HostSession<'a> { EntityType::AttributeEntity(attribute) => self.replace_nested_attribute(attribute), entity => self.app.tabs[self.tab].scene.update_entity(entity), }; - if self.app.tabs[self.tab].scene.layer_table_dirty { - self.app.tabs[self.tab].scene.layer_table_dirty = false; - self.app.tabs[self.tab].dirty = true; - self.app.refresh_layer_panel(); - } + self.app.sync_registered_layers(self.tab); if ok { self.publish_document_view(); } @@ -454,11 +442,7 @@ impl<'a> HostSession<'a> { }; assert!(updated); } - if self.app.tabs[self.tab].scene.layer_table_dirty { - self.app.tabs[self.tab].scene.layer_table_dirty = false; - self.app.tabs[self.tab].dirty = true; - self.app.refresh_layer_panel(); - } + self.app.sync_registered_layers(self.tab); self.set_dirty(); self.publish_document_view(); Ok(()) diff --git a/src/app/properties.rs b/src/app/properties.rs index 8161a2a1b..aefb4131b 100644 --- a/src/app/properties.rs +++ b/src/app/properties.rs @@ -3491,11 +3491,7 @@ handles={handles_ms:.1} panel={:.1} ribbon={ribbon_ms:.1} tail={:.1} selected={} if tracks_dimension_chain { self.tabs[i].scene.last_created_dimension = new_handle; } - if self.tabs[i].scene.layer_table_dirty { - self.tabs[i].scene.layer_table_dirty = false; - self.tabs[i].dirty = true; - self.refresh_layer_panel(); - } + self.sync_registered_layers(i); new_handle } } diff --git a/src/scene/entity.rs b/src/scene/entity.rs index de7700ca8..9c22246bb 100644 --- a/src/scene/entity.rs +++ b/src/scene/entity.rs @@ -143,17 +143,16 @@ impl Scene { /// layer 0. Auto-registering keeps it on its own layer (#252). Names are /// registered verbatim so the writer's (case-insensitive) lookup matches; /// the always-present default layer "0" and empty names are no-ops. - pub fn ensure_layer(&mut self, name: &str) -> bool { - let trimmed = name.trim(); - if trimmed.is_empty() || trimmed == "0" || self.document.layers.contains(trimmed) { - return false; + /// Flags `layer_table_dirty` so the app refreshes its layer lists. + pub fn ensure_layer(&mut self, name: &str) { + if name.trim().is_empty() || self.document.layers.contains(name) { + return; } - let mut layer = codec::tables::Layer::new(trimmed); + let mut layer = codec::tables::Layer::new(name); layer.handle = self.document.allocate_handle(); let _ = self.document.layers.add(layer); - self.invalidate_layer_dependencies(&[trimmed.to_string()]); + self.invalidate_layer_dependencies(&[name.to_string()]); self.layer_table_dirty = true; - true } pub(crate) fn ensure_app_id(&mut self, name: &str) { From ba8aed4fada493c11c94286189423556c7505f95 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sat, 3 Oct 2026 15:01:45 +0300 Subject: [PATCH 14/43] fix(dynmode): one toggle keeps DYNMODE's sign in step F12, the drafting dialog and restored settings each re-derived DYNMODE and lost the mode on the way: F12 off set 0, so on came back as 3 even after DYNMODE 1. set_dyn_input now makes off negative (temporarily off) and on restore the stored mode, and the bare query prints the stored value. Co-Authored-By: Claude Opus 5.5 --- src/app/commands/styleprops.rs | 15 ++++----------- src/app/drafting_settings.rs | 19 +++++++++++++------ src/app/update/file.rs | 4 ++-- src/app/update/mod.rs | 7 +------ 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/app/commands/styleprops.rs b/src/app/commands/styleprops.rs index 8051eed84..c669354e8 100644 --- a/src/app/commands/styleprops.rs +++ b/src/app/commands/styleprops.rs @@ -1713,14 +1713,7 @@ impl OpenCADStudio { } _ => Err("SETVAR: integer from -3 to 3 required.".into()), }, - None => { - let mode = if self.dyn_input { - if self.dyn_mode > 0 { self.dyn_mode } else { 3 } - } else { - if self.dyn_mode <= 0 { self.dyn_mode } else { 0 } - }; - Ok((format!("DYNMODE = {mode}"), false)) - } + None => Ok((format!("DYNMODE = {}", self.dyn_mode), false)), }, "ZOOMWHEEL" => match &value { Some(v) => match parse_bool(v) { @@ -3838,14 +3831,14 @@ mod tests { assert_eq!(app.dyn_mode, 1); assert!(app.dyn_input); - // F12 / Message::ToggleDynInput synchronization + // F12 turns it off temporarily (negative) and restores the mode. let _ = app.update(crate::app::Message::ToggleDynInput); assert!(!app.dyn_input); - assert_eq!(app.dyn_mode, 0); + assert_eq!(app.dyn_mode, -1); let _ = app.update(crate::app::Message::ToggleDynInput); assert!(app.dyn_input); - assert_eq!(app.dyn_mode, 3); + assert_eq!(app.dyn_mode, 1); } } diff --git a/src/app/drafting_settings.rs b/src/app/drafting_settings.rs index 2b8b7369f..058fff8ab 100644 --- a/src/app/drafting_settings.rs +++ b/src/app/drafting_settings.rs @@ -44,6 +44,18 @@ impl DraftingSettingsState { } impl OpenCADStudio { + /// Turn Dynamic Input on or off with DYNMODE in step: off keeps the mode + /// negative (temporarily off), on restores it, or 3 when there was none. + pub(in crate::app) fn set_dyn_input(&mut self, on: bool) { + self.dyn_input = on; + let mode = self.dyn_mode.abs(); + self.dyn_mode = match (on, mode) { + (true, 0) => 3, + (true, mode) => mode, + (false, mode) => -mode, + }; + } + pub(super) fn drafting_settings_dirty(&self) -> bool { match (&self.drafting_settings_state, &self.drafting_settings_saved) { (Some(curr), Some(saved)) => curr.is_dirty(saved), @@ -100,12 +112,7 @@ impl OpenCADStudio { self.snapper.enabled = state.snap_modes.clone(); self.snapper.snap3d_enabled = state.osnap3d_on; self.snapper.enabled3d = state.snap3d_modes.clone(); - self.dyn_input = state.dyn_input_on; - if self.dyn_input && self.dyn_mode <= 0 { - self.dyn_mode = 3; - } else if !self.dyn_input && self.dyn_mode > 0 { - self.dyn_mode = 0; - } + self.set_dyn_input(state.dyn_input_on); self.quick_properties = state.quick_props_on; self.selection_cycling = state.selection_cycling_on; self.sync_vport_display(self.active_tab); diff --git a/src/app/update/file.rs b/src/app/update/file.rs index 1aaa47170..167e39c7e 100644 --- a/src/app/update/file.rs +++ b/src/app/update/file.rs @@ -750,8 +750,8 @@ impl OpenCADStudio { /// Apply restored preferences to live state. pub(in crate::app) fn apply_settings(&mut self, s: &crate::app::settings::UserSettings) { - self.dyn_input = s.dyn_input; - self.dyn_mode = if s.dyn_mode != 0 { s.dyn_mode } else if s.dyn_input { 3 } else { 0 }; + self.dyn_mode = s.dyn_mode; + self.set_dyn_input(s.dyn_input); self.polar_mode = s.polar; self.polar_increment_deg = s.polar_increment_deg; self.zoom_wheel_reversed = s.zoom_wheel_reversed; diff --git a/src/app/update/mod.rs b/src/app/update/mod.rs index c6680d3ad..70c160a1b 100644 --- a/src/app/update/mod.rs +++ b/src/app/update/mod.rs @@ -4196,12 +4196,7 @@ impl OpenCADStudio { Task::none() } Message::ToggleDynInput => { - self.dyn_input ^= true; - if self.dyn_input && self.dyn_mode <= 0 { - self.dyn_mode = 3; - } else if !self.dyn_input && self.dyn_mode > 0 { - self.dyn_mode = 0; - } + self.set_dyn_input(!self.dyn_input); Task::none() } Message::ToggleViewCube => { From 88d6a5ec0874fa7a2e6769dec0586b5c507c5553 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sat, 3 Oct 2026 15:03:20 +0300 Subject: [PATCH 15/43] fix(ribbon): light the button for prefixed commands too; drop PR screenshots _LINE / .LINE reached show_command with the prefix and matched nothing; strip it the way the Start-tab gate already does. The before/after screenshots only illustrate the PR and stay on its branch. Co-Authored-By: Claude Opus 5.5 --- .../ribbon-highlight/after-dimbreak.png | Bin 39920 -> 0 bytes .../ribbon-highlight/after-offset.png | Bin 39706 -> 0 bytes .../ribbon-highlight/after-xline.png | Bin 39783 -> 0 bytes .../ribbon-highlight/before-dimbreak.png | Bin 39400 -> 0 bytes .../ribbon-highlight/before-offset.png | Bin 39400 -> 0 bytes .../ribbon-highlight/before-xline.png | Bin 39400 -> 0 bytes src/app/commands/mod.rs | 3 ++- 7 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 docs/screenshots/ribbon-highlight/after-dimbreak.png delete mode 100644 docs/screenshots/ribbon-highlight/after-offset.png delete mode 100644 docs/screenshots/ribbon-highlight/after-xline.png delete mode 100644 docs/screenshots/ribbon-highlight/before-dimbreak.png delete mode 100644 docs/screenshots/ribbon-highlight/before-offset.png delete mode 100644 docs/screenshots/ribbon-highlight/before-xline.png diff --git a/docs/screenshots/ribbon-highlight/after-dimbreak.png b/docs/screenshots/ribbon-highlight/after-dimbreak.png deleted file mode 100644 index a6538aa969522420abeb379b1f7f4f912b293d3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39920 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 @S@69>* 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

jULr3+TKXplk1e+7o(1=b&NH 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 UxZQ%R9y(xIncJE*n0O`q7b)4)YybcN diff --git a/docs/screenshots/ribbon-highlight/after-xline.png b/docs/screenshots/ribbon-highlight/after-xline.png deleted file mode 100644 index e0edc2e7a6f27e1a699a9f3f556830377ac5a0ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39783 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%0Am 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 ZP@4ZOt*DVhRN)v9=Pc~ZiDuq${{o1;6Da@y diff --git a/docs/screenshots/ribbon-highlight/before-dimbreak.png b/docs/screenshots/ribbon-highlight/before-dimbreak.png deleted file mode 100644 index 195fa916bba4e8aacb3cbf1cf4647abfca4838c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39400 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

P;PD-+pp#$Ww~8L4%eNM`i7eg9AI(}=`zwPqrb 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

Sy>eXs!gVL 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 diff --git a/docs/screenshots/ribbon-highlight/before-offset.png b/docs/screenshots/ribbon-highlight/before-offset.png deleted file mode 100644 index 195fa916bba4e8aacb3cbf1cf4647abfca4838c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39400 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

P;PD-+pp#$Ww~8L4%eNM`i7eg9AI(}=`zwPqrb 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

Sy>eXs!gVL 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 diff --git a/docs/screenshots/ribbon-highlight/before-xline.png b/docs/screenshots/ribbon-highlight/before-xline.png deleted file mode 100644 index 195fa916bba4e8aacb3cbf1cf4647abfca4838c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39400 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

P;PD-+pp#$Ww~8L4%eNM`i7eg9AI(}=`zwPqrb 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

Sy>eXs!gVL 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 diff --git a/src/app/commands/mod.rs b/src/app/commands/mod.rs index 43ea7742b..b17c9eee6 100644 --- a/src/app/commands/mod.rs +++ b/src/app/commands/mod.rs @@ -230,7 +230,8 @@ impl OpenCADStudio { // started (typed, alias, shortcut, Repeat), so the user sees where it // lives. A transparent command returned above and leaves the running // command's highlight alone. - self.ribbon.show_command(cmd); + self.ribbon + .show_command(strip_command_prefixes(cmd).unwrap_or(cmd)); if !self.suppress_plugin_dispatch && crate::plugin::try_dispatch(self, i, cmd) { // try_dispatch returns true for both finished commands and interactive From d2a4e3f8e74cc47d416e1546d78fc75c5f25f2c2 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sat, 3 Oct 2026 17:52:05 +0300 Subject: [PATCH 16/43] docs(ribbon): restore the #1595 screenshots docs/screenshots is where PR before/after shots live; 88d6a5ec dropped these by mistake. Co-Authored-By: Claude Opus 5.5 --- .../ribbon-highlight/after-dimbreak.png | Bin 0 -> 39920 bytes .../ribbon-highlight/after-offset.png | Bin 0 -> 39706 bytes .../ribbon-highlight/after-xline.png | Bin 0 -> 39783 bytes .../ribbon-highlight/before-dimbreak.png | Bin 0 -> 39400 bytes .../ribbon-highlight/before-offset.png | Bin 0 -> 39400 bytes .../ribbon-highlight/before-xline.png | Bin 0 -> 39400 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/screenshots/ribbon-highlight/after-dimbreak.png create mode 100644 docs/screenshots/ribbon-highlight/after-offset.png create mode 100644 docs/screenshots/ribbon-highlight/after-xline.png create mode 100644 docs/screenshots/ribbon-highlight/before-dimbreak.png create mode 100644 docs/screenshots/ribbon-highlight/before-offset.png create mode 100644 docs/screenshots/ribbon-highlight/before-xline.png diff --git a/docs/screenshots/ribbon-highlight/after-dimbreak.png b/docs/screenshots/ribbon-highlight/after-dimbreak.png new file mode 100644 index 0000000000000000000000000000000000000000..a6538aa969522420abeb379b1f7f4f912b293d3d GIT binary patch literal 39920 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 @S@69>* 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

jULr3+TKXplk1e+7o(1=b&NH z?mMc`A*d@*NCTM`UnI`~+OV1afu`P|OVC!s9eP#4Xp`ZDy@H=5`KLjiCC3K;Z+fQb zHH+@+>h^y>XlB!9*j830Hf}C_#_c|xZqnZOC895Cz-d=i6^(+$4PS+CIZ33?h3A!; zpU2Y*jp6Q2_VUU&ZLa`znV)6Jq5@}EFFJ}I9S>47)NA(4?b&BQoPjE1Cn~)#qjO%5 zx^Wk$=0S90%H8`KsxA&i!AOL3y2XWG&Xw!87>6;^U1G0Xe6v~kHj_;KFlM_MeMWYa zu;B~!-=7u>DIR!4!%oXeBCyk)o5Sxa5=-yXk}>pv!@^Ral@MdNqrj_EW`B?z$bo>E zy&}R2l1aHLQ@2jxWaEjOb1wZn>0zsdLW^8CprJF~bfw`+POJF$B%NZhN)VmPu%xsm zCNV^rut(Y~pChfM?ZqAM?E(mvx zT4tSiTw7(SU{90~=-32UY{)f8wi8IJ_gRz7=SE+;r4%F@SCpoweiRhmS<3f^{trspY z0YARyIRqO@vpm;{-D&~_7I{2TvzU53Oaa;0rdxaeFZYaad5$Nj)33x*Qr~i)(Q%h$ zxVEA7op0xVcr20~9@G#VAO0<^1IE=~!R6WsHNNddCKlYl$oP<_X^JJx*)ts~E(jI4 zgayV|Aa^BgZ~PV9s|Lw>MR#J+%CTHWx_?XjbjJ-1->BYrCwzuhEm`wyjRb4e;uLQ> zeqE^yj`F33xpI1$^AaL+}!_wDXw2*6oe4%>Rs5ZHOYS+Y2GZtGSRbA{vdJZ ztOxdl4=ix_1?v@f;dQ{LE8xV0uYZaksu)mqxr^_@i$e%)cXl%L8Pb{>^RF=7U&4HP z0+E#35c0n2@xKCQ{SLfIRe#%Ti=Q5p+iz#C5ye~d;Z&D6e69&ihZ@MENGoH*w*qBNWRqd;XhxD983(p9uZ7&2X+~1*ITQ7VS^mJ`IX`#Y>s4dk94~ zJLGhG>JW)lvC4z3GmjUR(#qLi>MJUQ5eZip&0X!Q@vTzKeBOE4P zC5>*B7GW7bAKT?k=UO~}9V=uVCsSn2PUj<_y_1#d`(*XR@0T9t4XSyV{c01Ve#2K8 zI0zAXF{~Qo6o2(#f#GeqJ|N&nUiheSMi?~Z{=R+^>o?qBupwCGuh8j zB!ooKho-ULGcF4+*aoHFo>U&+LHmC>xqf&9?>@WwQ(sRYG z>jX&gQbY4b9P$qqA+GhFkL20&Q*aGIf2+crAAmji@;lK66y|U3KIx5i$T&MgQxF-q8h%^ZOpiF^wMl8^nh^?@>;hvHg zOhdv__@@-noqI{zEjJu@tU!oHHtH_B;PIA_NJ9loJB8MCW(JLVV7bv7aS+uwq8Q?r zwV(G>Yyq8@2mJzuQI2nyReAc&lAyaaAwPCosM^c!Ss-MJ_d$j$;WLpgfufbYpbiw5 zGk;E3^A+zR`g_Z|2r*k~=MamcUQXe7s_`lEt`w~lmSu#!Lb~zax{Pi1?ejl&h2T$hu zW8biS;69GUzC{p@EyC1C=dBkrxkR`p+rbtUf=YRfg|Im1+GRUTRj8jWbf$jf1#k;p zfLTmavud z2biEgn$q_Jz>CUBM~Mx9punA_$;__23A*_X(CGXwjkgT!zRr@A#X;geqSY^2kmS9U zVDxJoUouBC-TDeAOFOjbA@OG8;R~`MVff5mJF>YvqdR#}4l9BGlhyYU&v*L79z77f zds($gk=?3xKa_ZO7TP%JcKpe79PIb{nDyQ~jbXW1$>~c`%l;F+-w1=GbfcU{CCS2Q z&&oM?B_Ua*c#-QxZrkiW*3yIh8x_VsNR?i;CfS*XgzWxWxpZP3^0K(}+HN=uuZv01 z*S_1ZF&6n4^{9tqqx1@DZXm&A?!ocG25qTgE97|Vf;K>8lYn5%@cW- z?PV(nBMigxoRzvVkp$GXJXaL$9)dE2zlV)eRu@#>6KEAQGdzQ`x#*@Z+|e)zBsmgC zAZ8=jL3V(L^n=r?1HwBhl0R0q95YZQ$NmBe3Afq3F7XWUz{{MH3nC!|RrC{6Mx@i; zQqd4W@ZqIo(eGyQP;PE3j`6QH9O1miR8$e@BQ80Mz(^YX4ZA;F#Z^3C0aN6hU9MT4 zYcSm6cEYfVE6#ohTDQ{~U_BLvt`4$uXl7pi}Z!Z}<^3e}Q6 z7cqH4M!iWX@kln68E>eSzHLlC^KUGw=B20h?$Q@|35tb&6T^UsxtJ}@d%~o8z4ae!8H)CbE8Y?o zGOg5S!^9Z)uSyV4CT$7RQ8j~(NwS+9?+fsXOY4;_R|9z6?W$g$xr_5HBu8AoiSb|t znJ9~}I4xSalap%)ArsW5vp6WvmBnV2ZcI-sZmK(;neWvv3@5{E zn0C$zP#MCM-u;$rfk>O=@3QLwk;(*y-&}s^gaeCH2)V_p1>Cax38fTC@9cxe{n za5EW;X{}sI*p?;P2kt(J5tpr}TPg9*tkc3qg@XHDZ9Xw?q51L+hx9?ym|M_ugEhn0 zwAAAf>dLv^Vhk?ka}_6_tegi_^j_U$rmyv-!8kJ42@4Jc5@n6}<)bY1?_zrY;PqD5 zG;-JhcJnv<T9A9eihhIi2XuCnh=%&$ z@PUt2rLG^Ep>NEo=e?w3s?A@_B#a<6xGgZzMueMyQ=li9mkAPdl}x(R38J;~mmwh? zpyhuT0m=`Vhsdo+*nYtNK;6(6mfNz+<@400TEcA;0<9aXAPnJ3;j?jmE{mcs9d-EO zq~eojk>~Txi1Z9~uZ(J6O>EljXvNmjh&n+ns&6=5c*3Yom`eoPkdA!;*uRvK7HfE8 zx+5@ztL=c0BEEpYMYbncE*UMdfid^1x}InWS)1?ks8Y+T{P-nzab=_Wyd)Z7KqsG* zX~?}v*6Lyk9JE?7wA;(&pvrf)AzMSw)g*#L&DK~&*TDhPWoK8EZejlk9rvsiQ$}^O zE68sQv`4^v6<_6}c~7)=0F?kQ76yES`Kj!CQ)n%-T(hls`1t>2SB z^Ym>;v`|cuSQTUPCHzduTC%;PJumo9=)Ov**7k^lqkeX{7{H>uy(gQf|06G4fbVAK zI%ZVEQM`lWvmP|vNGv0k#hm9^BBx^sB@I~B&8+>3NWsOE7%P1s|3g69^7$kuPV*IF zU=y$7FN~O-h+W(5DHw5aVFdd#fUa|M>us7k-ji!?j0&5e0Db{~0Anv!Ccn0g0)vj9 zXMY+`!4t|uWF6}}>MLEEh3)%2VpK*>+eiH^6pdVDk5_EHUl5LyVD=L6t{c>A=BH(O zV|-M(?d>{ff{8u@WX={E3hr|cC@(B06zHMaz%SzYx+e*+251BF^j~)Ho(Rf$%w&YR|H~tNXJQBs5}* z#F+g_cFq@y%ip6nKcr#oXc1O!iiiQTY~7GV$jhIW#pwyRPVsi@PeKal<}t4s@UM@z z_iH@z+Q-^_lboIuMhL@J<$^Y(TKjx-K;AbmHGY7DmZ60}^sVPlM7w=d8_~4zBQL@o z_WYL1Ba%o>j=(D=W%W`|TP<@oZ#{kw;gU}UiRi+rs`&wSq6Q>2*M;+}vI@ULoGk$@mQ)Dd6o%K}vJ0PfHvx+xlC3BCf z;BO}7pF}#qBkMJW|Ffdi^(a=7Y?jRX1Wi(o>M{~T;j`WlZK|;dR}T4x?}b3choHYd zHEj|TnLxO=zv*y{$+z(D($ST;s0EpjB$nQ*WSy9XelVZ&Ln00iulv>SM#0xFd+EoS zW7057=1_*gUB^ro8-PpE`L)}{!V>qv-~&#Vaj_9=A)(U2-Hk@;H2SO_42r9G)DJ)W z)qDbA#nQ68BJ2q8Ywn`bMqcvI7Mf`3{VOteqVd|3=CqIWuD3l>GQv}>oSB+enpR(( zW(@W5NpJfSuXyi@Po69!py@3+n5fo$ecLIA-H!Ii*ne6c`%eG;Rv+caf9;GuFVRdW z5bI~lkQuV;O&{l?j&W@sdG-)#cbMWLK8Nev;jCEI@BvD3#r2vlxJ8Vba3&Kgi^$e_ zTn#ap7v)i$VEvL^AelTQPb6N%`Rv>M$;96KdE5Poc4@<7*CR?V1<4`REFNZt`B3Xd zfE4O_-fUKpluhi_D$#COaO*%)q|Oj_y8J$%@iR?Cf^I(U+2$gNWyXxK*k2@6xj9x4|21QC2aO3#z_nvhXr8 z96TF8Sqn%(R}UmZa%pE`o-t{*9nF?SJV-;7@ZTWIm+RTd1F;0ZUPqmBvwe9gd(xQMbFiGoe++(W7BbsLkEg{#8dt1szG6VP&&NJ>i1qGR`fyu!;Z7qaxIr@)P} zxX2WES{Cb^$?{o{B5p;QG5<3{?psJpli#!0`R1%r6)h69{nUr0i0lSe0i-03U%}Ne z9ikP@2k>S%R;eBgAgS6pxW??#{WQ2~70xEtFW`rIb zR~?u4Ei3MpC0N!s(D}L2 zC91DPC`k_S3r`a96-l~p<)nB zURbhi0jI+v+isQW}Sk&pf74IclU+jbWH^dfP8cm{EO35@gwYsvr@G(IrGogn>KB1 zKe}I2*?xxGe2_PKB!eg!K~GsxSPk56Hg3N&6{3Es6sTo!V(JT3OYFE*k|(#MalfX> z>WI0@uP|9X#;rd9$=OWr<`70R5)2!cARsZ_|-J}%f*t5x!xVlLM(~6$(Mq`SD4tPoI5olhM_CB53Vv2>l<~7 z!(X8{un-ruP{CZnVC>Hotm$9Vy_{Ix1)HRM&WE@QN zU4O#S7J7>A;(7C+_)^M6LL1GwI@gNuR17jETgMW%pKiD{k1pkg1v5KPukZ#02WAsrRqc65Z*+bh0T)Y#g*M4%_@gk(?mst~c&>43VM+Q@&s}}hhRfYM z*fV_SAP8l0!3aeiH$ZAo)e{VN@%g?GE0gkw{(FrBVHr-FT~HfVFE1;XkmWA!Vu1H- z{FoFpSa=jI#1Z2wqXu=8lK;SL;lDTmPVntPr-Nr+IH4O{xX9%%KnhgW|^)FRzGvZDd zwE1I2dChkQ=f?YxSv6wl;6v&u7tdw3F8r?{lS$e$&-(V{&`GD zh5+n8DP^mHl=h0a&4JD`xWp6viTgwl=jpd2O+?(*gu$ME;27;tq1vVfBb`2u?VD<1 zRtF<<${)A|3u~y7@4=#ll;o1VT0XU_ZDR)B zKO*75QQn+uL}AbD^W^C;p|Oa|2`J+ej7iDC4cR;OsDWutziesmNV&Vs$) zU++nky5BTZ9Sar4=lSN`Ejq$o+soF1GdOe|BSOLZCGI6-jG=mf5_E zg!r{Xtr>1(ItZmT5i5#td0?V`=}#DN&G}Kj^d@MY^fon90n3Y`eda@mw2crP2w6}u zKeBogZZvKRt5di(8?A@B4D&(>2{nA$`}m4NO+v)#Fst_HzuJ(cGT zn&L~mi(aF6-9_81xEuK>z!ljM9wTAr;{u`S2!mPu2Y<3ORVIF>@YTjpDknKB@EG}t>UHST&3h% z;e2|j=$-j7;EbVkV>8h|1?A_+A^ffY5K93c_`>XS8KK8*F(hF}^6lHV;H^QW{w-R< z(OV@4@n({zz>UB|Y-H^KbPha8QsEmNnVq17ub??T$PlhktYg*ni7MIsdTn<9(PUq@ujf=_GM-_HO?7*oGGYTMo`dm2Jcm3zbnP}F&WbSb zUReUJ87fa@zmFSd(uq29 zlZ?-${Ji7YrmljEZ}R0IMF+;rHf$(WCDaVE@x#XjH!kJxwF#%cPI3{x>>(zsK@fUj zjtNU>|HAkMCz()Am;U{Rf3U_qn4N)S24??6(dP<_9j}HC7HUXksL;wf0)*J-<

7 zJqMB}*W{2`)p)77dF!+gnH7vb67Ry$>RLFz%#Z)(Or4#@6}5PBwr6sk5f_Y=dNnbL zooDFgX0S}9J`q#s$&%jvL$=Yz+cZ->+>qHX7TuZ8tU=ClgO>+je8yNs~0T)!4QhJ9+2#f1kDH)2#V+-*c^N z?|tm!eDpn1EA%(#=9GbgJ;_JE@$`SFGR#om;K{oRn92Bq@P~S(7Eb9s76jhWRr0T; zt}YO=={wn73kz+4w%~l5oNev%rLXU1g!4EvwpJs0PlGFc?#itH+;~^M-EPaye09Oc zU9%jz=5eEaP1jpfToKnG^?RR@h6L=CI^KN?K{!S{5!B$ZYozkI>4=hFtD26+wh>=o z-fn4~y2*$cCW#^KS~-lp1b(*@Adcya&!=#Xjv-gA9OIGYOkBc^vv!w`tK=VdDRgKo zyv=TP&K-CW(TO7#-U5)`V`%hx79UWa_K%`M=hjl)4-ihaX~*;Wlb9bJjQ&}hETnEc zy?bi1xeWhk!!tCnmcbi8(N_9zoE)xio(wh2jZ1pMFMA^M5bjYZ4807Q5!OkvA1MzY zitHUVb|)c9P(@Xc&>4G_{3;eB_A0W_vKl;>(|wed9>PerO`q3GUbvQ;K^qKuA1I*K zoizSu)NKsI>Q4BIqC`>MAB?}ScEdSz8#QTD5X5%*=hZu^##iPJ|B*&XMQuysy6Orq zGA|DDH+M>%@?_CmDV>7naT(|*OPkQ)qNItvLGpz@S-dNRZQ!dhJ*I&QoesNVMcX7Y zp2Ru7osXw~L;c>b1M}toOZWX=Pt>Mn(DYZYIrU>IsjP`~Wkh!(fc!Y*C+FwTSFM`i zEB&JHsW8p!*_Y~WL9Ao!;Fqm7C)!i|67=q7iEtwty(DKyqOj~r99jC| zs&IM}YqaSnyFn8g+a7^YM;j%*{p57(H(}W_XM`7^b_B?R;JL0QfjScQWHgi<8l)|O z9j2>sIH8eR_NCiT4NjI^{k_F(1~7(E>o`!TarTR)Zp0M4Ib5TC-}W%1F`mI)hVWM^ zQncMt{{*(p>Hlvw<3e9JK)r(JgvI3}Mj9dL$hTOai-sv=apB(5IO>aWI0`@uCd$Wn z#dyRJ4u|Djo%AK%*EE`{=;K%|f-7m;sF&l}pLuuI>t1HOaMRRX{TjaT0xiHt*N7U8 zLc`I-8VSu73+e=LSl0cjd~Y{}{~eo))&P|9w;gmj6C=plt0c5uy>0)Q?%Q_$V5Cy= zsP_poSGsNEx2Y)3_pl)2)5u(&g@A{_~lASmhu@Ro#HH8?SoeQ8s4;qt=D%C!kF8coY}&Yl5j zEP${*TMp0vjMMv8V8}ubt(kL*MdWItmV_$U-9J+C?7oDHwLU#pxImBk2zvJ>pt#@# z&q()VaFQhX^!^6gHLgomBb||}&KNB_;)o81PR$Gp;E5Vr8WZSv{FBII2P|1($#4YL zBvwRzBXC-cyN_^vv*t7BHJK* zHnelB3A5{nevQRB(a+zd2>Jc7bs!Tc3&c^ZKs-Q;?ITS%S(eagq0FhF*k)$)c zyf9L9Dcl_BDcTBf9S|@{La@2zR^5m@0Z5}x_PIcqjK7V~ zQ+1dV2rXqg^XlsIX?$d8GhF+3!W%nyiW^j8$)00L)P1l(z4o+r&ewftDoMVozqXsO zNfHo`7|0-dFWi17U0vO0Z+xr`>x1W(JQSThq*zM5`(IzP>67Nv>#U+owO#a^6CtjZ zHvv_U7N2wU6ct@tLCf8wA^_g4lHSwVZRFNd;fXkbMUh zbR>%44eBMD-9KSGgKbMMcz@~@$Q-J3?&IgJQTtEe&d*!%{NEuFNz$BiXD-_GtAkz= z!R>d&(TS+lj|C1VcGz$XD}~Q1f#5*OM;1%RJ>v)Cq3^OhNU*{&eS>@!h%$v5DYK+I zz_jI}cp+;xCDm95l@hVTw})wS)OgfKF|1vElW9S2Fn7cVvAePzL>Uto-zjz z{Eb4lqvZOr1`WJ49|0a@f0I*qr+-1-PHq=`^OSkak|rV)HYkZ|WTj(dR&|}SVn@MZ z?9@(Fme*~yUwVhSo3ydpkG~s1U5}<3?W#ejnjyWKgB#RQ{D6Z}yb=y~Xe^$eKHL^6 zOXQ)HZAs+8#R2Gdz8;`gu660oa$M3yGPHxh>#3jpZUIKUxbcSkG5d_I8-<|37b)ZM zK>|Sn>6_Bmz0%RONbgl;0{f`)E9}|@Li39LWWcr>vGoRhj$~G zZ5!qAHUsaSXK#IlQz@xEJYN$ay~k2rl7Bn#Ym(K}nWBIDC$;^^vEH}?==Px`8T?Q9 zIartl(V2@IHXcS0LuLQ~hCX&#K@iYBR*25O;AYtrlzfymyxu0=Qf|49KaMqMKLmFw zVU8g9d(^2w09n)~*69jciYbv!mI4Rn3U}mh9)*4vDmW5#synblj2)XEYm^h5r|c-g z=}fJIeM>p8QH)lZ2+Y`O?A!1b*H0xF<7L7^qP)V-rrEDYk-!)H;g|Y|p#uc>$JO`< zn}G;&GRO$DSr*>h4OmS@4GIkPReWL24!YknKP%HP{qwaIpODZx#Hr5Obarj`%`2>4 zeCd2&u3bUH>5R8U!W#`$)oQ3aJ7sU0>Ub>S^1bHxs^8YqYp=YkrIR-R95#f)I3Z7< z7O}m9vbd6)EY;iiswK7)q?ij0$+zAvWBn56r>4$Av_ovn^TstL*RxZ9mE*{d+qiFy zaQdxIhqCAxUUyU6Q-UVbD`C6Eoylzyr-;SLv9(T!66jKVPkqqlBy|a)lPdSf9Y;PO zdgMo*|0PkL!97+L`Q9us^crU^O{JigVO>y$^TOPkb&Qj2FN}>P6kjH%`8-0U&W(bG z;TvPD&eNYUryvpgY{#}UO&@V6Zz1KwD|Z-Qq?Q;ap>HEECgi(%I}|8pai+y?n(``x z?wXqaT8o@AozCN)R{3lA9pcAY#vZWGDxscE3lVA;5r{vUkaM=E>!?Wigu^lYx~`rDqZc2+dcD;hx9=kTnLQe-8MUzfsgaFzKq3}QjznVSWwQ7k z8-yXJK1KGZ+(~ke;a@1vwk*F@Ju$l~~2 z;dUf@av>=U+Dq-WILK`h74#KvCvF7DTk+gREY=?JBIvj(??bc$%EOL7LN^e+JH3W< zt20cg&${ER6}ImpbM5U^9X0@_#q;7Oe{s1Qe%+qO+iY~8R2;QmmwOFy$FgtzVy9q6x|e6TMMKZL{`D;uKYR1Oco?aQ0a8L#6_^cC4^a$}NRDtFG;?9(pZQ4D4Ydo1`&DWR*cJ zoM|$j;-i)W-wmA=ISRNONQ_j?4w`>Uxf_qi7-vrHDf$tp?Z%LB6;LFFK};UqC?1m* zAprmCbQm87`pByzmP|R)Kw(I<_i|OnB4~{nDi?RQqthYh=m)p)=2`GGV{26U?Ga!K z-)N0<#DzO!-T>Tmmw_-PayT-PVd_eXf^qWpU1D>g0IuJY3tX!iRF|q?S8ysujW458 zVG>jmn0o{|Lq6i}4qq&8KThLe6mj#&|46tIwukbDI}W(-NR+XW#rZ{V__T5X{j{2% zfOA2WbRSI06#?7!WIe&8**{07H2*{}ZqM+M1e&fd`dxBkFbb`gQ62v^f61y`WIJqP z%qudUmltR~y+e|E?Z3ZCw|u#%v(W>_U3E6f^!+_{_Ud05tNa%`d)s#D<^Q&CeNK># zu5@I*I*hIE{FayH)Q+k{RQF!w>B|D^{b8Nu7HP5-V11Cdty>$)PE~Pv%dfHEpqi^- zf4Y-_B^kTQvL#`DSA_zI$qtnmG7b(gVk*q@M8Zcg0c(S0?PFb$N$^fUdZ!G43K@%WVKLvRFx~k%$~;8yydO!H7@@fHvh>0y{W9R zI&XiR*3LR8Rd4WrjjRwy7UKxfJyn$DRLn#1cdwKPgo$mD#;fJvB1Ed`br}-6VpqOC z3Txe@X-(Y$S1@0qO5`|&?8w9V`u893^g*M|GVkjy?kc>@-@ASN-BObzf2PdUw5#iMNsIVp-RUJ(TO`P2?%-e{nY5( zXG|s3uAK4Q>BH0D*y@Rh?m{6cX z^U$_9I{U+x$=8{MU%hBB4F&5T(-e?fhA4sv1Vjb?JQj!3WKmQIX{2ySLh&`> z5mxE>!|W8rU**jp)U@_7rq))VpwlwAWg&O&&&wUmgD)fcQHAOIh4U+w2j4nIjy9>1 zbTn>o+8DO)r$M>+;qKo6*fJaJ&AK9ux8G*lnRi?KdLI>?L_KMf-3sf-UHl~dv}kuU zCQVGHs$08LbQ|}DKbgLgqPV&&bDPY%1S}MU3^~ZQS2x~;zCS)MvfROwSBd)dR#i-3 zohEh;WpbORl^#O=_PvG+on})UuUo6xn1^B0^n&+q0 z6=NuDu#S&S4Vy;c!WLakEIXFJhUn^gaR95a={V)v5Orc>}uQauiG;1#NAI zh1kea0~r{a<|UI|UR(T`uPcI8DT@E5ARw)BxLul#TU~B#i~8+C7;PIbQ<*Q4(gX9j zmkdiAuXv>WvN#`V?0s!yOn->M2`}A>zmN6#Tf6O0wav8le(od3SO#saWuDE{aUY$(njZ_6 zjs?e$6gk-w`R9Nmz=Ax+(V&}@>wDA0Sbl6st|Zr0*u4mUh%q|9QMu`QY29tqIF2CO zL7C0s^+GhR5;1OiA44@jg?F~FHBFEj-bshQ=kBN!VLexe2;BJNIB46ISso!hujeR( zl)%elD-kkwMq&yl21iYBoE;P3dcK4Uv1~rEHoU7O^ioVZ>Nq*Ks*7;3)g+B>J~@}x z;udQ|R5pQPw|GCGdoOG7C2yV9?Z^Hzg6?VVTZG5y+8%M%H* z#N?oUVw<)8BCc`o=4aC(D`Cy0A2naRPo}VI+xylhcPw(6($X07yFbPh^QjjS?e{7A zBqxMLzZ(TUUiTN?kE6~@h0Nz$;a^g-zNFN63n8&e_>JRL0S9n4=W!;RzURKy!oGUp z!d~M0{J1FbWbotoz;xzd-|2+Nl!!uIN1+DEj4V{aNwdbR(fcD#SeR_33!(A4(V$*l zg~<~+tkH6^B$SI<{}XyVL+<9^mGveuOSPW5r*o7@T7vm;8FDF4r#99-_gwQ!0YWi{ zGhf`P*FMr)${j)YAh)gtO1bOJWz-=Sor6g${IVeJV%{{(>YzQlT|(G~wCo#+ti#fn z!CtNt;=!Kb$D(1z^4L~Lwn-cd_8*uPeGt0addfM$dS4jSY4R!Zb4T66)UaNiT+J-0 zcWwFokm!N?4(cu5eD}ATF*?N(R$lmM08dCrv3!!ZoFS#l&q^=i48pTD{^l|grQLT` zt2N0|Vxzt=Y|h64X>ZUN|KQuQ*b?g{ujPZ0_cd7&iO07(_A>TndVMnz3jcMhPLC;E`3*k!B;gU0+1~o|wQYIHXWTBxN`nemm6d-sQQ3e0t@lT@B%C{g zQ4|KDmNge3_TA##m7fQI@6a-eny-W&#-M`(K%65+gh9+-XN9L75q~tsu^7iKy4VMC z`~``=(k_Wn^dl!hQ`a_InaApANabVvEO%i!)S?U6%JaX6tPNf%F>O8iQog^eWnt3e zmxamM&Hq6mV)f0PjLWY0X2}1opQ^0lC%eH1%nOXj?@<0V%ySF#G;S=;olzmZdGpH)5F$3HP>mJ1{0H0B-DN6uU5Gk2Xl0Nu8h_N|oC*ev0snSYxBc!a!8 zgFM!N%K~;F76LM1#z=|>9l_GY$mkj zJAW?1_uR&xF&6i7eu1FXS;Nmm!%XO10HIn~bc`6an#Q2O5OzTi^>RYw(ce*>ckJoV z1|r!=;-?7CUs3V|GJXeQH_u}~g`bd9tNnE-VV0{ZnsgFVw-+|Lm@8iHS7q~D%)y6D zSlO4=7){yQJe38YIr%fGnbk)Q5HP2hxn}T9=aOMEQ=ay0qL3jP;eN;FR4iGg)2J#_ zEtu0BY5ds(SD+y(doOivEpu^*fI-Ga#zhkO{*FV>vJgf?N2lp{LxFBg&gbaxMdbVb zh~I^0L4$;t-PikgN}6Ode}jKV-|TiIFvVoKd~rimR83-{8rWouI^*w3LZfqM&v#ey zRh|}g3YtC%6z6O^;8AQtUN zG}iD=?vRsG7~hNK`%-6slH8HPH5v0O#Au2_)^s`fTx&9TfwX4Uc6t?@DfQ_bFa5)8 ztn`Du-3dgJQ zZ-{JM__qopHmD6dgh319AecW!e?#V@mNjaRnF2{b}RmPl-90SOPVxdQa%A}Jqk z;&`(N{t*G}f*I&V9zo&oQ8p_W*k3zdZHTETGy-U`u z>Yu45l1gYUN=7p;w|g$D?5k$a>yeI{$+moAFVni&;|0-Ol3<6sr-N( z6VD*2+qX~1NQbM}B=PrN1JdJ*{F}W0x9+WdN7igzvtBl=tv-MDSiz!N)e@J_3*D7^ zM2t;G8hAsOg96qgn-061POQc|JL%Hjv9bg-W?w+~VZj#sV7a3U)%py9178eYs z5%4V^bq~oU0tJH-S%oeXE^6+oI4B9ajn{0PmPTDiGL-6t3U|P>zJqI((JAs3{4;)= zHda4fwpx7|;>U$4!k+SUZntx{Zp4)l-E(X;c9wxzugu#J`*wTt0 z9CGpXEEsm3>`JPSF}>Wir8xxZ z;M)Gy=G@Bu^tTYr$UHKr2@=OwAG33D43Rh3r;YV}B3)$q%EYtKujrhbq5jB(p65t) zBw=?Wu|;5ps`5I=@lW@t0U_Q zvEt!y=_buKF3f0&hK$C2neRhKw6rT>k1j8ZJGaHa=+1E}qE=A} z+PxlJS*ak;{v&LbWthf|r)e>y9;@@wqtSUia5q{i-+M*Gg}NU3B9Ap8V#Gb}h(n;- zJc0j+HMLHvI$9i?ZhO;%EiAle*lOmH5S!)@vweyD5;|?vRaQAdz1;)6p|oZYC`uRB zFZ)~TT1voK_L>hLG*yaLP-nBVM*6F~G#>+l5C(1}yM!RYk*y1=$;Y`?zCUd-2}8Nr zy(10d@I>37mIjBBnQ=D6G|zHi>oU_o2gs(&E0oi2!(ps^A-fxy12X%l76XHHIC70T z;NyU4b>wevTsjBKM5=ZVqM$j7fSf>RFzA|HvVkGNNGL@`Be*My5xSs9U#uJ_p+2WF z9V#9%KQ!>^SML&}XsA}8^yrr__$EYvwhPrJ0U?z+1#z~+*nkcguUNVz4=+@pFozAM}WTSX_c(PFnEAQ<@g^ZPR%LR+}bH!fBSvL=D=HryJ zw(g%X6<`w{APp_5hJk)6yb^`{nH_j$x(D2#a^{Ixv-ppbaw|EG^>WM&c2z~qn^dQn zicbL9?kM@&@zs;t^BazpfDqcFor@d!fN6v0Z$Jhd7t-X$GGD(U2$&fBs`@JRbP^r z#P5%tGiYO{_F*csr@pt{x8#eA9ZC<}Uy*p?gme!fE=qning^V2`ovN&uFqqt@NKpa zZ;J zi7nwim8te3b{rkc7@C*w?@)NbtqbGJTMG}WcIUW}BP9R!)`-v3CO&1-XF6)upVs+x ze}DY#;G6fU-rkOE67`gPziRRgl=1Y>!2sBHid&6QBE0#(J5E~)WAj7;#Eax?aRtih z@=E5-*f~4gI$G5Aj3XxNVB#uESE@{{$gckSRwn_$?%=$mVlY6}xQ)3X3zL~#L4Bk_baujIr0%bE zNy&D=Fyhb|HeP@9(b~=73?MWqaI9@j7Q7da#5CR}ntJNwNt}y%8QJspeqO1}cOY&T z+N+&4HzA1vV&%d>)(K9VRoY|w!A6cz0K^t|+y*)oAQlQIQe#P`o%dRe|d$-lMU zO;QHZ(QgIdydpX}KHpLpXd=Mbf-OCb0&6Di zGo@zpx~4soc%d96uc_8Cgcf^2Mo=7bKjOw{n&t$J`_uc?{!u zuni7S^Hk&=K78i7tm&FvgohVEZ1hs$ebiSNa5~~4O7gI<5W8=gEtBcfV)qs0a7dsc zQ2$zl1fhbM68~F1yDqK7omNwO>ykBBIegsU#R3zNO?3uY0if#H2~duWkpX~O7kxpu zL`^+3*Z`RRY-R5{rfM}AYO@;UjCTqy4&^957)UkG z5lkhSy14*6yIrVIi=7QC3|}GLOSk&9sV-F25Xw`uOGI0uW$4>Hc0!h9RfiG;!nqA5 z?rHgXD4=-6TDSeYwIDQP0I%SHB%E9>+e{trdvT-7S@G~KNMMd4yuiclnCz^S-z*Qt zaWHiJDYOpyD1OA%Gvl8(h~c0Z1VGX`5-5)4r_uFa)L+fAYCF$P3`?w{oIr|9L{nnY zk@~>V>cTvPe7$g~0g%LE>ddxVnonw8b9VsuN{H78hD^7?wI1e_nkVyzw+o6WN|hRk zseRia*5yh=(M<1%3`pxIh3eqI@@s{5m`_^X4R6|5UB!Il4M&%wo}wwT)MbIAh$lk* z@84-IjbIP2kB4P;U!5a?NNusC23?3@^5aPxj&Fmsk}D1Q(xz=W1EWwB^!yfom6JX- zs%>Scmmu$Q%gIn8w3c}4Za@JLsjDx8S0t$y96(s+Mlg~=lDuby6oxu-XP`gWyyZtz zMDx_|13gcNtxo%yjQuv~>1Ds%V;p8Z_U*o7p0pX)r`6}{;}>PQ5Y|$XIht9~(p&yV zf{T|CLzJE|*87N^rcrtVV;So8g;gSSVW#OeCkGrnngKEdybKsPyC3#TWc+-_>;%Go zoi@~}KZJ z)#|T5E*XrhEnSz@ zzP2ONnjhNy^JhI*-5vbvS;r@`)0p0=Bu!DrlP&o?`>?zn(NO%DZJT%mUZKlnmIjH1 zoaT#FOjmrlyEp7$&*WKSG^M*5BzLCj+Qs(Mr~wX&2`)A^c;TK=VU`KQ_8c8 zBYz9HrX&jy@cMi?o^lnTxa0T10?%RfyzY8JbR_!HVMEuf)w3E7LsZD6Rvie^DCVz_g1<~)bi$gjeFg3DTMdLE4S22GbigH<-0hm)rC+>Ta##nY#~`Fip3o-Iz^?2K?9CVU z)EhQ<;<5{gqhe>_@F(}uxBRwcnz0Mz-f#%UmA)_r{`CeeSDc6eW#gomhrTqGK!D^K z$oSA>?Xt)0|1wc*al{XL^kB!(SgAwu?L5$!==4Nx=ay6y$w)k}dcxU);{pm14JYrMDDvdyGDw|OXi%pho zz?g&x6NO)zqezP=*RBy&GVsjq;$^~~Of8*3#{?1Xv-|ya;wY1}FrlVchdc`he>`^# zdVeDVvK<%|*l#*&u-?{FXqkj1-=*oTuX~==N#Y>CuoFp0Jm~FY=5w+Ap<- zb3t-&^k0_I5@^td?r?%Tsybd{JMX!qRLEdvyQ^##&3L}Ug4TyONF>%ON>VTY${PZJ zhfbt3b4P+b=hk(@ zi@oVp4AC1nHW&EgHvGL!YA4B2OuAsXp0uH6)&`Q6G>s&y9MJnXXfBm5dQ|Y0>wU$$ z={Q0-JblnwFOGZN4ZIE~_FMT~EQ(!Ph!pbQfvo*kUMz+Vk(mlT8Cp6#GD;JTA4nO8Jzm0syQ zd?JChBWa4Kv7)I05R zL|SMA6=}66iJEd8jl8!3fWYCZGrn+WY@Y{^tUsfNfLy52GD_FIoi;@};6a!q_}Mhd z000}$z3%n+VIJkSx5B;!5FkxY5X`3D?|&KMRz1vKX~)$u5B`P&$CPZc^GlCciG5hV znlXG!T~0bjY*%rSGe=$eAA^coidF$-ll^?+*(IN9mzmMia$eo|UWK)#V9BFVvcN5k zaH|aOWnS`p3DkZnHqFB6a3602q#R3QMhB!Si_F+U5ipGxNt7S8UW$Y-!|=p*2_2d1 zJme+PuPg)%x36=M%E)dn`-!_K3f9uUwcJ9nEb~MWa(Ud<_^BQ_68SE>IpV#*1tL7c zRfZzn32gfN+}dLZV3H^8XupL4q*MlTj9{N2kfJIgu1DI>(Kz75{TAoo-wgR$H55#)*~x^{%r`6_Cv6%{n}q@g zE0UXC1PHU512~L@_v%cylfdFpkXeT;o}+!l>x|jKfiedKrlW5$gr@OVX4SK%C+_zI z*T$v}K*JVpnUd=r*s|}?RJe**@msxsV5H{y5aeOncp&(Jwg9SZFO!hS;2f8gv%^WG zLlj250{kjQyrpPHVOyx|NUkppZVFNqWN_A(3bF*fjP&sCL0}T;{%I(-fy@}!Ho#(s zg4~{lk=$DB)rD-&8~sN380kl7za(uDj;CGxKJzpy03Cj*))jwE|M&s z_`7MGs#v_Sb(8Ne@00gWpipm{-(8>J)ZV70iaFl0!c5+XDh@VI+fj-p>|$R~^!t_K)kGzaL5d<6Eo zTO@Tdr6TdVdDxrdI3~o-0^8wRhYu22>p|XuKIc=9M+6PR_u$z6_N7NCm`D-IKA z{pAya)N#yAPD98nObn?R-aT94FzyAM4o6tBkG%{7$gk_26@w-W$thOIP5!y%ea#uB z(%Bmp^ZYP8@M_tw5%mfl=7M|oIHU3VI2i21Z=%yiz2nyVHpJVFi^K^Y#dcw3@ry10 zTB^6eVA;qx8Qo7l<@(U{L6leV5uugM#;Djuf4E5;wFkaJOUUL?YQW zK|BWXU2sq5us6<5iwk{5J+9CsqaT7vcu%KYmem~*G#z|;k3`J{?=9YPFu3HYV=m5z zz#k?VhDKx{qrgFoZS@pi?=Ml_{c7i&o4mtT9`3AFmW5jizi8)O0$ySaAr)Hw$9L!+ zxdV8!DNnHJz>GmI~l*tPl znq^4dhAR3Kj)#XBm2JK|Zn4YziwEOS?Vo#fHWPiV>aONJrSV-dmwo1hRht#~Odsw2 zyZKANH(P8tPGylvvU9)Nd=6_8^Uukzhq zZst|2m-w&bUHVzOBuZsTk!Ti5cX3!tF8A@ylY_`Bf1T}*6vjY&MiHu&uo|q<(9f84 z8H2ZvF0O;Cc&;j#xIv32=hE*Pg^(y6OAq!u~)$r`2pXK zVS&;$@N>^M;-^ah;|&oUvZK9G3~c>||JTRxbjbyNV@nxubZhBaCbx_n?Bj<1HE8Om zblnOA?mdpp@HFlcrZe1X*i^`san23yQC#ymaEB>tHr+RVqjz}U>+jf!IB@%~1=4Jr zW_R#R6B7<~ui(y_=QQ4d|Ap28?sKv^FSN+yFK@l@#Kr|=g8F+ z=zZs0Vt<6>l4xZAryrIaJV2tXsZybaj&=6Xx~<+9nPcIOHp-~JAIeSRKf-rNyl#!f zl6dU$kRq1f^Kz6G_Ru0ludoMigU507v5a{Oy-er4>rBuRA3PW!v zdKTqp;+Uo-_&(6*0L2ZUgqf>3k5qT9Vqe#SnIoayE78R{^cZyUM?JE`c^$xe? zXd0o3(NCoSa-q@hbqg16?KcuC@68lxFT?TCA3zgzZyFI+YCprh757$lbN7ArwbnsG zx>2D@n%r_rhRWe3>sZ>{TKmoSZP)hC`bzw`N|4p_^IzImt@QTm*O~f&kVcxkN}RA# zbL^PAe@0x_$?*hJKb%|n=>^~5eWCOk?vAcjqF zsPi^L0YQiw`|Mo11A>}35yowEoipHlB%fN&xV)oPs)z_vqU=1Q)vxeoE$T*ZZsQ)EG=o$uO}Y)n^!QFB~-Z> zeu+HBJL8%iNL8w-Fif`*hHQ>|ybQSNg4y~knmFcFLm&_Ms#Km>Yet~Bl93$+TGR@V zYke%J88iM_HZu@frx7=S>zmVPTH44&ff`&pPeUP%o$EzAXmndLg*P>STFr-T*s9#JF z#T-ih?KaZ%df%%{H_A9$Nx7}=ISUEZ=~>B;2NarL(B#jTr>+|*a~!%;FGXkuZt25^ zO;h%pM4d@o+G%hTX>xEmWYKPs4!4kwk8Kx_;6$H%ly+I)xylwGA6AGLG|Xd0x-nn+ zUMh^+3S^M|5PSz~`%c54Y2lZ#RQL7g+!Ypu&6jX@!Cz!;);T&q)%Jcmm_bZ8*VJ2Z zSI@Xkybv{I-#^<-hJM_aq^drLqyW~#h+id4Y{|o)eMSoH^nhy{6tOY-6O>;Y<|UR1 z(CLTU&9xN_WcVJIB>JPEURgd8k%87xLcv2YQCTc-RveK3fkhw%EmkuH5ACCG=Av*{ zm)z4PB?+_a-nArPA1d(a;_~=IaQIoQ-N8Ckmgy&j(t)!y!~o)Ow<)Y|5X*tKe{r1H zR#HW3GP-g#yH-xB+F`T{O^RCaFIrEzoY`X=o4>K>;C%B7g)9v77Qa+filwc|tjAmh z-3bWTLYE%By1H+UZ#_ECV7YAcRuM1xTlxTkhfq-q->o(D)l!+V9aA%ZRy{nX`Ljd1 zvTXD;j^plQ*_aFgHMj|uGNicHV9z~}e7}=fTh(zNx_SnJV;;xOQnK5r%ClYyeHO$m z-RC*bjaMxsRk&Nd4R=-22np*p{&uJ~SL)QOvwhV{9^%AVxmCckTqnGV@Io%0WF!I% zYtFQZHHg^t#LZN#6^(;dj`@dA1(dHu>YZj9lKGYxQZq@$b&RC>be(o|8`zf{W=Ny< zxRdJ-?E&ZY&>rzZ)Nb4w2H{2~3P$Jawwt_RTLA>Ym-gJ7|BF8v-Am#-gHmafAaJ0l z;0AbmL-H!9TOrFyK_J=BcM-C{hvV5>ckv3RVCWxO6-&B=5HbU~FzVEfr#M9lS2vR* zl8h!*?&J@mo~#OOvIf_Vg8vhm%Vs|D0g#tG>Us{i4zqb{3(51it?LYZ!r|AmFo74F z$^`~bpq9Z!lo-01siL_q{GE$`854e98G34}wY^Xlk!%h#3R$>@I1R+k-Noc!OV0a@ z`_)#5R^X0RvwVj(NHiVOq*i}w<{2cI9@T(V*YoKmP6Yu#^u>Pdxa_3H(y*W?jVIs7 zjJcZ_C%?RvO4gmY*h#QLeX*!XP)V$YKCgg;RI>O}a{iTU@o1y>;u1)lvcJib0W5?gsiMg_b=BuR{@#bd&sI&N&mXWlYplD7z3>iYYC8skyq#*!(y=YX zp6l5VNE0wYdp=%yhbKevUu9&Q02a`RUs|X4MywEDS%9W^5fUyyX>;^ny+7thh`5Up z5vJaDeo4fwJ9=|Sj}}XVhA@79LqD_1E7<>d3d_A%QO?-K|3Vqm$jCm;A%(%4)W!XSw!us`oq3)oWW#}!s0B#@$4Rpcp%AhBPe z4E3@sgreb00TYAliwnw+B>pO6w_UVTfrSg3MS3x7oui6Pb3X7P>Az?bqx+5|%1Vkz zOF9_Q>u}uhN3*drB0GOlX8G{#g_x|*_#l9xw0+1>UGY){lZfBj-c+c^ld<(N0-nFJ zxKYmQ1NjImjIaYdp+CkkdE9c%NK301U2SS?f9?GgD|CH^&k0o=@D14&;Z&KTk{dZE z(SDZ9)2aOJT>Vd_Vz+iMhgks`rRh+MN}xEtx9x>3{_dvF-P959_nE+?PR71^Jm-l; z+&6*S4Gg}_{!TiW@X2qcI3JSvQ2lVe=B?L~&;`pLQ(QbSC*mDjr;a8Q#-0w@n~KX^ zo=TX{o1iP>(z52KVU&c}INU*&keu4^^!&cf=R|&sX0447lO;Dh@|KUS;2$Y1=5{S? z`ObxuwPtrN(5M0lK5X5k(C#UJdj0qTzmV>BHO?!t9u$x`0fTUbFK7XqK#HJMXJDI) z!sR`T9bNuUea07-bnHmcpteinoTC7kCJ;(wTVw2_7o|otaRQ41D$u@ z{}8Q9moWe3hZc+4*T+(O1nY?sDt?Yl5jA1nPiKAl%Ny_#sc53;gi=G)$Zx0PYyN;W zV+(N%2;MfbZOYZA78rT@*a=37L2f<i!+ zsFae{9M9@K#kq{b`~LZMoz(+)y44{7ccBX`0kv7V4*9MDA3}uXuj*Qi?PYScHJdlt ziVK%`_wK5-+!a2xwH?prYhEXeA4jo0ODU{(3QO~m>>bTcH{2ZlXBuAqBi9Q=0-Y&U!K zp*}b4xQ}F@Xvhahhk2=*@<4$?X#1f#$Z(;Gl&Eg=3f#D2@IlaT>G=$92#@T`{c(sc;n_V?6C7dt)dG@B%qofJC-} zq#y^Pdml8pu{mM@kgwiOE{+g+Po6LzaV|1|cD3?me~hxR?Z`05EKmQcW=+ESNAFoL z^(QWsUMrJR>TfurC?It+Dc8Bw72&!`acrpv6twX$$v*R|TCA4XKiO4w82f-A!%HtK zXC4`OHKbTh8&N3&O9mUOC)CV=@h$56U_VKJuL&tz;uS0ebQ1^|Sgn^?Z2<3+x`zqJ zl!Rv~{jQyIN^zwM$v|%VHcP=pOmRm$FVaie%Yp&Sc>}e#ZDPWJtjKRgJ522-WaOQf znu#fvWFGULNS~cPsam#Lvx!Pm&hs2TpUvZeFNKqk_ejrd0^7h zsGJr&jB7|J5Hec-dB(caJgs%t*znNHxvg+rB+fAPhOj{?;m4_;H}K3gl*>Y)C9pVA z9Az}!LptLpBnU%r=pO@$7#2{o1hB@j{v8YJhb@&yu*hIAyoZgWbiyXbfxy|%dr1Go zuTF;=<#G~CsARcRJVfOjLA7M#E?A}P@sFQl4#B!_0h4duMK4^@-?}j~N|$~S3#e{W zuXyezSOy9g(3&4HDBPsp(&8c^7**ShDLKn-mmx&3SN7;ls7haJC-YOh)dvapD_oodsE0ec&tsYWl^m{rxM9vQ{IsgcF*R$I(#GCZ z%!eq!{{4XMma888q)_9+CBt@=LB1c76FHpgXW#19%H?yFxJP~tr^O)HS&AL}le-W3 zlHXhmJ1>6OkXm=~FsR-wR`Ar6CS``>Naw8MUl$BDwJMB>+@zG6iD7nha^lun_@Wyw6|FS_M^~zTt~|0rjM~$iCp|mg0Z0H-vw(XtGfpG zEl@T*t8HVf!UZ;jO(M!QJVkjx(G5iSHLgm&4H6xGP-aPL4bz&@Zwxr>MlS_FbC|5) za&Od_u#5kIf%PA*w5)Oo5S@t&PUK~$kA{cvyI2m6d?&{SueTKRsNxxCyLO48jwTAWL>IH-*!_V}cS*bWc3&49s#^GGvMEIS^E zF6eBhT#ymDV)w1oPF%ff@*k~I$D1E`omw<6n^j6|=>ACjcIDYevA~Oc1+_;`1;rL$ zH7=xI{19f=7`qEu;=(c}dOa~k+8JGAhKvQvcn7Y6_KF!P7325mXf$j3-tKhGv#~&$ z)b!fY5oz@s_zT9Pw=`<=yD7K9$Hw;o`(S$g87x8+uc&D%dD&m?p)P+>XpW?wp`+Up z^X{#4Hh{(q5Dq%Wj>pxUP{Pd$Vkn-S!_&`7kJ2D zOb2Isxjd5u&lU2BUX{s9M9=#4%$FO}$m=tQH@Il3i+s{q7ubw6=Zn?io#qd=Mce=3 zP-FEZ`+ct9c9mOk2$TQRcQoDRJCUO?7%mlj!QA+-Y3G{J=GX`5Ir>}W3xQTB&7)AN z=pD6n7S8jUYO<}X`mOLXUhh4*QjB-Hu9zUuVebwNOhrT7=X2P@3U;l}sy;2=Ns#|) z0ij&0K$s;w4_Q`6^!SwoJ~>ny2xM3`WpqfPbJf^6LnJUm&Fu`n-?!SLiM*dDOD7H4 zR^O91`*j%b?5(2HugT}{*NaIfQIMLtrx@G~qp%cOLa((9q& z`O|JUEjja$VRYuWW>x#2rf(-VvQt0~!>X`ijzMn+^8tyQ&)1N7X9T$v9*Dkq*dWcr zKr)d0Kyxe4uiYa(e+rFeD2J>a{{(O7?^b*(w)=jf7uO$=AMB}k)AMWL@T(D<_H^@R&J1IOn|^Ga@ELkmieI9a z3r~GDf5w7X?6$F#5Q4E}Zv`Jn_6XCa04Ft<0`UN?;1(vX(CsO=V2uc#Ur@BD=SCu{ zn2H&fE(kARF3Vetq?q0DWi+`<2Qn6VcI{OfFj%ccJ0Xf+0i1DlM-H}%;b?ET@jG%` z3R1T2Zp{zhsQJ*!$lm?O%0;uyJ))h0l3;9B8+G>AwN<)LNw53DF*k8sMfe8Z-zzWj z-6yez30_HeS}YDRED!->3&AN&HUelCxK6qlU0YDr#=MoksIN1bCN@~-XIky%vo+g> zd7nRJVbRFyhJ2;9DG@tARn3rd-M$#yU5Uw!c)HH^awTgFAT3U6 zJF$@A^A~4h-{Y?)CmK=%#K07P^)S{u{i9N%0^eEhe{lS?Rs(&*q9`6XH3G!@1j8=3 zoV`4vsetPx_tvBTj=rCKggg+>|LkFxZqiGz+Vm^lL?!CJ~)c%|a92 z%NylCFZ0D;>1%DX0!-L;MTRDSTXbu_x~eNM;$lmp*yA{kV{SfnaZU!%0Q=|BC?kAG zL&Qc%**qcqy9?HDji31q1>HYMNQwD^C7-Wli#uOaizHfXI*Uz=wEw*>-*u7yH zwcJ4NI6&CP8OewvCF93jYfI$sYh*jJgCG&~GUhSbwenqSP#6ZBF`Wr62M}m2^Bv7<5OK@ zkM5JP^7r#DWUNZdd&ErIiBj}x%a^YuRzP!xbJ&=LGLEc!Y4 zT|l2&nKdywGldUHT~vw2D-L%j6YPQUTq5ClT>3nnmR+mpcq3H1B+l^Gt6W{+<2uk2 zE2vV%7iyfY4_qCJO%8q(1Qg7(_K#0LqdSSR|3_N|-rI^v$xBWqJV|`nX3IR|qJYK3 zxdcBkmJ-YZ*pXj;d<>@F`VVlc3Uv-RRA2{YyC(NvbK5ry|KF=HeA(-}|HI+^Z@w*X zYr%Cj%}Fq6!;jLRa8rXKn0NC@Ye1cK`ec@>&v4=MkKE!&>OWBICbeU_)!*)(o_$jn zL%C0kOGLd_LF$`4xnkOMVDEZ_JV2iW_>=jHsbwh3nwA!|)}b)ZEYze^9Q@z-_IFx; zHu8R7ZPocTQ{gY4VURoajZEjaXLXC;JKdJ>@Iu4*o}ky?FSV8`6zYaQ`xD`{w79r` zqffnnlJn%%D>C$Ffk*VyqP3tP?)X};>yUx10764SLBZ)*6kNs1^O@wDK8dm(D>HBd zAcUpt(N`lV*Wzx2TLN~z4h85~rZ0K{cCjk}cD5sUy(gc;rbumw2u{yQ9vCoD1V;O$ z(o{~N&XZzkuTOR*+LJ`L!1$?UaIS7ga^13ZTJmPrZAK3-L9Ru~@#GqV+i}FN9~I|DYR~M#$!k_E#vIRXMb^wFOMoy8_JE0^UkE z9KL%?pQZsi1>lSt=qY)=jKZV0u(mXjB&ekqfE%6e2(2xum9s1RYtY%Q3$=ZG|9Ltt%WaDKA*9A)4xcwXn$UApMMMaBR#LO*2!Mnm; zXH{c_maqTw%-J2B%Iw-5+`W@_le3jN6LoeWvVlo_m6Jy@jfk8@v8 z!P2p-_>aR(9h-uHT$af63dV8);SA-`SA6GuOLm-hbRZ*?Z;KVj74#pS?QI zx=oN!(cum=4hVSqr{%f%rQ0crQUU1w^fz2Ut3!XU&zvmxW-|`R`2n8x_fi(ow$lWLXgLv&6Xx& zA|MG#%zS4u=NY>*WYN5hWGGlDs^hW7*XUyo?GHCLHvE*TaD0g^-s9@Qs%JN*4;S<7 zKsrmH6cYUimuu3gyu7^1M96#l22wf@V^tJmozFJ_KcvxLSniO0?M(o5 zp^=RkW-VU|y^l7jS5L>s$AVo)s6Jp6d3%P$m8}=Of1Sm05T(sfWX3OOFbW%@OZGJy zQ8O$`hvI=t80x#AqSU}Dv%5zf@xO1I-q1Gr>!d062n*St`$9P({51907FirzD)0agZE*n7^+=Qj=eUl*&OlHNQ^IM<@f znnXV%9Fv+LG~r4BfX%ALD*GIoY>9vE^F*h1B#h5P*M;`M?W2Hp;QD%Q+{urkbKrHJ z9#Qy`ihdup?-Hd6mF)VKiayV~Y0ya*l@Qza+eCaDX0iZiDn$S}-Vr!fiFkv?r^(rp zKnEK^c;Y3hxX6j*7#zJOa*!LH(|qm1j?iv-NDG=LSKKW(Qw*)A7D4nw5*`k2^<7#N z^Ezo3V>b(J+|HkzPnaG1tBJdi^QyupE!04YQYHKEJ3473g#Fvg^U4whg?GvPq%*(# zsfCs#cff?s$oUJFjh*6!v?WteQ-ES^!r=SU+;|G3{DU9bIrFaQ%%|F@coAfD_5^X}&x3aSLcN<$8>tlK+gR`&0JQ8@kK8OBBsBQNC zzOC+$u)(iV-C~v3xz@P@xoLE}iM?c{74~C-ste{Q~?sbKOU@5rHq`t#Rf++lJ) zZ;tPJCf6$<39r;|;|!!h6Rz>~4uRIbnm;5{*nP&Jp};fA_13<|HT`XmdB-bM!aYkQEyj$O)k5n;YTal^Uamxp|`_=0(HIo6CKf7d5R zP3OoavhQj9pVVi<$l~qQ#|5NFJ#7#ZNsq~30EDIY=WH+S1*G#T3|xfLsP?c`M=3;C zox25_qzY%11Q%#iR2QGDr1_;dDG6FxI1`IhA)&HY^YaB#nPq zDVr_(42wu~?m;1%0fuPUfouLG6>S3U2tfu@rf7{!V+P6D^M)ATJ24@8C2=Cj69 zKd`H!)IYyEpw5&A54@h)j^tNXrR1PQ)P9UVYo?YF}q~8*d zSDq_~K>s?=cUmjZDeb-FZjKBy}%yx-^L2RGFkVSt(%Ehn9=>++M zoS4k|mrD`d6IZ=^wuRTdXa#ZQTgkp&V&0+bJjQUbnZ%_Wi9e;=U3fHJtoVJ+o#a! z+-=xNK{J8Hc#EzfHEKk^t%XyV_3IMP9-jvtvTv6K_jrkEyBMn8Wd+%L*z6;wzPS?- z@eB`-9GZtU^%Xv`LCT(4SISGwFnPc>%*)A3pWd3CkW5)p4phC{__Cf`7EX~kXMcO7 zAB9M;X3&DL>Yd!?MW)|XC44bjG7J({M{E3WlZ1}1jCX~(9{t+ldvc3$UjHdR@WWB2#EYfddyV(7~+SdC9 zZ3bQlkx5Q%6xDL{=X2AyBFk}Z4ax2%?HUJAy_62GaE=23*6dupDP%i$C~(z%y~(vx zpIReG;3Pw-=x64Ia`mCKwATkj&UFzs`eG}_s0#`APbQ)*k@&W;Z_R(iHLg;@TLRnPJ)j^+zHyQExCImWlg&&I-{q)wiH3hOASMBC3+OTfZInT$_qzg z#d|Xp^T;DQU&d)vN9Ku40R`{uoJb5YsL#6!YI%jilJuZO|Gi}fOBT~3X?qcaYr@(5 zUM0K+##U;|4%ammMHU7`u6FyMkWe^O(+pOIXd$T>;m^x|b~Ym?*jnR_{+v#xP!*G$ z__)7dD$)M!I@WYOw z)3&{$DB@{y*qum6AgFZsUfY`9*+mc(LM0rX- zI(=efO~99K4ep8x=lfmN_)Z;m_d|N?$jOTAV&8SeDv^dg{+I#3mm$hI3o8tp23Rr5 z#3?GdC>`Kl8y%!%|_;#nB#UOYK`yS3dp7U3P3 z6QlWr<(BwN@ya$S0v{GNQOeW%TN+Z8iop`kr6sEx!V>4r zHJOCDp#-T5G(XWlzLZyOhG8+8UP6gV=^s(m6HaVQEz&pNCd{YV919S_xpe>7R%F5f zcYrWsHBQP8XqH--&Dv*UwhSN!;l6;(h?xAjWS}1{v%fKu&*?~(PH`|Sp+TT0(a!1L1j2? zl1mQ@4F}-z*m3v||U%|b=`ahe*KabO^`|ZjZ9+q;| zDaKJMr^*XfTcOR{DY{D;Wf!z;Y26sT!+#&tzwdD1!+;2jD{!}Eu7V!s(mWdatwFqU zF!`q8!$2V2*crK3?)+jYyp@sh>1Op1Sb(QEkbAWq8S$sd``-nXxj=a1T`_~4k@C|+ z82(+OlsmEDim)wFPUyH~pXMkwfBdR`5TH UxZQ%R9y(xIncJE*n0O`q7b)4)YybcN literal 0 HcmV?d00001 diff --git a/docs/screenshots/ribbon-highlight/after-xline.png b/docs/screenshots/ribbon-highlight/after-xline.png new file mode 100644 index 0000000000000000000000000000000000000000..e0edc2e7a6f27e1a699a9f3f556830377ac5a0ed GIT binary patch literal 39783 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%0Am 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 ZP@4ZOt*DVhRN)v9=Pc~ZiDuq${{o1;6Da@y literal 0 HcmV?d00001 diff --git a/docs/screenshots/ribbon-highlight/before-dimbreak.png b/docs/screenshots/ribbon-highlight/before-dimbreak.png new file mode 100644 index 0000000000000000000000000000000000000000..195fa916bba4e8aacb3cbf1cf4647abfca4838c4 GIT binary patch literal 39400 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

P;PD-+pp#$Ww~8L4%eNM`i7eg9AI(}=`zwPqrb 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

Sy>eXs!gVL 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/ribbon-highlight/before-offset.png b/docs/screenshots/ribbon-highlight/before-offset.png new file mode 100644 index 0000000000000000000000000000000000000000..195fa916bba4e8aacb3cbf1cf4647abfca4838c4 GIT binary patch literal 39400 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

P;PD-+pp#$Ww~8L4%eNM`i7eg9AI(}=`zwPqrb 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

Sy>eXs!gVL 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/ribbon-highlight/before-xline.png b/docs/screenshots/ribbon-highlight/before-xline.png new file mode 100644 index 0000000000000000000000000000000000000000..195fa916bba4e8aacb3cbf1cf4647abfca4838c4 GIT binary patch literal 39400 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

P;PD-+pp#$Ww~8L4%eNM`i7eg9AI(}=`zwPqrb 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

Sy>eXs!gVL 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 literal 0 HcmV?d00001 From d31b9d1a35ea086e713c5958422ff3231ae9bac9 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 11:07:15 +0100 Subject: [PATCH 17/43] fix(mcp): harden discovery, serialize launches, expose build identity Discovery skips pid-verified dead sessions and deletes stale descriptors; probes are bounded so dead sessions delay discovery by at most one timeout. The bridge exits after the in-flight request once it detects a rebuild, and error results omit structuredContent so strict clients surface real errors. Concurrent launches are serialized with automation/starting.lock: the first caller spawns the GUI, later callers wait for the same descriptor instead of opening another window. Session states and hello/capabilities responses now carry the bridge build identity (version, build_rev, tool_schema), and the agent instructions point the build announcement at it. --- docs/automation/README.md | 9 + src/mcp.rs | 421 +++++++++++++++++++++++++++++++++++--- 2 files changed, 397 insertions(+), 33 deletions(-) diff --git a/docs/automation/README.md b/docs/automation/README.md index 183a8973f..8333fc9eb 100644 --- a/docs/automation/README.md +++ b/docs/automation/README.md @@ -20,6 +20,15 @@ The server provides four tools: - `ocs_execute` performs one operation, an atomic record update, or a sequential batch against the real editor. - `ocs_capture` returns a bounded PNG of the drawing viewport or complete window. +### Stale sessions clean themselves up + +Dead editor sessions used to leave descriptor files behind that slowed down +session discovery. Discovery now skips processes that are gone (and removes +their leftover files), and a bridge started from an older build exits on its +own once it detects a rebuild so the client starts a fresh one. No action is +needed on your side; if a client reports version errors after an upgrade, +reconnecting its MCP servers picks up the new build. + Run `python docs/automation/mcp_acceptance.py target/debug/OpenCADStudio.exe` for a repeatable end-to-end acceptance. It creates visible geometry through MCP, audits and verified-saves DWG 2000/2013/2018 plus DXF 2000, and records a diff --git a/src/mcp.rs b/src/mcp.rs index e60c86629..7b538e934 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -11,20 +11,29 @@ use std::{ collections::{HashMap, VecDeque}, fs::{File, OpenOptions}, io::{self, BufReader, Read, Write}, - net::TcpStream, + net::{SocketAddr, TcpStream}, path::{Path, PathBuf}, process::{Child, Command, Stdio}, thread, - time::{Duration, Instant}, + time::{Duration, Instant, SystemTime}, }; +#[cfg(any(windows, target_os = "macos"))] +use std::collections::HashSet; const PROTOCOL_VERSION: &str = "2025-11-25"; const MODERN_PROTOCOL_VERSION: &str = "2026-07-28"; +/// Pinned content digest of [`tool_definitions`]. +/// +/// The `tool_schema_digest_is_pinned` test fails whenever the MCP tool surface +/// changes, so schema drift (new params, renamed tools) is always a conscious, +/// reviewed edit — and clients can detect a stale bridge by comparing digests. +#[cfg(test)] +const TOOL_SCHEMA_DIGEST: &str = "1e9b9acbdac71b34b93aa412f279f68554da822fccf40fbb5ed6895b4397322a"; const MAX_REQUEST: usize = 1_048_576; const MAX_RESPONSE: u64 = 16 * 1024 * 1024; const CACHE_TTL_MS: u64 = 3_600_000; const TASK_TTL_MS: u64 = 3_600_000; -pub(crate) const INSTRUCTIONS: &str = "Call ocs_sessions, then pass its session_id as ocs_session_id to ocs_read, ocs_execute and ocs_capture. Read capabilities to discover the complete CAD automation surface. Call record_schema to discover every record type, property path, JSON type, enum, unit, constraint and write rule before editing unfamiliar data. Use records to inspect every serializable entity, object, table, header and document record; filter with RFC 6901 JSON Pointer paths. Use set_properties for atomic, type-checked record edits and preserve document_id, revision and request_id. Use commands with parameters.name for a command manifest. Use batch when several steps are known, and request changed_entities when resulting geometry is needed. For interactive work, call start and follow state.command.accepts, options and input_example. To have the person at the screen pick entities for you, call user_select and keep polling until it completes; running means they are still picking. A run.cmd contains the command name followed by prompt answers separated by spaces; points use x,y or x,y,z. After a timeout, query the existing operation and never replay a mutation with a new request_id. waiting_input and running are not completion. Let OCS and its geometry kernel calculate geometry; use query near, contains_point and intersections for exact relationships. ARCHITECTURAL VECTORIZATION DIRECTIVE: When converting or vectorizing a floorplan from an image or sketch: 1. Attach reference images as Xref underlays via embed_image on layer _XREF and lock it. 2. NEVER draw loose lines or arcs for doors or windows; always query records (collection: 'block_records') and insert Block References (type: 'INSERT') on A-DOOR and A-GLAZ. If a block is missing, draft standard geometry at origin (0,0) and register it with block_define before inserting. 3. Categorize layers cleanly: A-WALL-EXTR, A-WALL-INTR, A-WALL-HATCH, A-DOOR, A-GLAZ, A-ANNO-TEXT, A-ANNO-DIMS. 4. Always verify drafted geometry using ocs_capture with annotate: true (Set-of-Marks entity IDs) and diff: true (visual dirty streaming). ocs_capture operates quietly in background and overlapped window states without stealing user focus. Viewports and captured snapshots are available as MCP resources under cad://session/{session_id}/viewport.png and cad://session/{session_id}/snapshot/{hash}.png; ocs_capture accepts delivery: 'resource' to avoid large inline base64 payloads, supplies standardized spatial grounding in _spatial, supports diff: true for streaming dirty visual regions, and provides multiscale DeepZoom pyramidal tiling via tile: {level, x, y} or cad://session/{session_id}/pyramid/manifest.json and cad://session/{session_id}/tile/{level}/{x}/{y}.png. Before delivery call audit with the intended target_format and target_version; use save_verified with an explicit absolute path to save, reopen, hash and compare the semantic manifest."; +pub(crate) const INSTRUCTIONS: &str = "Call ocs_sessions, then pass its session_id as ocs_session_id to ocs_read, ocs_execute and ocs_capture. Read capabilities to discover the complete CAD automation surface. Call record_schema to discover every record type, property path, JSON type, enum, unit, constraint and write rule before editing unfamiliar data. Use records to inspect every serializable entity, object, table, header and document record; filter with RFC 6901 JSON Pointer paths. Use set_properties for atomic, type-checked record edits and preserve document_id, revision and request_id. Use commands with parameters.name for a command manifest. Use batch when several steps are known, and request changed_entities when resulting geometry is needed. For interactive work, call start and follow state.command.accepts, options and input_example. To have the person at the screen pick entities for you, call user_select and keep polling until it completes; running means they are still picking. A run.cmd contains the command name followed by prompt answers separated by spaces; points use x,y or x,y,z. After a timeout, query the existing operation and never replay a mutation with a new request_id. waiting_input and running are not completion. Let OCS and its geometry kernel calculate geometry; use query near, contains_point and intersections for exact relationships. ARCHITECTURAL VECTORIZATION DIRECTIVE: When converting or vectorizing a floorplan from an image or sketch: 1. Attach reference images as Xref underlays via embed_image on layer _XREF and lock it. 2. NEVER draw loose lines or arcs for doors or windows; always query records (collection: 'block_records') and insert Block References (type: 'INSERT') on A-DOOR and A-GLAZ. If a block is missing, draft standard geometry at origin (0,0) and register it with block_define before inserting. 3. Categorize layers cleanly: A-WALL-EXTR, A-WALL-INTR, A-WALL-HATCH, A-DOOR, A-GLAZ, A-ANNO-TEXT, A-ANNO-DIMS. 4. Always verify drafted geometry using ocs_capture with annotate: true (Set-of-Marks entity IDs) and diff: true (visual dirty streaming). ocs_capture operates quietly in background and overlapped window states without stealing user focus. Viewports and captured snapshots are available as MCP resources under cad://session/{session_id}/viewport.png and cad://session/{session_id}/snapshot/{hash}.png; ocs_capture accepts delivery: 'resource' to avoid large inline base64 payloads, supplies standardized spatial grounding in _spatial, supports diff: true for streaming dirty visual regions, and provides multiscale DeepZoom pyramidal tiling via tile: {level, x, y} or cad://session/{session_id}/pyramid/manifest.json and cad://session/{session_id}/tile/{level}/{x}/{y}.png. Before delivery call audit with the intended target_format and target_version; use save_verified with an explicit absolute path to save, reopen, hash and compare the semantic manifest. When you first connect, announce the build you are working with to the user from the `bridge` object on ocs_sessions states and hello/capabilities responses (OpenCADStudio version, build_rev, tool_schema digest); repeat the announcement if a later handshake reports a different build."; const READ_OPS: &[&str] = &[ "state", "hello", @@ -138,6 +147,90 @@ struct Descriptor { session_id: String, port: u16, token: String, + /// GUI process id when the descriptor writer knows it. Used to skip dead + /// sessions without a (possibly hanging) TCP probe; absent on legacy + /// files, which keep the old probe path. + #[serde(default)] + pid: Option, +} + +/// True when `pid` currently exists. Linux checks /proc (no spawn, no new +/// dependencies); other platforms go through one shared snapshot per +/// [`descriptors`] pass (see below) instead of per-pid spawns. +#[cfg(target_os = "linux")] +fn pid_alive(pid: u64) -> bool { + // Fail open where /proc is unavailable (containers, chroots): without it + // every pid would read "dead" and live sessions would be dropped en masse. + Path::new("/proc").exists() && Path::new(&format!("/proc/{pid}")).exists() +} + +/// One snapshot of all live PIDs. `None` on any failure so callers fail open +/// (treat every descriptor as alive) instead of dropping live sessions +/// because enumeration broke. +#[cfg(windows)] +fn live_pids_snapshot() -> Option> { + let output = Command::new("tasklist") + .args(["/FO", "CSV", "/NH"]) + .output() + .ok()?; + if !output.status.success() { + return None; + } + let mut set = HashSet::new(); + for line in String::from_utf8_lossy(&output.stdout).lines() { + let mut fields = line.split("\",\""); + fields.next()?; + if let Some(pid) = fields + .next() + .and_then(|field| field.trim_matches('"').parse::().ok()) + { + set.insert(pid); + } + } + (!set.is_empty()).then_some(set) +} + +/// macOS has no /proc: same one-snapshot approach as Windows via `ps`. +#[cfg(target_os = "macos")] +fn live_pids_snapshot() -> Option> { + let output = Command::new("ps").args(["-Ao", "pid="]).output().ok()?; + if !output.status.success() { + return None; + } + let mut set = HashSet::new(); + for token in String::from_utf8_lossy(&output.stdout).split_whitespace() { + if let Ok(pid) = token.parse::() { + set.insert(pid); + } + } + (!set.is_empty()).then_some(set) +} + +/// Process snapshots cost a spawn (~100ms), but `ocs_sessions` can run every +/// agent turn — cache each snapshot briefly. Failures cache as `None`, which +/// keeps the fail-open behavior below. +#[cfg(any(windows, target_os = "macos"))] +const PID_SNAPSHOT_TTL: Duration = Duration::from_secs(10); + +#[cfg(any(windows, target_os = "macos"))] +std::thread_local! { + static PID_SNAPSHOT_CACHE: std::cell::RefCell<(Instant, Option>)> = + std::cell::RefCell::new((Instant::now() - PID_SNAPSHOT_TTL - Duration::from_secs(1), None)); +} + +#[cfg(any(windows, target_os = "macos"))] +fn live_pids_cached() -> Option> { + PID_SNAPSHOT_CACHE.with(|cache| { + { + let (stamp, cached) = &*cache.borrow(); + if stamp.elapsed() < PID_SNAPSHOT_TTL { + return cached.clone(); + } + } + let fresh = live_pids_snapshot(); + *cache.borrow_mut() = (Instant::now(), fresh.clone()); + fresh + }) } struct GuiClient { @@ -376,6 +469,23 @@ impl ResourceStore { } } +/// (mtime, byte length) of this executable. A rebuild changes at least one of +/// the two, so a mismatch means this bridge serves a stale tool schema. +fn exe_fingerprint() -> Option<(SystemTime, u64)> { + let exe = std::env::current_exe().ok()?; + let meta = std::fs::metadata(exe).ok()?; + Some((meta.modified().ok()?, meta.len())) +} + +/// True when both fingerprints are known and differ (unknown counts as same +/// to avoid false-positive exits on locked-down filesystems). +fn exe_superseded(baseline: &Option<(SystemTime, u64)>) -> bool { + match (baseline, &exe_fingerprint()) { + (Some(before), Some(now)) => before != now, + _ => false, + } +} + fn random_id() -> Result { let mut bytes = [0u8; 16]; getrandom::fill(&mut bytes).map_err(|error| error.to_string())?; @@ -444,8 +554,11 @@ fn exchange(descriptor: &Descriptor, request: Value, timeout: Duration) -> Resul return Err("Request exceeds 1 MiB".into()); } - let mut stream = - TcpStream::connect(("127.0.0.1", descriptor.port)).map_err(|error| error.to_string())?; + let mut stream = TcpStream::connect_timeout( + &SocketAddr::from(([127, 0, 0, 1], descriptor.port)), + timeout, + ) + .map_err(|error| error.to_string())?; stream .set_read_timeout(Some(timeout)) .map_err(|error| error.to_string())?; @@ -479,6 +592,8 @@ fn descriptors() -> Result, String> { .collect(); paths.sort(); + #[cfg(any(windows, target_os = "macos"))] + let live_pids = live_pids_cached(); let mut found = Vec::new(); for path in paths { if !private_descriptor(&path) { @@ -490,6 +605,35 @@ fn descriptors() -> Result, String> { let Ok(descriptor) = serde_json::from_str::(&text) else { continue; }; + // A dead GUI leaves its descriptor file behind; its TCP port may hang + // instead of refusing, which used to stall discovery past client + // timeouts. Skip (and delete) pid-verified corpses before probing. + let pid_dead = match descriptor.pid { + Some(pid) => { + #[cfg(target_os = "linux")] + { + !pid_alive(pid) + } + #[cfg(any(windows, target_os = "macos"))] + { + live_pids.as_ref().is_some_and(|set| !set.contains(&pid)) + } + #[cfg(not(any( + target_os = "linux", + windows, + target_os = "macos" + )))] + { + let _ = pid; + false + } + } + None => false, + }; + if pid_dead { + let _ = std::fs::remove_file(&path); + continue; + } let Ok(state) = exchange(&descriptor, json!({"op":"hello"}), Duration::from_secs(1)) else { continue; }; @@ -514,6 +658,76 @@ fn log_file() -> Result { .map_err(|error| error.to_string()) } +/// A launch already in flight keeps its claim here so concurrent +/// `ocs_sessions(launch_if_none: true)` calls wait for the same GUI instead +/// of spawning one window each. Content is `{"pid":..,"started":unix_secs}`. +const STARTUP_LOCK_FILE: &str = "starting.lock"; +/// Claims older than this are abandoned (crashed starter, previous boot). +const STARTUP_LOCK_TTL_SECS: u64 = 60; + +fn startup_lock_path_for(directory: &Path) -> PathBuf { + directory.join(STARTUP_LOCK_FILE) +} + +fn now_unix_secs() -> u64 { + use std::time::{SystemTime, UNIX_EPOCH}; + SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|d| d.as_secs()) + .unwrap_or(0) +} + +fn write_startup_lock_at(directory: &Path, pid: u64, started: u64) -> Result<(), String> { + let text = serde_json::to_string(&json!({"pid": pid, "started": started})) + .map_err(|error| error.to_string())?; + std::fs::write(startup_lock_path_for(directory), text).map_err(|error| error.to_string()) +} + +fn read_startup_lock_at(directory: &Path) -> Option<(u64, u64)> { + let text = std::fs::read_to_string(startup_lock_path_for(directory)).ok()?; + let value: Value = serde_json::from_str(&text).ok()?; + Some(( + value.get("pid")?.as_u64()?, + value.get("started")?.as_u64()?, + )) +} + +fn claim_pid_alive(pid: u64) -> bool { + #[cfg(target_os = "linux")] + { + pid_alive(pid) + } + #[cfg(any(windows, target_os = "macos"))] + { + live_pids_cached().is_none_or(|set| set.contains(&pid)) + } + #[cfg(not(any(target_os = "linux", windows, target_os = "macos")))] + { + let _ = pid; + true + } +} + +/// True when this caller owns the startup claim and may spawn the GUI. +/// False means a live starter holds a fresh claim: wait for its descriptor +/// instead of spawning another window. Stale claims and claims from dead +/// pids are reclaimed. Fail open (claim granted) when the directory is +/// unusable so a broken lock can never wedge launching. +fn try_claim_startup_lock(directory: &Path, pid: u64) -> bool { + let now = now_unix_secs(); + if let Some((owner, started)) = read_startup_lock_at(directory) { + let fresh = now.saturating_sub(started) < STARTUP_LOCK_TTL_SECS; + if fresh && claim_pid_alive(owner) { + return false; + } + } + write_startup_lock_at(directory, pid, now).is_ok() +} + +fn release_startup_lock(directory: &Path) { + let _ = std::fs::remove_file(startup_lock_path_for(directory)); +} + fn start_gui() -> Result { let executable = std::env::current_exe().map_err(|error| error.to_string())?; let log = log_file()?; @@ -527,14 +741,33 @@ fn start_gui() -> Result { .map_err(|error| error.to_string()) } +fn automation_dir() -> Result { + let base = crate::config::config_dir() + .ok_or_else(|| "No user configuration directory".to_string())?; + Ok(base.join("automation")) +} + fn sessions(launch_if_none: bool) -> Result, String> { let mut available = descriptors()?; if available.is_empty() && launch_if_none { - let mut child = start_gui()?; + let directory = automation_dir()?; + // A concurrent caller may already be starting the GUI: wait for its + // descriptor instead of spawning another window. + let claimed = try_claim_startup_lock(&directory, std::process::id() as u64); + let mut child = if claimed { + Some(start_gui()?) + } else { + None + }; let deadline = Instant::now() + Duration::from_secs(30); while Instant::now() < deadline { - if let Some(status) = child.try_wait().map_err(|error| error.to_string())? { - return Err(format!("OpenCADStudio exited while starting ({status})")); + if let Some(child) = child.as_mut() { + if let Some(status) = child.try_wait().map_err(|error| error.to_string())? { + if claimed { + release_startup_lock(&directory); + } + return Err(format!("OpenCADStudio exited while starting ({status})")); + } } thread::sleep(Duration::from_millis(200)); available = descriptors()?; @@ -542,11 +775,17 @@ fn sessions(launch_if_none: bool) -> Result, String> { break; } } + if claimed { + release_startup_lock(&directory); + } if available.is_empty() { return Err("OpenCADStudio is still starting; call ocs_sessions again".into()); } } - Ok(available.into_iter().map(|(_, state)| state).collect()) + Ok(available + .into_iter() + .map(|(_, state)| with_bridge_identity(state)) + .collect()) } fn insert_default(object: &mut Map, key: &str, value: Value) { @@ -1273,7 +1512,12 @@ fn call_tool( .cloned() .unwrap_or_default(); request.insert("op".into(), Value::String(op.into())); - client(clients, session_id)?.request(Value::Object(request), 30.0) + let response = client(clients, session_id)?.request(Value::Object(request), 30.0)?; + if matches!(op, "hello" | "capabilities") { + Ok(with_bridge_identity(response)) + } else { + Ok(response) + } } "ocs_execute" => { let session_id = required_string(arguments, "ocs_session_id")?; @@ -1730,23 +1974,28 @@ fn tool_result(value: Value) -> Value { "isError": false }); } - let structured = if value.is_object() { - value.clone() - } else { - json!({"result":value.clone()}) - }; - json!({ + let is_err = value["ok"].as_bool() == Some(false); + let mut result = json!({ "content":[{"type":"text","text":value.to_string()}], - "structuredContent":structured, - "isError":value["ok"].as_bool() == Some(false) - }) + "isError": is_err, + }); + // Strict clients validate structuredContent against outputSchema, which + // only describes successful results. Omitting it on errors keeps the real + // message visible instead of masked by a schema complaint. + if !is_err { + result["structuredContent"] = if value.is_object() { + value.clone() + } else { + json!({"result":value.clone()}) + }; + } + result } fn error_result(message: impl ToString) -> Value { let message = message.to_string(); json!({ - "content":[{"type":"text","text":message.clone()}], - "structuredContent":{"ok":false,"status":"failed","code":"invalid_arguments","error":message,"retryable":false}, + "content":[{"type":"text","text":message}], "isError":true }) } @@ -1756,7 +2005,49 @@ fn response(id: Value, result: Value) -> Value { } fn server_info() -> Value { - json!({"name":"OpenCADStudio","title":"Open CAD Studio","version":env!("OCS_APP_VERSION")}) + json!({ + "name":"OpenCADStudio", + "title":"Open CAD Studio", + "version":env!("OCS_APP_VERSION"), + "build_rev":env!("OCS_GIT_REV"), + "build_profile":env!("OCS_BUILD_PROFILE"), + "tool_schema":tool_schema_digest(), + }) +} + +/// Build identity agents CAN see. MCP `serverInfo` never reaches tool +/// callers, so the same fields ride on handshake payloads (`ocs_sessions` +/// states, `hello`/`capabilities` responses) under the `bridge` key. +fn bridge_identity() -> Value { + json!({ + "name":"OpenCADStudio", + "version":env!("OCS_APP_VERSION"), + "build_rev":env!("OCS_GIT_REV"), + "build_profile":env!("OCS_BUILD_PROFILE"), + "tool_schema":tool_schema_digest(), + }) +} + +/// Stamp a `bridge` identity onto a handshake payload. Non-objects pass +/// through untouched; an existing `bridge` key (GUI-provided) is kept. +fn with_bridge_identity(mut value: Value) -> Value { + if let Some(object) = value.as_object_mut() { + object + .entry("bridge") + .or_insert_with(bridge_identity); + } + value +} + +/// Sha256 hex digest of the canonical [`tool_definitions`] JSON. +/// +/// Published via [`server_info`] so MCP clients can detect a stale bridge +/// (running an older binary than the one on disk) without guessing. +fn tool_schema_digest() -> String { + let canonical = serde_json::to_string(&tool_definitions()).unwrap_or_default(); + let mut hasher = Sha256::new(); + hasher.update(canonical.as_bytes()); + format!("{:x}", hasher.finalize()) } fn modern_request(params: &Value) -> bool { @@ -2081,6 +2372,7 @@ pub fn sync_agent_tool_schemas() -> bool { /// Run the MCP stdio loop until the client closes stdin. pub fn run() { let _ = sync_agent_tool_schemas(); + let exe_stamp = exe_fingerprint(); let stdin = io::stdin(); let stdout = io::stdout(); let mut output = stdout.lock(); @@ -2091,6 +2383,10 @@ pub fn run() { stdin.lock(), crate::io::line_read::MAX_LINE_BYTES, ) { + // Serve the in-flight request with the old schema first (it was made + // against it), then exit so the client respawns a fresh bridge. This + // ordering means a rebuild never fails a call that is already running. + let superseded = exe_superseded(&exe_stamp); let response = match line { Ok(line) if !line.trim().is_empty() => match serde_json::from_str::(&line) { Ok(message) => handle_message(message, &mut clients, &mut tasks, &mut resources), @@ -2110,6 +2406,10 @@ pub fn run() { break; } } + if superseded { + eprintln!("MCP bridge superseded by rebuild; exiting for respawn"); + break; + } } } @@ -2332,8 +2632,9 @@ mod tests { ) .unwrap(); assert_eq!(called["result"]["isError"], true); + assert!(called["result"].get("structuredContent").is_none()); assert!( - called["result"]["structuredContent"]["error"] + called["result"]["content"][0]["text"] .as_str() .unwrap() .contains("request_id") @@ -2351,13 +2652,8 @@ mod tests { ) .unwrap(); assert_eq!(called["result"]["isError"], true); - assert_eq!( - called["result"]["structuredContent"]["code"], - "invalid_arguments" - ); - let error = called["result"]["structuredContent"]["error"] - .as_str() - .unwrap(); + assert!(called["result"].get("structuredContent").is_none()); + let error = called["result"]["content"][0]["text"].as_str().unwrap(); assert!(error.contains("Missing cmd"), "{error}"); assert!(error.contains("LINE 0,0 10,10"), "{error}"); } @@ -2770,7 +3066,11 @@ mod tests { "error":"Refresh state before editing" })); assert_eq!(result["isError"], true); - assert_eq!(result["structuredContent"]["code"], "stale_state"); + assert!(result.get("structuredContent").is_none()); + assert!(result["content"][0]["text"] + .as_str() + .unwrap() + .contains("stale_state")); } #[test] @@ -2897,8 +3197,7 @@ mod tests { } #[test] - fn read_op_tools_returns_current_schemas_and_instructions() { - let mut clients = HashMap::new(); + fn read_op_tools_returns_current_schemas_and_instructions() { let mut clients = HashMap::new(); let mut resources = ResourceStore::default(); let req = json!({ "name": "ocs_read", @@ -2917,4 +3216,60 @@ mod tests { assert!(result["tools"].is_array()); assert!(result["instructions"].is_string()); } + + #[test] + fn tool_schema_digest_is_pinned() { + // If this fails, the MCP tool surface changed: review the diff, then + // update TOOL_SCHEMA_DIGEST deliberately (never blindly). + assert_eq!(tool_schema_digest(), TOOL_SCHEMA_DIGEST); + } + + #[test] + fn bridge_identity_is_exposed_on_handshake_payloads() { + // Agents never see MCP serverInfo, so the build announcement must + // ride on payloads they do see: session states and hello/capabilities. + let identity = bridge_identity(); + assert_eq!(identity["name"], "OpenCADStudio"); + assert!(identity["version"].as_str().is_some()); + assert!(identity["build_rev"].as_str().is_some()); + assert!(identity["build_profile"].as_str().is_some()); + assert_eq!(identity["tool_schema"], Value::String(tool_schema_digest())); + + let stamped = with_bridge_identity(json!({"ok": true, "session_id": "s"})); + assert_eq!(stamped["bridge"]["name"], "OpenCADStudio"); + assert_eq!(stamped["ok"], true); + // Non-objects pass through untouched. + assert_eq!(with_bridge_identity(json!([1, 2])), json!([1, 2])); + } + + #[test] + fn startup_lock_serializes_concurrent_launches() { + // A fresh lock held by a live pid means another GUI is already + // starting: the second caller must wait, never spawn. + let dir = std::env::temp_dir().join(format!( + "ocs-startup-lock-test-{}-{}", + std::process::id(), + random_id().unwrap() + )); + std::fs::create_dir_all(&dir).unwrap(); + + // No lock yet: first caller claims it and may spawn. + assert!(try_claim_startup_lock(&dir, std::process::id() as u64)); + // Second caller sees the fresh live claim and must wait. + assert!(!try_claim_startup_lock(&dir, u64::MAX - 1)); + + // A stale lock (previous boot left it behind) is reclaimable. + let stale = now_unix_secs().saturating_sub(STARTUP_LOCK_TTL_SECS + 60); + write_startup_lock_at(&dir, 12345, stale).unwrap(); + assert!(try_claim_startup_lock(&dir, std::process::id() as u64)); + + // A fresh lock from a dead pid is reclaimable (crashed starter). + let fresh = now_unix_secs(); + write_startup_lock_at(&dir, u64::MAX - 2, fresh).unwrap(); + assert!(try_claim_startup_lock(&dir, std::process::id() as u64)); + + release_startup_lock(&dir); + assert!(!startup_lock_path_for(&dir).exists()); + let _ = std::fs::remove_dir_all(&dir); + } } From 71de9f844c6411aa086c2c7e39ff8e6629d2f607 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 11:13:28 +0100 Subject: [PATCH 18/43] feat(mcp): emit SEP-2549 TTL on every protocol version List results (tools/list, resources/list, resources/read) carry ttlMs and cacheScope on the legacy 2025-11-25 path too; legacy clients ignore unknown fields per the SEP's backward-compat rule. The modern envelope (resultType, _meta.serverInfo) stays negotiated. Legacy-shape pin updated deliberately to assert presence. --- src/mcp.rs | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index 7b538e934..c8ab00b89 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -2110,6 +2110,15 @@ fn poll_task( } fn protocol_result(mut result: Value, modern: bool, cacheable: bool) -> Value { + // SEP-2549 freshness hints are version-independent: legacy clients + // ignore unknown fields, so list results always carry them. The modern + // envelope (resultType/_meta) stays negotiated. + if cacheable { + if let Some(object) = result.as_object_mut() { + object.insert("ttlMs".into(), Value::from(CACHE_TTL_MS)); + object.insert("cacheScope".into(), Value::String("public".into())); + } + } if modern { let object = result .as_object_mut() @@ -2121,10 +2130,6 @@ fn protocol_result(mut result: Value, modern: bool, cacheable: bool) -> Value { "_meta".into(), json!({"io.modelcontextprotocol/serverInfo":server_info()}), ); - if cacheable { - object.insert("ttlMs".into(), Value::from(CACHE_TTL_MS)); - object.insert("cacheScope".into(), Value::String("public".into())); - } } result } @@ -2550,7 +2555,11 @@ mod tests { ) .unwrap(); assert_eq!(listed["result"]["tools"].as_array().unwrap().len(), 4); - assert!(listed["result"].get("ttlMs").is_none()); + // SEP-2549: freshness hints ship on every protocol version; only + // the modern envelope stays negotiated (see + // legacy_list_results_carry_sep2549_ttl). + assert_eq!(listed["result"]["ttlMs"], CACHE_TTL_MS); + assert_eq!(listed["result"]["cacheScope"], "public"); assert!(listed["result"].get("resultType").is_none()); } @@ -2590,6 +2599,26 @@ mod tests { assert_eq!(listed["result"]["cacheScope"], "public"); } + #[test] + fn legacy_list_results_carry_sep2549_ttl() { + // SEP-2549 makes ttlMs mandatory on list results; legacy clients + // ignore unknown fields, so the stamp is version-independent while + // the modern envelope (resultType/_meta) stays negotiated. + for method in ["tools/list", "resources/list"] { + let listed = handle_message( + json!({"jsonrpc":"2.0","id":method,"method":method}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ) + .unwrap(); + assert_eq!(listed["result"]["ttlMs"], CACHE_TTL_MS, "{method}"); + assert_eq!(listed["result"]["cacheScope"], "public", "{method}"); + assert!(listed["result"].get("resultType").is_none(), "{method}"); + assert!(listed["result"].get("_meta").is_none(), "{method}"); + } + } + #[test] fn read_tool_rejects_mutations_before_connecting() { let mut clients = HashMap::new(); From de4b47e7bd07151b12465b1d009c8a350b022670 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 11:40:21 +0100 Subject: [PATCH 19/43] fix(mcp): announce build from the entry-point tool description Global MCP instructions don't reliably reach agents (fresh sessions never announced the build). The directive now lives in the ocs_sessions description every agent reads first, pointing at the bridge object. Tool schema digest rolls to ede58332; pin updated deliberately after reviewing the description-only diff. --- src/mcp.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index c8ab00b89..e3fe9bc22 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -28,7 +28,7 @@ const MODERN_PROTOCOL_VERSION: &str = "2026-07-28"; /// changes, so schema drift (new params, renamed tools) is always a conscious, /// reviewed edit — and clients can detect a stale bridge by comparing digests. #[cfg(test)] -const TOOL_SCHEMA_DIGEST: &str = "1e9b9acbdac71b34b93aa412f279f68554da822fccf40fbb5ed6895b4397322a"; +const TOOL_SCHEMA_DIGEST: &str = "ede583324d6c78b72a54800c0287fee478863159a8c94a3872ca772092c17661"; const MAX_REQUEST: usize = 1_048_576; const MAX_RESPONSE: u64 = 16 * 1024 * 1024; const CACHE_TTL_MS: u64 = 3_600_000; @@ -1895,7 +1895,7 @@ pub(crate) fn tool_definitions() -> Value { json!([ { "name":"ocs_sessions", - "description":"List real OpenCADStudio GUI sessions and documents. Launch the installed editor if none is running.", + "description":"List real OpenCADStudio GUI sessions and documents. Launch the installed editor if none is running. On first use, announce the build to the user from the `bridge` object in each result (OpenCADStudio version, build_rev, tool_schema digest); announce again if a later call reports a different build.", "inputSchema":{"type":"object","properties":{"launch_if_none":{"type":"boolean","default":true,"description":"Launch OpenCADStudio when no live session exists."}},"additionalProperties":false}, "outputSchema":{"type":"object","properties":{"result":{"type":"array","items":{"type":"object","properties":{"ok":{"const":true},"session_id":{"type":"string"},"document_id":{"type":"integer"},"revision":{"type":"integer"},"selection":{"type":"array","items":{"type":"string"}},"documents":{"type":"array"}},"required":["ok","session_id","document_id","revision","selection","documents"],"additionalProperties":true}}},"required":["result"],"additionalProperties":false}, "annotations":{"title":"List OCS sessions","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false} @@ -2435,6 +2435,15 @@ mod tests { names, ["ocs_sessions", "ocs_read", "ocs_execute", "ocs_capture"] ); + // The build announcement must live in the entry-point tool + // description: global instructions don't reliably reach agents. + assert!( + tools[0]["description"] + .as_str() + .unwrap() + .contains("`bridge`"), + "ocs_sessions description must point at the bridge build identity" + ); assert_eq!(tools[0]["annotations"]["readOnlyHint"], false); for tool in [&tools[1], &tools[2], &tools[3]] { assert!( From 22715c9485e1fe2dc8f43582e1efa31a895f3d8d Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 11:57:44 +0100 Subject: [PATCH 20/43] refactor(mcp): spec-pure serverInfo, build identity via experimental serverInfo carries only name/title/version so strict clients never reject the handshake. Build extras (build_rev, build_profile, tool_schema) live canonically in bridge_identity, surfaced via capabilities.experimental and the in-band bridge stamp - no copies to drift. Adds conformance guards: spec-pure initialize with unknown-version fallback, and JSON-RPC errors for unknown methods, missing tool names and missing resource URIs. --- src/mcp.rs | 77 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 71 insertions(+), 6 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index e3fe9bc22..f8e79e68e 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -2004,14 +2004,15 @@ fn response(id: Value, result: Value) -> Value { json!({"jsonrpc":"2.0","id":id,"result":result}) } +/// Spec-pure implementation block: exactly name/title/version, so strict +/// clients (deny_unknown_fields, strict Zod schemas) never reject the +/// handshake. Build extras live canonically in [`bridge_identity`], +/// surfaced via `capabilities.experimental` and the in-band `bridge` stamp. fn server_info() -> Value { json!({ "name":"OpenCADStudio", "title":"Open CAD Studio", "version":env!("OCS_APP_VERSION"), - "build_rev":env!("OCS_GIT_REV"), - "build_profile":env!("OCS_BUILD_PROFILE"), - "tool_schema":tool_schema_digest(), }) } @@ -2041,8 +2042,9 @@ fn with_bridge_identity(mut value: Value) -> Value { /// Sha256 hex digest of the canonical [`tool_definitions`] JSON. /// -/// Published via [`server_info`] so MCP clients can detect a stale bridge -/// (running an older binary than the one on disk) without guessing. +/// Published via `capabilities.experimental` and the in-band [`bridge_identity`] +/// stamp so MCP clients can detect a stale bridge (running an older binary +/// than the one on disk) without guessing. fn tool_schema_digest() -> String { let canonical = serde_json::to_string(&tool_definitions()).unwrap_or_default(); let mut hasher = Sha256::new(); @@ -2187,7 +2189,8 @@ fn handle_message( "protocolVersion":protocol, "capabilities":{ "tools":{"listChanged":false}, - "resources":{"subscribe":false,"listChanged":false} + "resources":{"subscribe":false,"listChanged":false}, + "experimental":{"opencadstudio.build":bridge_identity()} }, "serverInfo":server_info(), "instructions":INSTRUCTIONS @@ -2628,6 +2631,68 @@ mod tests { } } + #[test] + fn initialize_is_spec_pure_with_experimental_build() { + // serverInfo carries only the spec'd name/title/version; build + // extras live canonically in capabilities.experimental (single + // source: bridge_identity), never copied. + let initialized = handle_message( + json!({"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25"}}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ) + .unwrap(); + let info = &initialized["result"]["serverInfo"]; + assert_eq!( + info.as_object().unwrap().keys().collect::>(), + ["name", "title", "version"] + ); + assert_eq!(info["name"], "OpenCADStudio"); + let build = &initialized["result"]["capabilities"]["experimental"]["opencadstudio.build"]; + assert_eq!(build["tool_schema"], Value::String(tool_schema_digest())); + assert!(build["build_rev"].as_str().is_some()); + assert!(build["build_profile"].as_str().is_some()); + // Unknown versions fall back to our newest instead of erroring. + let fallback = handle_message( + json!({"jsonrpc":"2.0","id":2,"method":"initialize","params":{"protocolVersion":"2099-01-01"}}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ) + .unwrap(); + assert_eq!(fallback["result"]["protocolVersion"], PROTOCOL_VERSION); + assert!(fallback.get("error").is_none()); + } + + #[test] + fn malformed_requests_get_jsonrpc_errors() { + let unknown = handle_message( + json!({"jsonrpc":"2.0","id":1,"method":"frobnicate"}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ) + .unwrap(); + assert_eq!(unknown["error"]["code"], -32601); + let nameless = handle_message( + json!({"jsonrpc":"2.0","id":2,"method":"tools/call","params":{}}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ) + .unwrap(); + assert_eq!(nameless["error"]["code"], -32602); + let uriless = handle_message( + json!({"jsonrpc":"2.0","id":3,"method":"resources/read","params":{}}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ) + .unwrap(); + assert_eq!(uriless["error"]["code"], -32602); + } + #[test] fn read_tool_rejects_mutations_before_connecting() { let mut clients = HashMap::new(); From 499b46ab4e12a50439e0e3504b86ee751d109ff4 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 12:26:58 +0100 Subject: [PATCH 21/43] fix(mcp): era-split not-found codes and -32600 for non-object input resources/read reports -32602 on the modern path (2026-07-28 forbids emitting -32002) and keeps -32002 on legacy, where it was the code. Non-object top-level input (batches included - no batch semantics defined) gets -32600 Invalid Request instead of silence, so senders never hang. Id-less objects stay silent (notifications). Ping arm deliberately untouched: the method was removed only on the modern path, and legacy health checks may rely on it. --- src/mcp.rs | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index f8e79e68e..329bae54f 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -2158,6 +2158,13 @@ fn handle_message( tasks: &mut TaskStore, resources: &mut ResourceStore, ) -> Option { + // Non-object input (batches included: the spec defines no batch + // semantics for us) is Invalid Request, never silence: a sender must + // not hang waiting for a response that will never come. Id-less + // *objects* stay silent (notifications). + if !message.is_object() { + return Some(rpc_error(Value::Null, -32600, "Invalid request: expected a JSON-RPC object")); + } let id = message.get("id").cloned(); let method = message.get("method").and_then(Value::as_str)?; if id.is_none() { @@ -2248,7 +2255,9 @@ fn handle_message( }; match read_resource(uri, clients, resources) { Ok(contents) => response(id, protocol_result(contents, modern, true)), - Err(err) => rpc_error(id, -32002, err), + // -32002 was THE not-found code in 2025-11-25 and earlier; + // 2026-07-28 says MUST NOT emit it, so modern gets -32602. + Err(err) => rpc_error(id, if modern { -32602 } else { -32002 }, err), } } "tools/list" => response( @@ -2665,6 +2674,50 @@ mod tests { assert!(fallback.get("error").is_none()); } + #[test] + fn resource_not_found_code_follows_era() { + // Modern path MUST NOT emit -32002 (2026-07-28); legacy path keeps + // it (it was the code in 2025-11-25 and earlier). + let modern = handle_message( + json!({"jsonrpc":"2.0","id":1,"method":"resources/read","params":{"uri":"cad://session/nope/snapshot/nope.png","_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ) + .unwrap(); + assert_eq!(modern["error"]["code"], -32602); + let legacy = handle_message( + json!({"jsonrpc":"2.0","id":2,"method":"resources/read","params":{"uri":"cad://session/nope/snapshot/nope.png"}}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ) + .unwrap(); + assert_eq!(legacy["error"]["code"], -32002); + } + + #[test] + fn non_object_input_is_invalid_request() { + // Batches and other non-objects get -32600 (so senders never hang) + // while id-less objects stay silent (notifications). + for bad in [json!([1, 2]), json!("tools/list"), json!(42), json!(null)] { + let rejected = handle_message( + bad, + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ); + assert_eq!(rejected.unwrap()["error"]["code"], -32600); + } + let silent = handle_message( + json!({"jsonrpc":"2.0","method":"ping"}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ); + assert!(silent.is_none()); + } + #[test] fn malformed_requests_get_jsonrpc_errors() { let unknown = handle_message( @@ -2823,7 +2876,8 @@ mod tests { let text = read_meta["result"]["contents"][0]["text"].as_str().unwrap(); assert!(text.contains("\"width\": 100")); - // Test resources/read on non-existent resource returns -32002 error + // Legacy resources/read on non-existent resource keeps -32002 + // (modern gets -32602; see resource_not_found_code_follows_era) let read_err = handle_message( json!({"jsonrpc":"2.0","id":"r-err","method":"resources/read","params":{"uri":"cad://session/sess1/snapshot/nonexistent.png"}}), &mut clients, From 5794276213cd05f627cc84f31721da7ba85cc371 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 17:02:24 +0100 Subject: [PATCH 22/43] fix(mcp): spec-exact error routing for unknown tools and infra failures Unknown tools become -32602 Protocol Errors carrying the four valid names (SEP-1303 keeps them there; the isError shape hid them from strict clients). Bridge/GUI infrastructure failures (no sessions, dead TCP, unwindable startup) become -32603 via the CallError split; tool-domain validation stays isError so the model keeps self-correcting. Verified observable in a live client session: bogus session surfaces readable -32603 naming ocs_sessions, model recovers. --- src/mcp.rs | 162 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 132 insertions(+), 30 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index 329bae54f..3368a405b 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -537,45 +537,93 @@ fn private_descriptor(_: &Path) -> bool { true } -fn exchange(descriptor: &Descriptor, request: Value, timeout: Duration) -> Result { +/// Tool-call failure split for error routing: Tool-domain failures carry +/// model-actionable guidance and stay `isError` results (SEP-1303); bridge +/// and GUI infrastructure failures (nothing the model can fix) become +/// JSON-RPC errors. `From` defaults to Tool so existing sites keep +/// working unchanged; infrastructure sites opt in explicitly. +#[derive(Debug)] +enum CallError { + Tool(String), + Infra(String), +} + +impl From for CallError { + fn from(message: String) -> Self { + CallError::Tool(message) + } +} + +impl From<&str> for CallError { + fn from(message: &str) -> Self { + CallError::Tool(message.to_string()) + } +} + +// Collapses back to String where the caller maps everything to one code +// anyway (resources/read not-found codes); the routing decision is made +// by the caller, not the classification. +impl From for String { + fn from(error: CallError) -> Self { + error.message().to_string() + } +} + +impl CallError { + fn message(&self) -> &str { + match self { + CallError::Tool(message) | CallError::Infra(message) => message, + } + } + + fn infra(message: impl ToString) -> Self { + CallError::Infra(message.to_string()) + } +} + +fn exchange(descriptor: &Descriptor, request: Value, timeout: Duration) -> Result { let mut object = request .as_object() .cloned() - .ok_or_else(|| "GUI request must be an object".to_string())?; + .ok_or_else(|| CallError::infra("GUI request must be an object"))?; object.insert("token".into(), Value::String(descriptor.token.clone())); object.insert( "session_id".into(), Value::String(descriptor.session_id.clone()), ); object.insert("protocol".into(), Value::from(1)); - let mut wire = serde_json::to_vec(&Value::Object(object)).map_err(|e| e.to_string())?; + let mut wire = serde_json::to_vec(&Value::Object(object)) + .map_err(CallError::infra)?; wire.push(b'\n'); if wire.len() > MAX_REQUEST { - return Err("Request exceeds 1 MiB".into()); + // Caller-caused (batch too big): model-actionable, stays Tool. + return Err("Request exceeds 1 MiB".to_string().into()); } let mut stream = TcpStream::connect_timeout( &SocketAddr::from(([127, 0, 0, 1], descriptor.port)), timeout, ) - .map_err(|error| error.to_string())?; + .map_err(CallError::infra)?; stream .set_read_timeout(Some(timeout)) - .map_err(|error| error.to_string())?; + .map_err(CallError::infra)?; stream .set_write_timeout(Some(timeout)) - .map_err(|error| error.to_string())?; - stream.write_all(&wire).map_err(|error| error.to_string())?; + .map_err(CallError::infra)?; + stream.write_all(&wire).map_err(CallError::infra)?; let mut response = String::new(); BufReader::new(stream) .take(MAX_RESPONSE + 1) .read_to_string(&mut response) - .map_err(|error| error.to_string())?; + .map_err(CallError::infra)?; if response.is_empty() || response.len() as u64 > MAX_RESPONSE { - return Err("No valid OCS response; query request_id before retrying a mutation".into()); + return Err(CallError::infra( + "No valid OCS response; query request_id before retrying a mutation", + )); } - serde_json::from_str(response.trim_end()).map_err(|error| error.to_string()) + serde_json::from_str(response.trim_end()).map_err(CallError::infra) } fn descriptors() -> Result, String> { @@ -795,27 +843,28 @@ fn insert_default(object: &mut Map, key: &str, value: Value) { } impl GuiClient { - fn connect(session_id: &str) -> Result { - let mut matching: Vec<_> = descriptors()? + fn connect(session_id: &str) -> Result { + let mut matching: Vec<_> = descriptors() + .map_err(CallError::Infra)? .into_iter() .filter(|(descriptor, _)| descriptor.session_id == session_id) .collect(); if matching.len() != 1 { - return Err(format!( + return Err(CallError::infra(format!( "Choose session_id from ocs_sessions; found {} matching sessions", matching.len() - )); + ))); } let (descriptor, state) = matching.remove(0); Ok(Self { descriptor, state, - client_id: random_id()?, + client_id: random_id().map_err(CallError::Infra)?, batches: VecDeque::new(), }) } - fn request(&mut self, request: Value, wait_seconds: f64) -> Result { + fn request(&mut self, request: Value, wait_seconds: f64) -> Result { let mut object = request .as_object() .cloned() @@ -876,7 +925,7 @@ impl GuiClient { Ok(response) } - fn execute_batch(&mut self, request: Value, wait_seconds: f64) -> Result { + fn execute_batch(&mut self, request: Value, wait_seconds: f64) -> Result { let id = required_string(&request, "request_id")?.to_owned(); let mut batch = if let Some(position) = self.batches.iter().position(|batch| batch.id == id) { @@ -1080,7 +1129,7 @@ fn trim_batches(batches: &mut VecDeque) { fn client<'a>( clients: &'a mut HashMap, session_id: &str, -) -> Result<&'a mut GuiClient, String> { +) -> Result<&'a mut GuiClient, CallError> { if !clients.contains_key(session_id) { clients.insert(session_id.into(), GuiClient::connect(session_id)?); } @@ -1371,7 +1420,7 @@ fn read_resource( if result["ok"].as_bool() != Some(true) || result["status"].as_str() != Some("completed") { - return Err(result.to_string()); + return Err(result.to_string().into()); } let bytes = std::fs::read(&path).map_err(|error| error.to_string())?; let _ = std::fs::remove_file(path); @@ -1487,17 +1536,17 @@ fn call_tool( arguments: &Value, clients: &mut HashMap, resources: &mut ResourceStore, -) -> Result { +) -> Result { match name { "ocs_sessions" => { let launch = arguments["launch_if_none"].as_bool().unwrap_or(true); - Ok(Value::Array(sessions(launch)?)) + Ok(Value::Array(sessions(launch).map_err(CallError::Infra)?)) } "ocs_read" => { let session_id = required_string(arguments, "ocs_session_id")?; let op = arguments["op"].as_str().unwrap_or("state"); if !READ_OPS.contains(&op) { - return Err("Use ocs_execute for mutations".into()); + return Err("Use ocs_execute for mutations".to_string().into()); } if op == "tools" { return Ok(json!({ @@ -1528,11 +1577,11 @@ fn call_tool( .ok_or_else(|| "Missing request object".to_string())?; let op = required_string(&request, "op")?; if !EXECUTE_OPS.contains(&op) { - return Err(format!("Unknown mutation operation: {op}")); + return Err(CallError::Tool(format!("Unknown mutation operation: {op}"))); } let request_id = required_string(&request, "request_id")?; if request_id.len() > 128 { - return Err("request_id must not exceed 128 bytes".into()); + return Err("request_id must not exceed 128 bytes".to_string().into()); } let val_res = validate_execute_request(&request, op)?; let wait = arguments["wait_seconds"].as_f64().unwrap_or(30.0); @@ -1551,7 +1600,7 @@ fn call_tool( ); } } - shape_execute_response(response, detail, gui) + shape_execute_response(response, detail, gui).map_err(CallError::from) } "ocs_capture" => { let session_id = required_string(arguments, "ocs_session_id")?; @@ -1665,7 +1714,8 @@ fn call_tool( if result["ok"].as_bool() != Some(true) || result["status"].as_str() != Some("completed") { - return Err(result.to_string()); + // Failed capture response from the GUI: retryable, stays Tool. + return Err(result.to_string().into()); } let bytes = std::fs::read(&path).map_err(|error| error.to_string())?; let _ = std::fs::remove_file(path); @@ -1852,7 +1902,8 @@ fn call_tool( })), } } - _ => Err(format!("Unknown tool: {name}")), + // Backstop: the dispatcher rejects unknown names first with -32602. + _ => Err(CallError::Tool(format!("Unknown tool: {name}"))), } } @@ -2105,7 +2156,7 @@ fn poll_task( task_value(task, "completed") } Err(error) => { - task.error = Some(json!({"code":-32000,"message":error})); + task.error = Some(json!({"code":-32000,"message":error.message()})); task_value(task, "failed") } } @@ -2268,6 +2319,17 @@ fn handle_message( let Some(name) = params["name"].as_str() else { return Some(rpc_error(id, -32602, "Missing tool name")); }; + // Unknown tools are Protocol Errors (-32602), never isError + // results; the valid names ride along so the model can recover. + if !["ocs_sessions", "ocs_read", "ocs_execute", "ocs_capture"].contains(&name) { + return Some(rpc_error( + id, + -32602, + format!( + "Unknown tool: {name}. Available tools: ocs_sessions, ocs_read, ocs_execute, ocs_capture" + ), + )); + } let arguments = params .get("arguments") .cloned() @@ -2308,7 +2370,13 @@ fn handle_message( } } } - let result = called.map(tool_result).unwrap_or_else(error_result); + // Tool-domain failures stay isError results (model-actionable); + // infrastructure failures become -32603 (nothing to fix in-band). + let result = match called { + Ok(value) => tool_result(value), + Err(CallError::Tool(message)) => error_result(message), + Err(CallError::Infra(message)) => return Some(rpc_error(id, -32603, message)), + }; response(id, protocol_result(result, modern, false)) } "tasks/get" if modern && supports_tasks(¶ms) => { @@ -2718,6 +2786,40 @@ mod tests { assert!(silent.is_none()); } + #[test] + fn unknown_tool_is_a_protocol_error_with_names() { + // Spec lists unknown tools under Protocol Errors (-32602). The + // message carries the valid names so the model can still recover. + let unknown = handle_message( + json!({"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ocs_frobnicate","arguments":{}}}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + ) + .unwrap(); + assert_eq!(unknown["error"]["code"], -32602); + let message = unknown["error"]["message"].as_str().unwrap(); + for name in ["ocs_sessions", "ocs_read", "ocs_execute", "ocs_capture"] { + assert!(message.contains(name), "{message}"); + } + } + + #[test] + fn infrastructure_failures_are_marked_infra() { + // A session id matching no live GUI is bridge/GUI infrastructure, + // not a tool-domain error: must route to -32603, not isError text. + let mut clients = HashMap::new(); + let mut resources = ResourceStore::default(); + let err = call_tool( + "ocs_read", + &json!({"ocs_session_id":"00000000","op":"state"}), + &mut clients, + &mut resources, + ) + .unwrap_err(); + assert!(matches!(err, CallError::Infra(_)), "got {err:?}"); + } + #[test] fn malformed_requests_get_jsonrpc_errors() { let unknown = handle_message( From b8caa5ccac8e7f060d0fb0ab69e1651ae3897d60 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 13:33:45 +0100 Subject: [PATCH 23/43] feat(mcp): cancellable waits with GUI dismiss and max wait run() reads stdin on a feeder thread into a channel (CancelPump); wait loops harvest lines in 50ms quanta instead of sleeping blind. A notifications/cancelled naming the in-flight MCP id dismisses the GUI prompt with a second cancel exchange, drops the late result, and sends nothing back. Cancels arriving between polls resolve via the inflight map; re-polls for dismissed ops answer cancelled without touching the GUI. Interactive picks (user_select/getpoint) get a 10-minute single-call ceiling ending in isError timeout text; other ops keep the 60s clamp. Ping-during-block stays unanswered while one exchange occupies the loop (bounded residual). --- src/mcp.rs | 421 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 391 insertions(+), 30 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index 3368a405b..ebf5ee2a1 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -14,6 +14,7 @@ use std::{ net::{SocketAddr, TcpStream}, path::{Path, PathBuf}, process::{Child, Command, Stdio}, + sync::mpsc::{Receiver, TryRecvError}, thread, time::{Duration, Instant, SystemTime}, }; @@ -238,6 +239,98 @@ struct GuiClient { state: Value, client_id: String, batches: VecDeque, + /// MCP request id (as string) -> GUI request id for ops still pending + /// server-side. Lets an idle-arriving `notifications/cancelled` find + /// the GUI op to dismiss. Entries leave on terminal responses and + /// dismissals; abandoned entries mirror GUI sessions that outlive + /// interest (pre-existing behavior, two small strings each). + inflight: HashMap, + /// GUI request ids dismissed by cancel/timeout: late completions and + /// re-polls answer `cancelled` without touching the GUI. Capped. + dismissed: VecDeque, +} + +/// Reader-thread inbox for stdin lines. The reader never writes: the main +/// loop (and, during waits, the wait loop) is the only consumer, so stdout +/// stays single-writer. Non-cancel lines met during a wait are stowed in +/// `backlog` and handled in order once the wait ends. +struct CancelPump { + rx: Receiver>, + backlog: VecDeque, +} + +enum PumpEvent { + Cancelled, + Quiet, +} + +impl CancelPump { + fn next(&mut self) -> Option { + if let Some(line) = self.backlog.pop_front() { + return Some(line); + } + match self.rx.recv() { + Ok(Ok(line)) => Some(line), + Ok(Err(error)) => { + eprintln!("MCP input error: {error}"); + None + } + Err(_) => None, + } + } + + /// Drain newly arrived lines for up to `quantum`: consume a cancel naming + /// `mkey`, stow everything else in order. Never blocks past the quantum. + fn wait_line(&mut self, quantum: Duration, mkey: Option<&str>) -> PumpEvent { + let deadline = Instant::now() + quantum; + loop { + match self.rx.try_recv() { + Ok(Ok(line)) => { + if mkey.is_some_and(|key| is_cancel_for(&line, key)) { + return PumpEvent::Cancelled; + } + self.backlog.push_back(line); + } + // Reader gone or input broken: end the wait quietly; the + // main loop observes the closed channel right after. + Ok(Err(_)) | Err(TryRecvError::Disconnected) => return PumpEvent::Quiet, + Err(TryRecvError::Empty) => { + if Instant::now() >= deadline { + return PumpEvent::Quiet; + } + thread::sleep(Duration::from_millis(5)); + } + } + } + } +} + +/// MCP request-id key for cancel matching. String and number ids stay +/// distinct (`7` vs `"7"`): both sides stringify the same JSON value. +fn mcp_key(id: &Value) -> String { + id.to_string() +} + +fn is_cancel_for(line: &str, mkey: &str) -> bool { + let Ok(message) = serde_json::from_str::(line) else { + return false; + }; + if message.get("method").and_then(Value::as_str) != Some("notifications/cancelled") { + return false; + } + message + .get("params") + .and_then(|params| params.get("requestId")) + .is_some_and(|id| id.to_string() == mkey) +} + +fn wait_deadline(op: &str, wait_seconds: f64) -> Duration { + let capped = if matches!(op, "user_select" | "getpoint") { + wait_seconds.clamp(0.0, INTERACTIVE_MAX_WAIT.as_secs_f64()) + } else { + wait_seconds.clamp(0.0, 60.0) + }; + Duration::from_secs_f64(capped) } struct BatchExecution { @@ -546,8 +639,15 @@ fn private_descriptor(_: &Path) -> bool { enum CallError { Tool(String), Infra(String), + /// Client cancelled the in-flight request: send nothing back. + Cancelled, } +/// Interactive picks may legitimately take a human minutes; everything else +/// keeps the 60 s clamp. This bounds a single call; agents re-poll with +/// small waits by design. +const INTERACTIVE_MAX_WAIT: Duration = Duration::from_secs(600); + impl From for CallError { fn from(message: String) -> Self { CallError::Tool(message) @@ -573,6 +673,7 @@ impl CallError { fn message(&self) -> &str { match self { CallError::Tool(message) | CallError::Infra(message) => message, + CallError::Cancelled => "cancelled by client", } } @@ -861,10 +962,41 @@ impl GuiClient { state, client_id: random_id().map_err(CallError::Infra)?, batches: VecDeque::new(), + inflight: HashMap::new(), + dismissed: VecDeque::new(), }) } - fn request(&mut self, request: Value, wait_seconds: f64) -> Result { + /// Best-effort dismiss of a GUI-pending interactive op: the GUI resolves + /// a pending `user_select`/`getpoint` as cancelled on `op == "cancel"` + /// (see `app::control`), and late completions are dropped bridge-side + /// via `dismissed`. Failures are ignored: dismissal races a GUI that may + /// already be gone, and the outcome (Cancelled/timeout) stands either way. + fn dismiss(&mut self, gui_id: Option<&str>) { + let Some(gui_id) = gui_id else { return }; + let cancel = json!({ + "op": "cancel", + "request_id": random_id().unwrap_or_else(|_| format!("cancel-{}", iso8601_now())), + "client_id": self.client_id.clone(), + "document_id": self.state["document_id"].clone(), + "revision": self.state["revision"].clone(), + }); + let _ = exchange(&self.descriptor, cancel, Duration::from_secs(5)); + if !self.dismissed.iter().any(|id| id == gui_id) { + if self.dismissed.len() >= 128 { + self.dismissed.pop_front(); + } + self.dismissed.push_back(gui_id.to_string()); + } + } + + fn request( + &mut self, + request: Value, + wait_seconds: f64, + pump: &mut CancelPump, + mcp_id: Option<&Value>, + ) -> Result { let mut object = request .as_object() .cloned() @@ -896,26 +1028,78 @@ impl GuiClient { } let request_id = object.get("request_id").cloned(); + // Re-polls for dismissed interactions answer `cancelled` without + // touching the GUI: the prompt is already gone. + if op == "operation" { + if let Some(polled) = request_id.as_ref().and_then(Value::as_str) { + if self.dismissed.iter().any(|id| id == polled) { + return Ok(json!({"ok":false,"status":"cancelled","request_id":polled})); + } + } + } let mut response = exchange( &self.descriptor, Value::Object(object), Duration::from_secs(15), )?; - let wait = wait_seconds.clamp(0.0, 60.0); - let deadline = Instant::now() + Duration::from_secs_f64(wait); + let gui_id = request_id.as_ref().and_then(Value::as_str).map(str::to_string); + let mkey = mcp_id.map(mcp_key); + // Track the GUI op while it stays pending so an idle-arriving + // cancel can find and dismiss it. Terminal outcomes remove the + // entry; deadline exits keep it (the agent re-polls and re-tracks). + if let (Some(key), Some(gui)) = (mkey.as_ref(), gui_id.as_ref()) { + self.inflight.insert(key.clone(), gui.clone()); + } + let interactive = matches!(op.as_str(), "user_select" | "getpoint"); + let deadline = Instant::now() + wait_deadline(&op, wait_seconds); while matches!(response["status"].as_str(), Some("accepted" | "running")) && Instant::now() < deadline { let Some(request_id) = request_id.clone() else { break; }; - thread::sleep(Duration::from_millis(50)); + match pump.wait_line(Duration::from_millis(50), mkey.as_deref()) { + PumpEvent::Cancelled => { + self.dismiss(gui_id.as_deref()); + if let Some(key) = mkey.as_ref() { + self.inflight.remove(key); + } + return Err(CallError::Cancelled); + } + PumpEvent::Quiet => {} + } response = exchange( &self.descriptor, json!({"op":"operation","request_id":request_id}), Duration::from_secs(15), )?; } + let terminal = !matches!(response["status"].as_str(), Some("accepted" | "running")); + if terminal { + if let Some(key) = mkey.as_ref() { + self.inflight.remove(key); + } + if interactive && response["status"].as_str() == Some("cancelled") { + if let Some(gui) = gui_id.as_ref() { + if !self.dismissed.iter().any(|id| id == gui) { + if self.dismissed.len() >= 128 { + self.dismissed.pop_front(); + } + self.dismissed.push_back(gui.clone()); + } + } + } + } else if interactive && Instant::now() >= deadline { + // Single-call ceiling for human-paced picks: dismiss the prompt + // and say so plainly instead of blocking forever. + self.dismiss(gui_id.as_deref()); + if let Some(key) = mkey.as_ref() { + self.inflight.remove(key); + } + return Err(CallError::Tool( + "timed out waiting for user (10 min); the prompt was dismissed".into(), + )); + } if response.get("state").is_some() { self.state = response["state"].clone(); } else if matches!(op.as_str(), "hello" | "state") && response["ok"].as_bool() == Some(true) @@ -925,7 +1109,13 @@ impl GuiClient { Ok(response) } - fn execute_batch(&mut self, request: Value, wait_seconds: f64) -> Result { + fn execute_batch( + &mut self, + request: Value, + wait_seconds: f64, + pump: &mut CancelPump, + mcp_id: Option<&Value>, + ) -> Result { let id = required_string(&request, "request_id")?.to_owned(); let mut batch = if let Some(position) = self.batches.iter().position(|batch| batch.id == id) { @@ -991,6 +1181,14 @@ impl GuiClient { } attempted = true; + // Cancel between steps: dismiss a pending interactive step so + // no late answer fires, then abandon the batch (cancel = stop). + if let PumpEvent::Cancelled = + pump.wait_line(Duration::ZERO, mcp_id.map(mcp_key).as_deref()) + { + self.dismiss(batch.active.as_deref()); + return Err(CallError::Cancelled); + } let step_id = batch .active .clone() @@ -1001,6 +1199,8 @@ impl GuiClient { deadline .saturating_duration_since(Instant::now()) .as_secs_f64(), + pump, + mcp_id, ) } else { let mut step = batch.steps[batch.next] @@ -1022,10 +1222,15 @@ impl GuiClient { deadline .saturating_duration_since(Instant::now()) .as_secs_f64(), + pump, + mcp_id, ) }; let response = match response { Ok(response) => response, + // Cancelled abandons the batch outright: resuming would + // re-poll a dismissed step. + Err(CallError::Cancelled) => return Err(CallError::Cancelled), Err(error) => { batch.active = Some(step_id); self.batches.push_back(batch); @@ -1224,6 +1429,7 @@ fn shape_execute_response( mut response: Value, detail: &str, gui: &mut GuiClient, + pump: &mut CancelPump, ) -> Result { if detail == "changed_entities" { let handles = response_handles(&response); @@ -1231,6 +1437,8 @@ fn shape_execute_response( let entities = gui.request( json!({"op":"query","handles":handles,"detail":"geometry","limit":MAX_BATCH_STEPS * 100}), 30.0, + pump, + None, )?; if let Some(object) = response.as_object_mut() { object.insert("changed_entities".into(), entities["entities"].clone()); @@ -1251,6 +1459,8 @@ fn read_resource( uri: &str, clients: &mut HashMap, resources: &mut ResourceStore, + pump: &mut CancelPump, + mcp_id: Option<&Value>, ) -> Result { if !uri.starts_with("cad://") { return Err(format!("Unsupported resource URI scheme: {uri}")); @@ -1416,7 +1626,8 @@ fn read_resource( "bounds": tile_bounds, "max_dimension": 512, }); - let result = client(clients, session_id)?.request(req, 20.0)?; + let result = + client(clients, session_id)?.request(req, 20.0, pump, mcp_id)?; if result["ok"].as_bool() != Some(true) || result["status"].as_str() != Some("completed") { @@ -1484,7 +1695,7 @@ fn read_resource( "max_dimension": 1600, }); let result = client(clients, session_id)? - .request(req, 15.0)?; + .request(req, 15.0, pump, mcp_id)?; if result["ok"].as_bool() != Some(true) || result["status"].as_str() != Some("completed") { @@ -1536,6 +1747,8 @@ fn call_tool( arguments: &Value, clients: &mut HashMap, resources: &mut ResourceStore, + pump: &mut CancelPump, + mcp_id: Option<&Value>, ) -> Result { match name { "ocs_sessions" => { @@ -1561,7 +1774,8 @@ fn call_tool( .cloned() .unwrap_or_default(); request.insert("op".into(), Value::String(op.into())); - let response = client(clients, session_id)?.request(Value::Object(request), 30.0)?; + let response = + client(clients, session_id)?.request(Value::Object(request), 30.0, pump, mcp_id)?; if matches!(op, "hello" | "capabilities") { Ok(with_bridge_identity(response)) } else { @@ -1588,9 +1802,9 @@ fn call_tool( let detail = arguments["response_detail"].as_str().unwrap_or("compact"); let gui = client(clients, session_id)?; let mut response = if op == "batch" { - gui.execute_batch(request, wait)? + gui.execute_batch(request, wait, pump, mcp_id)? } else { - gui.request(request, wait)? + gui.request(request, wait, pump, mcp_id)? }; if !val_res.warnings.is_empty() { if let Some(object) = response.as_object_mut() { @@ -1600,7 +1814,7 @@ fn call_tool( ); } } - shape_execute_response(response, detail, gui).map_err(CallError::from) + shape_execute_response(response, detail, gui, pump).map_err(CallError::from) } "ocs_capture" => { let session_id = required_string(arguments, "ocs_session_id")?; @@ -1710,7 +1924,7 @@ fn call_tool( req["annotate"] = json!(annotate); } let result = client(clients, session_id)? - .request(req, 30.0)?; + .request(req, 30.0, pump, mcp_id)?; if result["ok"].as_bool() != Some(true) || result["status"].as_str() != Some("completed") { @@ -2137,6 +2351,7 @@ fn poll_task( task: &mut McpTask, clients: &mut HashMap, resources: &mut ResourceStore, + pump: &mut CancelPump, ) -> Value { if task.result.is_some() { return task_value(task, "completed"); @@ -2147,7 +2362,9 @@ fn poll_task( task.last_updated_at = iso8601_now(); let mut arguments = task.arguments.clone(); arguments["wait_seconds"] = Value::from(0); - match call_tool(&task.name, &arguments, clients, resources) { + // Task re-issues are server-driven with no client wait: no MCP id to + // match cancels against, and a cancel here only means "stop polling". + match call_tool(&task.name, &arguments, clients, resources, pump, None) { Ok(value) if matches!(value["status"].as_str(), Some("accepted" | "running")) => { task_value(task, "working") } @@ -2155,6 +2372,9 @@ fn poll_task( task.result = Some(tool_result(value)); task_value(task, "completed") } + // Don't cache a cancel as failure: the client moved on, and the + // next poll simply re-issues. + Err(CallError::Cancelled) => task_value(task, "working"), Err(error) => { task.error = Some(json!({"code":-32000,"message":error.message()})); task_value(task, "failed") @@ -2208,6 +2428,7 @@ fn handle_message( clients: &mut HashMap, tasks: &mut TaskStore, resources: &mut ResourceStore, + pump: &mut CancelPump, ) -> Option { // Non-object input (batches included: the spec defines no batch // semantics for us) is Invalid Request, never silence: a sender must @@ -2304,7 +2525,7 @@ fn handle_message( let Some(uri) = params["uri"].as_str() else { return Some(rpc_error(id, -32602, "Missing resource uri")); }; - match read_resource(uri, clients, resources) { + match read_resource(uri, clients, resources, pump, Some(&id)) { Ok(contents) => response(id, protocol_result(contents, modern, true)), // -32002 was THE not-found code in 2025-11-25 and earlier; // 2026-07-28 says MUST NOT emit it, so modern gets -32602. @@ -2334,7 +2555,7 @@ fn handle_message( .get("arguments") .cloned() .unwrap_or_else(|| json!({})); - let called = call_tool(name, &arguments, clients, resources); + let called = call_tool(name, &arguments, clients, resources, pump, Some(&id)); if modern && supports_tasks(¶ms) { if let Ok(value) = &called { if matches!(value["status"].as_str(), Some("accepted" | "running")) { @@ -2371,11 +2592,13 @@ fn handle_message( } } // Tool-domain failures stay isError results (model-actionable); - // infrastructure failures become -32603 (nothing to fix in-band). + // infrastructure failures become -32603 (nothing to fix in-band); + // a cancelled request gets no response at all (spec SHOULD). let result = match called { Ok(value) => tool_result(value), Err(CallError::Tool(message)) => error_result(message), Err(CallError::Infra(message)) => return Some(rpc_error(id, -32603, message)), + Err(CallError::Cancelled) => return None, }; response(id, protocol_result(result, modern, false)) } @@ -2386,7 +2609,7 @@ fn handle_message( let Some(task) = tasks.get_mut(task_id) else { return Some(rpc_error(id, -32602, "Unknown or expired taskId")); }; - response(id, protocol_result(poll_task(task, clients, resources), true, false)) + response(id, protocol_result(poll_task(task, clients, resources, pump), true, false)) } "tasks/update" if modern && supports_tasks(¶ms) => { let Some(task_id) = params["taskId"].as_str() else { @@ -2454,33 +2677,83 @@ pub fn sync_agent_tool_schemas() -> bool { true } +/// A cancel arriving while nothing waits targets an op that is pending +/// server-side between polls: find its GUI request via the inflight map and +/// dismiss it now, so the next poll answers `cancelled`. Unknown ids are +/// ignored (spec: fire-and-forget, races expected). +fn idle_cancel(clients: &mut HashMap, params: &Value) { + let Some(key) = params + .get("requestId") + .map(|id| id.to_string()) + else { + return; + }; + for gui in clients.values_mut() { + if let Some(gui_id) = gui.inflight.remove(&key) { + gui.dismiss(Some(&gui_id)); + } + } +} + /// Run the MCP stdio loop until the client closes stdin. +/// +/// A reader thread feeds lines through a channel so wait loops can observe +/// `notifications/cancelled` mid-wait (see [`CancelPump`]). The reader never +/// writes: this loop is the only stdout writer. pub fn run() { let _ = sync_agent_tool_schemas(); let exe_stamp = exe_fingerprint(); - let stdin = io::stdin(); let stdout = io::stdout(); let mut output = stdout.lock(); let mut clients = HashMap::new(); let mut tasks = TaskStore::default(); let mut resources = ResourceStore::default(); - for line in crate::io::line_read::lines_capped( - stdin.lock(), - crate::io::line_read::MAX_LINE_BYTES, - ) { + let (tx, rx) = std::sync::mpsc::channel::>(); + let stdin = io::stdin(); + thread::spawn(move || { + for line in crate::io::line_read::lines_capped( + stdin.lock(), + crate::io::line_read::MAX_LINE_BYTES, + ) { + if tx.send(line.map_err(|error| error.to_string())).is_err() { + break; + } + } + }); + let mut pump = CancelPump { + rx, + backlog: VecDeque::new(), + }; + loop { + let Some(line) = pump.next() else { + break; + }; // Serve the in-flight request with the old schema first (it was made // against it), then exit so the client respawns a fresh bridge. This // ordering means a rebuild never fails a call that is already running. let superseded = exe_superseded(&exe_stamp); - let response = match line { - Ok(line) if !line.trim().is_empty() => match serde_json::from_str::(&line) { - Ok(message) => handle_message(message, &mut clients, &mut tasks, &mut resources), + let response = if line.trim().is_empty() { + None + } else { + match serde_json::from_str::(&line) { + Ok(message) => { + if message.get("id").is_none() + && message.get("method").and_then(Value::as_str) + == Some("notifications/cancelled") + { + idle_cancel(&mut clients, &message["params"]); + None + } else { + handle_message( + message, + &mut clients, + &mut tasks, + &mut resources, + &mut pump, + ) + } + } Err(error) => Some(rpc_error(Value::Null, -32700, error)), - }, - Ok(_) => None, - Err(error) => { - eprintln!("MCP input error: {error}"); - break; } }; if let Some(response) = response { @@ -2502,6 +2775,16 @@ pub fn run() { mod tests { use super::*; + /// A pump with no reader: waits behave exactly as before (quiet + /// immediately), so tests that never cancel need no other changes. + fn detached_pump() -> CancelPump { + let (_tx, rx) = std::sync::mpsc::channel(); + CancelPump { + rx, + backlog: VecDeque::new(), + } + } + #[test] fn advertises_the_shared_tools() { let tools = tool_definitions(); @@ -2622,6 +2905,7 @@ mod tests { &mut clients, &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(initialized["result"]["protocolVersion"], "2025-11-25"); @@ -2641,6 +2925,7 @@ mod tests { &mut clients, &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(listed["result"]["tools"].as_array().unwrap().len(), 4); @@ -2660,6 +2945,7 @@ mod tests { &mut clients, &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(discovered["result"]["resultType"], "complete"); @@ -2681,6 +2967,7 @@ mod tests { &mut clients, &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(listed["result"]["resultType"], "complete"); @@ -2699,6 +2986,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(listed["result"]["ttlMs"], CACHE_TTL_MS, "{method}"); @@ -2718,6 +3006,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); let info = &initialized["result"]["serverInfo"]; @@ -2736,6 +3025,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(fallback["result"]["protocolVersion"], PROTOCOL_VERSION); @@ -2751,6 +3041,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(modern["error"]["code"], -32602); @@ -2759,6 +3050,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(legacy["error"]["code"], -32002); @@ -2774,6 +3066,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ); assert_eq!(rejected.unwrap()["error"]["code"], -32600); } @@ -2782,6 +3075,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ); assert!(silent.is_none()); } @@ -2795,6 +3089,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(unknown["error"]["code"], -32602); @@ -2815,11 +3110,60 @@ mod tests { &json!({"ocs_session_id":"00000000","op":"state"}), &mut clients, &mut resources, + &mut detached_pump(), + None, ) .unwrap_err(); assert!(matches!(err, CallError::Infra(_)), "got {err:?}"); } + #[test] + fn cancelled_notifications_are_accepted_silently() { + // No response to notifications, even for cancel (nothing in flight + // in a unit test; live waits honor it — see wait_deadline below). + let silent = handle_message( + json!({"jsonrpc":"2.0","method":"notifications/cancelled","params":{"requestId":7}}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + &mut detached_pump(), + ); + assert!(silent.is_none()); + } + + #[test] + fn cancel_matching_and_wait_deadlines() { + // Only a cancel naming our in-flight MCP id counts; anything else + // (other ids, pings, results) is ignored by the wait, not eaten. + assert!(is_cancel_for( + r#"{"jsonrpc":"2.0","method":"notifications/cancelled","params":{"requestId":7}}"#, + "7" + )); + assert!(!is_cancel_for( + r#"{"jsonrpc":"2.0","method":"notifications/cancelled","params":{"requestId":8}}"#, + "7" + )); + assert!(!is_cancel_for( + r#"{"jsonrpc":"2.0","id":7,"method":"ping"}"#, + "7" + )); + assert!(!is_cancel_for("not json at all", "7")); + // String ids compare as strings: 7 != "7". + assert!(!is_cancel_for( + r#"{"jsonrpc":"2.0","method":"notifications/cancelled","params":{"requestId":7}}"#, + "\"7\"" + )); + // Interactive picks may legitimately take minutes; everything else + // keeps the 60 s clamp. + assert_eq!( + wait_deadline("user_select", 3600.0), + Duration::from_secs(600) + ); + assert_eq!(wait_deadline("getpoint", 5.0), Duration::from_secs(5)); + assert_eq!(wait_deadline("run", 3600.0), Duration::from_secs(60)); + assert_eq!(wait_deadline("run", 5.0), Duration::from_secs(5)); + } + #[test] fn malformed_requests_get_jsonrpc_errors() { let unknown = handle_message( @@ -2827,6 +3171,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(unknown["error"]["code"], -32601); @@ -2835,6 +3180,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(nameless["error"]["code"], -32602); @@ -2843,6 +3189,7 @@ mod tests { &mut HashMap::new(), &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(uriless["error"]["code"], -32602); @@ -2856,6 +3203,7 @@ mod tests { &mut clients, &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(called["result"]["isError"], true); @@ -2869,6 +3217,7 @@ mod tests { &mut clients, &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(rejected["error"]["code"], -32022); @@ -2887,6 +3236,7 @@ mod tests { &mut clients, &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(called["result"]["isError"], true); @@ -2907,6 +3257,7 @@ mod tests { &mut clients, &mut TaskStore::default(), &mut ResourceStore::default(), + &mut detached_pump(), ) .unwrap(); assert_eq!(called["result"]["isError"], true); @@ -2939,6 +3290,7 @@ mod tests { &mut clients, &mut tasks, &mut resources, + &mut detached_pump(), ) .unwrap(); let res_arr = listed["result"]["resources"].as_array().unwrap(); @@ -2951,6 +3303,7 @@ mod tests { &mut clients, &mut tasks, &mut resources, + &mut detached_pump(), ) .unwrap(); let contents = read_png["result"]["contents"].as_array().unwrap(); @@ -2963,6 +3316,7 @@ mod tests { &mut clients, &mut tasks, &mut resources, + &mut detached_pump(), ) .unwrap(); assert_eq!(read_latest["result"]["contents"][0]["blob"], dummy_data); @@ -2973,6 +3327,7 @@ mod tests { &mut clients, &mut tasks, &mut resources, + &mut detached_pump(), ) .unwrap(); let text = read_meta["result"]["contents"][0]["text"].as_str().unwrap(); @@ -2985,6 +3340,7 @@ mod tests { &mut clients, &mut tasks, &mut resources, + &mut detached_pump(), ) .unwrap(); assert_eq!(read_err["error"]["code"], -32002); @@ -3181,6 +3537,7 @@ mod tests { &mut clients, &mut tasks, &mut resources, + &mut detached_pump(), ) .unwrap(); let res_arr = listed["result"]["resources"].as_array().unwrap(); @@ -3193,6 +3550,7 @@ mod tests { &mut clients, &mut tasks, &mut resources, + &mut detached_pump(), ) .unwrap(); let man_contents = read_man["result"]["contents"].as_array().unwrap(); @@ -3205,6 +3563,7 @@ mod tests { &mut clients, &mut tasks, &mut resources, + &mut detached_pump(), ) .unwrap(); let tile_contents = read_tile["result"]["contents"].as_array().unwrap(); @@ -3470,6 +3829,8 @@ mod tests { &req["arguments"], &mut clients, &mut resources, + &mut detached_pump(), + None, ).expect("ocs_read op: tools must succeed"); assert_eq!(result["ok"], true); assert!(result["tools"].is_array()); From 3c751af3378da57d0addcc1dc61ce999dbf24753 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 17:02:24 +0100 Subject: [PATCH 24/43] docs(mcp): developing guide for bridge contributors How to iterate the bridge: fast builds, digest pin, session model, discovery, launch serialization, cancellation, error routing, safety model, rebuild swaps, conformance gates. No diary entries, no harness names, no build-specific data. --- docs/automation/DEVELOPING.md | 98 +++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 docs/automation/DEVELOPING.md diff --git a/docs/automation/DEVELOPING.md b/docs/automation/DEVELOPING.md new file mode 100644 index 000000000..dae5f5da8 --- /dev/null +++ b/docs/automation/DEVELOPING.md @@ -0,0 +1,98 @@ +# Developing the MCP bridge + +Operator-facing setup lives in [README.md](README.md). This note is for +contributors iterating on the bridge itself: the stdio JSON-RPC layer in +`src/mcp.rs` and the operation validators in `src/mcp_ops.rs`. + +## Fast iteration: no version bumps needed + +- Run the bridge straight from a local build: `target/debug/OpenCADStudio --mcp` + for speed, `target/release/OpenCADStudio --mcp` when close to shipping. + Both report the same handshake; only the `build_profile` field differs. +- Tool-surface changes need no version-number change. `serverInfo` carries a + content `tool_schema` digest plus the `build_rev` revision hash, so staleness + is observable without a release. +- If you change any tool schema, the `tool_schema_digest_is_pinned` test + fails: review the diff, then update `TOOL_SCHEMA_DIGEST` deliberately + (never blindly). + +## Sessions are per client connection + +Clients bind the tool surface once when they connect, so after every +rebuild, restart the client session (or reconnect its MCP servers) to pick +up the new schema. The bridge helps: it watches its own executable and, once +it detects a rebuild, finishes the in-flight request and exits, so the next +call spawns a fresh bridge. No in-flight call ever fails because of this; +at worst the following call pays one respawn. + +## Session discovery + +`ocs_sessions` reads GUI descriptor files and verifies each one is alive +before probing it: process-liveness checks come first (cached snapshots +where the OS has no process table to read), dead descriptors are deleted, +and every remaining TCP probe uses a bounded timeout. Any step that cannot +run fails open toward treating the session as alive, so a broken check can +slow discovery but never wedge it. + +Concurrent launches are serialized with `automation/starting.lock` +(`{"pid":..,"started":unix_secs}`, 60s TTL): the first `launch_if_none: true` +caller claims it and spawns the GUI, later callers with a fresh live claim +wait for the same descriptor instead of opening another window. Stale claims +and claims from dead pids are reclaimed; an unusable directory fails open so +a broken lock can never wedge launching. Covered by +`startup_lock_serializes_concurrent_launches` (claim, wait, stale-reclaim, +dead-pid-reclaim, release). + +## Cancellation + +`run()` reads stdin on a feeder thread into a channel (`CancelPump`); the +main loop stays the only stdout writer. Wait loops harvest the channel in +short quanta instead of sleeping blind. A `notifications/cancelled` naming +the in-flight request dismisses the GUI prompt with a second `{"op":"cancel"}` +exchange, drops the late result, and sends nothing back. Cancels arriving +between polls resolve through a pending-operation map; re-polls for dismissed +operations answer `cancelled` without touching the GUI. Interactive picks +(`user_select`, `getpoint`) have a ten-minute single-call ceiling ending in +an explicit timeout error; everything else keeps the one-minute clamp. + +## Error routing + +Tool-call failures are classified at the source (`CallError`): tool-domain +failures (bad arguments, failed operations) carry model-actionable guidance +and stay `isError` results; bridge and GUI infrastructure failures (no live +session, dead transport) become `-32603`; cancelled requests get no response. +Resource-not-found follows the negotiated era (`-32602` modern, `-32002` +legacy). Error results omit `structuredContent`: strict clients validate it +against `outputSchema`, which only describes success. + +## Safety model + +Never assume the client prompts before destructive calls. `ocs_execute` is +marked `destructiveHint: true`, but confirmation behavior is client-defined +and unobservable from here — server-side validation is the only safety net. +Validate every argument before touching the drawing, keep destructive and +read-only paths in separate ops, and prefer reversible effects. + +## Rebuilding while the bridge runs + +If the linker refuses to replace the binary while a bridge process runs +from it, move the running binary aside under a new name and rebuild. The +live bridge keeps serving from the moved file; restart the client +afterwards so it respawns from the fresh binary, and delete the moved file +once nothing runs from it anymore. + +## Conformance gates + +These tests hold the spec line; keep them green and extend them with every +protocol change: `tool_schema_digest_is_pinned`, +`initialize_is_spec_pure_with_experimental_build`, +`malformed_requests_get_jsonrpc_errors`, +`legacy_list_results_carry_sep2549_ttl`, +`resource_not_found_code_follows_era`, +`non_object_input_is_invalid_request`, +`unknown_tool_is_a_protocol_error_with_names`, +`cancel_matching_and_wait_deadlines`. +For end-to-end proof, run the official MCP Inspector CLI against a local +build (headless-safe methods only: `initialize`, `tools/list`, +`resources/list`, `resources/read` — anything touching the drawing needs a +live desktop session and stays in unit tests). From 709036ffcaac112226b954cb78eb872d7f810d00 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 17:27:57 +0100 Subject: [PATCH 25/43] feat(mcp): templates/list, top-level titles, deterministic resources resources/templates/list serves the two genuine parameterized URIs (pyramid tiles, snapshots) with TTL hints instead of -32601. Tool titles move top-level per the 2026-07-28 Tool shape (dropped from annotations); annotation keys are allowlist-tested. resources/list ids are sorted so client and prompt caches hit. Tool schema digest rolls to fbba987a; pin updated deliberately after reviewing the titles-only surface diff. --- src/mcp.rs | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 93 insertions(+), 5 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index ebf5ee2a1..50d143d6f 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -29,7 +29,7 @@ const MODERN_PROTOCOL_VERSION: &str = "2026-07-28"; /// changes, so schema drift (new params, renamed tools) is always a conscious, /// reviewed edit — and clients can detect a stale bridge by comparing digests. #[cfg(test)] -const TOOL_SCHEMA_DIGEST: &str = "ede583324d6c78b72a54800c0287fee478863159a8c94a3872ca772092c17661"; +const TOOL_SCHEMA_DIGEST: &str = "fbba987a0b2718920eb4f03a204eba843e29c957f09002cd0c23ce969968d5a6"; const MAX_REQUEST: usize = 1_048_576; const MAX_RESPONSE: u64 = 16 * 1024 * 1024; const CACHE_TTL_MS: u64 = 3_600_000; @@ -2163,21 +2163,21 @@ pub(crate) fn tool_definitions() -> Value { "description":"List real OpenCADStudio GUI sessions and documents. Launch the installed editor if none is running. On first use, announce the build to the user from the `bridge` object in each result (OpenCADStudio version, build_rev, tool_schema digest); announce again if a later call reports a different build.", "inputSchema":{"type":"object","properties":{"launch_if_none":{"type":"boolean","default":true,"description":"Launch OpenCADStudio when no live session exists."}},"additionalProperties":false}, "outputSchema":{"type":"object","properties":{"result":{"type":"array","items":{"type":"object","properties":{"ok":{"const":true},"session_id":{"type":"string"},"document_id":{"type":"integer"},"revision":{"type":"integer"},"selection":{"type":"array","items":{"type":"string"}},"documents":{"type":"array"}},"required":["ok","session_id","document_id","revision","selection","documents"],"additionalProperties":true}}},"required":["result"],"additionalProperties":false}, - "annotations":{"title":"List OCS sessions","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false} + "title":"List OCS sessions","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false} }, { "name":"ocs_read", "description":"Discover capabilities and record schemas, or read state, complete database records, command manifests, entities, properties, kernel measurements and spatial relationships, history, events or operation status from a live OCS session.", "inputSchema":{"type":"object","properties":{"ocs_session_id":{"type":"string","minLength":1,"description":"Value of session_id returned by ocs_sessions."},"op":{"type":"string","enum":READ_OPS,"default":"state"},"parameters":{"type":"object","description":"Operation-specific filters.","properties":{"name":{"type":"string","description":"Command name or record name."},"search":{"type":"string","description":"Case-insensitive command or record-type search."},"find":{"type":"string","description":"Text query string for text_search."},"match_case":{"type":"boolean","default":false,"description":"Case-sensitive text search."},"whole_word":{"type":"boolean","default":false,"description":"Match only whole words."},"ignore_accents":{"type":"boolean","description":"Ignore accents/diacritics in text (defaults to true when match_case is false)."},"scope":{"type":"string","enum":["all","active_space","blocks"],"default":"all","description":"Text search scope."},"system_spellcheck":{"type":"boolean","default":false,"description":"Use native OS spell-checker (Windows, macOS, Linux)."},"language":{"type":"string","description":"Language tag for spell-checker (e.g. 'fr-FR', 'en-US', 'de-DE', 'es-ES')."},"suggest":{"type":"boolean","default":true,"description":"Include suggested corrections for misspelled words."},"check_terms":{"type":"array","items":{"type":"string"},"description":"List of terms or suspect misspellings to flag in text_audit."},"dictionary":{"type":"array","items":{"type":"string"},"description":"Known valid words for text_audit dictionary check."},"pairs":{"type":"array","description":"Find/replace pairs for dry-run simulation in text_audit.","items":{"type":"object","properties":{"find":{"type":"string"},"replace":{"type":"string"}},"required":["find","replace"]}},"dry_run_pairs":{"type":"array","description":"Alias for pairs in text_audit.","items":{"type":"object","properties":{"find":{"type":"string"},"replace":{"type":"string"}},"required":["find","replace"]}},"document_id":{"type":"integer","minimum":0},"path":{"type":"string","description":"Optional intended output path for audit; extension determines target format."},"target_format":{"type":"string","enum":["dwg","dxf"],"description":"Intended output format for audit."},"target_version":{"type":"string","enum":["R14","2000","2004","2007","2010","2013","2018","AC1014","AC1015","AC1018","AC1021","AC1024","AC1027","AC1032"],"description":"Intended CAD output version for audit."},"collection":{"type":"string","description":"Record collection, all for records, or omit to discover collections and schema types."},"handle":{"type":"string"},"handles":{"type":"array","items":{"type":"string"},"description":"Exact entity or record handles."},"type":{"type":"string","description":"Entity or record type filter; for record_schema, returns its complete type graph and writable field paths."},"layer":{"type":"string","description":"Layer name filter for query."},"detail":{"type":"string","enum":["summary","geometry","full"],"default":"geometry","description":"Entity detail returned by query."},"fields":{"type":"array","items":{"type":"string"},"description":"Return only these entity fields plus handle."},"paths":{"type":"array","items":{"type":"string"},"description":"Project RFC 6901 JSON Pointer paths relative to record.properties."},"where":{"type":"array","description":"All property filters must match.","items":{"type":"object","properties":{"path":{"type":"string"},"op":{"type":"string","enum":["eq","ne","lt","lte","gt","gte","contains","starts_with","ends_with","in","exists","not_exists"],"default":"eq"},"value":{}},"required":["path"],"additionalProperties":false}},"near":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":3,"description":"Rank planar curves by exact kernel distance to this world XY point."},"point":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":3,"description":"World point whose object snap the snap op reports."},"from":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":3,"description":"Base point for perpendicular and tangent snaps (snap op)."},"contains_point":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":3,"description":"Return closed planar curves containing this world XY point."},"bounds":{"type":"array","items":{"type":"number"},"minItems":4,"maxItems":4,"description":"Filter entities whose world XY bounds overlap [min_x,min_y,max_x,max_y]."},"intersections":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2,"description":"Return exact kernel intersections between two planar curve handles."},"after":{"type":"integer","minimum":0,"description":"Event cursor."},"request_id":{"type":"string","description":"Operation id to query."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":10000}},"additionalProperties":false}},"required":["ocs_session_id"],"additionalProperties":false}, "outputSchema":read_output_schema(), - "annotations":{"title":"Read OCS state","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false} + "title":"Read OCS state","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false} }, { "name":"ocs_execute", "description":"Execute semantic OCS actions, batch drafting, and mutations. Supports batch creation (entities_create), reference image underlays (embed_image), block definitions (block_define), and block reference insertions (INSERT). MANDATORY: For architectural drafting, all doors and windows must be inserted as CAD blocks (type: INSERT), never loose lines.", "inputSchema":{"type":"object","properties":{"ocs_session_id":{"type":"string","minLength":1,"description":"Value of session_id returned by ocs_sessions."},"request":execute_request_schema(),"wait_seconds":{"type":"number","minimum":0,"maximum":60,"default":30,"description":"Total time to wait for completion before returning."},"response_detail":{"type":"string","enum":["compact","changed_entities","full"],"default":"compact","description":"compact returns only state needed for the next edit; changed_entities also returns current geometry for changed handles; full preserves the complete editor state."}},"required":["ocs_session_id","request"],"additionalProperties":false}, "outputSchema":execute_output_schema(), - "annotations":{"title":"Execute OCS action","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false} + "title":"Execute OCS action","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false} }, { "name":"ocs_capture", @@ -2203,7 +2203,7 @@ pub(crate) fn tool_definitions() -> Value { "required":["ocs_session_id"], "additionalProperties":true }, - "annotations":{"title":"Capture OCS window","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false} + "title":"Capture OCS window","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false} } ]) } @@ -2515,6 +2515,9 @@ fn handle_message( session_ids.push(k.clone()); } } + // Deterministic order: HashMap iteration is random, and stable + // ordering keeps client caches and prompt caches hitting. + session_ids.sort(); let list = resources.list_resources(&session_ids); response( id, @@ -2532,6 +2535,27 @@ fn handle_message( Err(err) => rpc_error(id, if modern { -32602 } else { -32002 }, err), } } + "resources/templates/list" => response( + id, + protocol_result( + json!({"resourceTemplates": [ + { + "uriTemplate": "cad://session/{session_id}/tile/{level}/{x}/{y}.png", + "name": "Pyramid tile", + "description": "DeepZoom viewport tile at zoom level, column x, row y.", + "mimeType": "image/png" + }, + { + "uriTemplate": "cad://session/{session_id}/snapshot/{hash}.png", + "name": "Viewport snapshot", + "description": "Captured viewport frame addressed by content hash.", + "mimeType": "image/png" + } + ]}), + modern, + true, + ), + ), "tools/list" => response( id, protocol_result(json!({"tools":tool_definitions()}), modern, true), @@ -3164,6 +3188,70 @@ mod tests { assert_eq!(wait_deadline("run", 5.0), Duration::from_secs(5)); } + #[test] + fn templates_list_serves_tile_and_snapshot_templates() { + for params in [ + json!({}), + json!({"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}), + ] { + let listed = handle_message( + json!({"jsonrpc":"2.0","id":"tpl","method":"resources/templates/list","params":params}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + &mut detached_pump(), + ) + .unwrap(); + let templates = listed["result"]["resourceTemplates"].as_array().unwrap(); + assert!(templates.iter().any(|t| t["uriTemplate"] + .as_str() + .unwrap() + .contains("{level}"))); + assert!(templates.iter().any(|t| t["uriTemplate"] + .as_str() + .unwrap() + .contains("{hash}"))); + assert_eq!(listed["result"]["ttlMs"], CACHE_TTL_MS); + assert_eq!(listed["result"]["cacheScope"], "public"); + } + } + + #[test] + fn tool_titles_are_top_level_and_annotations_allowlisted() { + // Title lives top-level (2026-07-28 Tool shape), not nested. + let tools = tool_definitions(); + for tool in tools.as_array().unwrap() { + assert!(tool["title"].as_str().is_some()); + assert!(tool["annotations"].get("title").is_none()); + let annotations = tool["annotations"].as_object().unwrap(); + for key in annotations.keys() { + assert!( + ["readOnlyHint", "destructiveHint", "idempotentHint", "openWorldHint"] + .contains(&key.as_str()), + "unexpected annotation key: {key}" + ); + } + } + } + + #[test] + fn structured_results_conform_to_their_output_schemas() { + // Spot-check the shape every schema'd result must have: an object + // carrying ok, reachable through tool_result unchanged. + let sample = json!({ + "ok": true, + "status": "completed", + "document_id": 1, + "revision": 2, + "geometry_revision": 3, + "camera_revision": 4 + }); + let result = tool_result(sample); + assert_eq!(result["isError"], false); + assert_eq!(result["structuredContent"]["ok"], true); + assert_eq!(result["structuredContent"]["revision"], 2); + } + #[test] fn malformed_requests_get_jsonrpc_errors() { let unknown = handle_message( From 8e122a4e3407582e7eaf1555b24c8eb88dc56afd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 4 Oct 2026 16:40:44 +0000 Subject: [PATCH 26/43] Release v2026.40 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aed64f835..3aadd2393 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "OpenCADStudio" -version = "2026.39.0" +version = "2026.40.0" dependencies = [ "allsorts", "ashpd", diff --git a/Cargo.toml b/Cargo.toml index bc0264dda..f44340881 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "OpenCADStudio" -version = "2026.39.0" +version = "2026.40.0" edition = "2021" build = "build.rs" default-run = "OpenCADStudio" From 4bca09c04a8f93e98d4f3b889726459fc0500f22 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 17:49:35 +0100 Subject: [PATCH 27/43] fix(mcp): honor tasks/cancel, public task error codes, schema-sync opt-out tasks/cancel marks the task so polls report terminal cancelled with neither result nor error; late completions are discarded. Task envelope errors move from grandfathered -32000 to -32603. Agent schema sync on bridge start is now skippable via OCS_SKIP_SCHEMA_SYNC and logs one line when it writes. --- src/mcp.rs | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 120 insertions(+), 4 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index 50d143d6f..7144ddf85 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -353,6 +353,9 @@ struct McpTask { last_updated_at: String, result: Option, error: Option, + /// Cooperative cancel acknowledged: polls report `cancelled` and late + /// completions are discarded (checked before result/error). + cancelled: bool, } struct StoredTask { @@ -2353,6 +2356,16 @@ fn poll_task( resources: &mut ResourceStore, pump: &mut CancelPump, ) -> Value { + if task.cancelled { + // Cancelled carries neither result nor error, even if a late + // completion landed after the cancel was acknowledged. + let mut value = task_value(task, "cancelled"); + if let Some(object) = value.as_object_mut() { + object.remove("result"); + object.remove("error"); + } + return value; + } if task.result.is_some() { return task_value(task, "completed"); } @@ -2376,7 +2389,9 @@ fn poll_task( // next poll simply re-issues. Err(CallError::Cancelled) => task_value(task, "working"), Err(error) => { - task.error = Some(json!({"code":-32000,"message":error.message()})); + // Public code: the legacy -32000 range is grandfathered, and + // new emissions stay out of it. + task.error = Some(json!({"code":-32603,"message":error.message()})); task_value(task, "failed") } } @@ -2594,6 +2609,7 @@ fn handle_message( last_updated_at: now, result: None, error: None, + cancelled: false, }); return Some(response( id, @@ -2648,9 +2664,16 @@ fn handle_message( let Some(task_id) = params["taskId"].as_str() else { return Some(rpc_error(id, -32602, "Missing taskId")); }; - if tasks.get_mut(task_id).is_none() { + let Some(task) = tasks.get_mut(task_id) else { return Some(rpc_error(id, -32602, "Unknown or expired taskId")); - } + }; + // Cooperative cancel, honored: the op is dropped (nothing + // re-issues once cancelled) and polls report the terminal + // `cancelled` state with neither result nor error. + task.cancelled = true; + task.result = None; + task.error = None; + task.last_updated_at = iso8601_now(); response(id, protocol_result(json!({}), true, false)) } _ => rpc_error(id, -32601, format!("Method not found: {method}")), @@ -2719,13 +2742,21 @@ fn idle_cancel(clients: &mut HashMap, params: &Value) { } } +/// Agent schema sync is a local convenience, not protocol: operators +/// disable it with `OCS_SKIP_SCHEMA_SYNC` set to any value. +fn schema_sync_enabled() -> bool { + std::env::var_os("OCS_SKIP_SCHEMA_SYNC").is_none() +} + /// Run the MCP stdio loop until the client closes stdin. /// /// A reader thread feeds lines through a channel so wait loops can observe /// `notifications/cancelled` mid-wait (see [`CancelPump`]). The reader never /// writes: this loop is the only stdout writer. pub fn run() { - let _ = sync_agent_tool_schemas(); + if schema_sync_enabled() && sync_agent_tool_schemas() { + eprintln!("MCP agent schemas synchronized"); + } let exe_stamp = exe_fingerprint(); let stdout = io::stdout(); let mut output = stdout.lock(); @@ -3252,6 +3283,89 @@ mod tests { assert_eq!(result["structuredContent"]["revision"], 2); } + fn modern_params() -> Value { + json!({"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{"extensions":{"io.modelcontextprotocol/tasks":{}}}}}) + } + + fn stub_task(id: &str) -> McpTask { + McpTask { + id: id.into(), + name: "ocs_read".into(), + arguments: json!({}), + created_at: iso8601_now(), + last_updated_at: iso8601_now(), + result: None, + error: None, + cancelled: false, + } + } + + #[test] + fn tasks_cancel_marks_cancelled_without_result() { + let mut tasks = TaskStore::default(); + tasks.insert(stub_task("t-cancel")); + let cancelled = handle_message( + json!({"jsonrpc":"2.0","id":"c","method":"tasks/cancel","params":{"taskId":"t-cancel","_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{"extensions":{"io.modelcontextprotocol/tasks":{}}}}}}), + &mut HashMap::new(), + &mut tasks, + &mut ResourceStore::default(), + &mut detached_pump(), + ) + .unwrap(); + assert!(cancelled.get("error").is_none()); + let mut params = modern_params(); + params["taskId"] = Value::String("t-cancel".into()); + let status = handle_message( + json!({"jsonrpc":"2.0","id":"g","method":"tasks/get","params":params}), + &mut HashMap::new(), + &mut tasks, + &mut ResourceStore::default(), + &mut detached_pump(), + ) + .unwrap(); + assert_eq!(status["result"]["status"], "cancelled"); + assert!(status["result"].get("result").is_none()); + assert!(status["result"].get("error").is_none()); + // A late completion landing after the cancel is discarded. + tasks.get_mut("t-cancel").unwrap().result = Some(json!({"ok": true})); + let mut params = modern_params(); + params["taskId"] = Value::String("t-cancel".into()); + let again = handle_message( + json!({"jsonrpc":"2.0","id":"g2","method":"tasks/get","params":params}), + &mut HashMap::new(), + &mut tasks, + &mut ResourceStore::default(), + &mut detached_pump(), + ) + .unwrap(); + assert_eq!(again["result"]["status"], "cancelled"); + assert!(again["result"].get("result").is_none()); + } + + #[test] + fn task_envelope_errors_use_public_codes() { + // The legacy -32000 range is grandfathered, not for new use. + let mut task = stub_task("t-fail"); + task.arguments = + json!({"ocs_session_id":"00000000","op":"state","wait_seconds":0}); + let failed = poll_task( + &mut task, + &mut HashMap::new(), + &mut ResourceStore::default(), + &mut detached_pump(), + ); + assert_eq!(failed["status"], "failed"); + assert_eq!(failed["error"]["code"], -32603); + } + + #[test] + fn schema_sync_respects_opt_out() { + std::env::set_var("OCS_SKIP_SCHEMA_SYNC", "1"); + assert!(!schema_sync_enabled()); + std::env::remove_var("OCS_SKIP_SCHEMA_SYNC"); + assert!(schema_sync_enabled()); + } + #[test] fn malformed_requests_get_jsonrpc_errors() { let unknown = handle_message( @@ -3729,6 +3843,7 @@ mod tests { last_updated_at: now, result: None, error: None, + cancelled: false, }; let value = task_value(&task, "working"); assert_eq!(value["resultType"], "complete"); @@ -3746,6 +3861,7 @@ mod tests { last_updated_at: iso8601_now(), result: None, error: None, + cancelled: false, }; let t0 = Instant::now(); let mut store = TaskStore::default(); From 469845df1c080d55929018b376d625c371be14af Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 18:01:11 +0100 Subject: [PATCH 28/43] fix(mcp): only the 10-minute ceiling dismisses interactive waits Short interactive waits returned a bogus 10-minute timeout on first expiry, killing the re-poll pattern and blocking task creation. The dismiss branch now fires only when the requested wait actually reaches the ceiling; shorter waits return running as before. Predicate covered by interactive_timeout asserts. --- src/mcp.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index 7144ddf85..97ea9d45d 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -333,6 +333,13 @@ fn wait_deadline(op: &str, wait_seconds: f64) -> Duration { Duration::from_secs_f64(capped) } +/// Only a wait that actually reaches the interactive ceiling dismisses the +/// prompt. Shorter waits return `running` so the agent can re-poll; without +/// this distinction the first short poll would kill every interactive op. +fn interactive_timeout(wait_seconds: f64) -> bool { + wait_seconds >= INTERACTIVE_MAX_WAIT.as_secs_f64() +} + struct BatchExecution { id: String, request: Value, @@ -1092,9 +1099,11 @@ impl GuiClient { } } } - } else if interactive && Instant::now() >= deadline { - // Single-call ceiling for human-paced picks: dismiss the prompt - // and say so plainly instead of blocking forever. + } else if interactive && interactive_timeout(wait_seconds) { + // Only the ceiling itself dismisses: short waits keep the + // classic running response so agents can re-poll. Hitting the + // ten-minute ceiling means nobody is coming: dismiss the prompt + // and say so plainly instead of parking it forever. self.dismiss(gui_id.as_deref()); if let Some(key) = mkey.as_ref() { self.inflight.remove(key); @@ -3217,6 +3226,11 @@ mod tests { assert_eq!(wait_deadline("getpoint", 5.0), Duration::from_secs(5)); assert_eq!(wait_deadline("run", 3600.0), Duration::from_secs(60)); assert_eq!(wait_deadline("run", 5.0), Duration::from_secs(5)); + // The ceiling dismisses; anything below returns running for re-poll. + assert!(!interactive_timeout(5.0)); + assert!(!interactive_timeout(599.0)); + assert!(interactive_timeout(600.0)); + assert!(interactive_timeout(3600.0)); } #[test] From 03b01e818b9fe6178327368287f8a6fb96f03ef7 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sun, 4 Oct 2026 20:42:55 +0300 Subject: [PATCH 29/43] fix(release): give rustc 1.99 enough stack; Windows build fails fast rustc 1.99 overflows its default 8 MB stack compiling the crate in release on Windows and macOS. Raise RUST_MIN_STACK to 64 MB in the cargo config and the release workflow (the latter also covers rebuilding older commits). The Windows Build step now runs in bash so a failed cargo build stops the job instead of surfacing later as a missing exe at signing. workflow_dispatch gains tag/commit inputs to rebuild a published release. Co-Authored-By: Claude Opus 5.5 --- .cargo/config.toml | 4 +++- .github/workflows/release.yml | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 56bb92897..b3e368cb6 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -30,6 +30,8 @@ rustflags = [ "-Clink-arg=/STACK:16777216", ] +# Also sizes rustc's own threads: rustc 1.99 overflows the default 8 MB +# compiling this crate in release on Windows/macOS. [env] -RUST_MIN_STACK = "8388608" +RUST_MIN_STACK = "67108864" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9769a3d7c..9b83a73a9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,9 +24,21 @@ on: options: - all - snap + # Rebuild an already-published release: tag plus the commit it points at. + tag: + description: Existing release tag to rebuild (optional) + default: '' + type: string + commit: + description: Commit the tag points at (required with tag) + default: '' + type: string env: RELEASE_TAG: ${{ inputs.tag || github.event.release.tag_name }} + # Mirrors .cargo/config.toml so rebuilding a commit that predates the bump + # still gives rustc 1.99 enough stack. + RUST_MIN_STACK: "67108864" jobs: build-appimage: @@ -238,6 +250,7 @@ jobs: - name: Build env: OCS_PATREON_TOKEN: ${{ secrets.OCS_PATREON_TOKEN }} + shell: bash run: | cargo build --locked --release cargo build --locked --release -p dwg-thumbnailer-win From 4cfcc9dc382060320cd9fa95132c1d9ab1080b7e Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sun, 4 Oct 2026 20:44:08 +0300 Subject: [PATCH 30/43] 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 --- Cargo.lock | 8 ++++---- Cargo.toml | 8 ++++---- crates/ocs_plugin_api/Cargo.toml | 4 ++-- crates/ocs_web_worker/Cargo.toml | 2 +- plugins/opencad-python/Cargo.lock | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3aadd2393..53505af48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4206,7 +4206,7 @@ dependencies = [ [[package]] name = "opencadcodec" version = "0.5.5" -source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=8d23408#8d2340876caef34f68436f62e2c9402be0aabb28" +source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=fe69506#fe69506cb99dea6f4c4a73b690a27fdf04403ea0" dependencies = [ "ahash 0.8.12", "anyhow", @@ -4229,7 +4229,7 @@ dependencies = [ [[package]] name = "opencadgraph" version = "0.1.0" -source = "git+https://github.com/HakanSeven12/opencadgraph.git?rev=9b5ae39#9b5ae39ea35567e67faf8bc8d20b40e2bbab1177" +source = "git+https://github.com/HakanSeven12/opencadgraph.git?rev=892f942#892f942dff7b3082c195df82e560ac9ff44cec3b" dependencies = [ "opencadkernel", "serde_json", @@ -4238,7 +4238,7 @@ dependencies = [ [[package]] name = "opencadkernel" version = "0.1.0" -source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=d22a270#d22a270a0af79db9f10428a2d941152f6bb28158" +source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=ae28f66#ae28f669f8a5673585c2c5c5b3617876c8b7bf98" dependencies = [ "cavalier_contours", "opencadcodec", @@ -4249,7 +4249,7 @@ dependencies = [ [[package]] name = "opencadkernel-constraints" version = "0.1.0" -source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=d22a270#d22a270a0af79db9f10428a2d941152f6bb28158" +source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=ae28f66#ae28f669f8a5673585c2c5c5b3617876c8b7bf98" dependencies = [ "nalgebra", ] diff --git a/Cargo.toml b/Cargo.toml index f44340881..bf3aea92f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,10 +34,10 @@ rfd = "0.17" clap = { version = "4", features = ["derive", "string"] } env_logger = "0.11" log = "0.4" -codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "8d23408", features = ["serde"] } -kernel = { package = "opencadkernel", git = "https://github.com/HakanSeven12/opencadkernel.git", rev = "d22a270", features = ["acis", "offset"] } -kernel-constraints = { package = "opencadkernel-constraints", git = "https://github.com/HakanSeven12/opencadkernel.git", rev = "d22a270" } -graph = { package = "opencadgraph", git = "https://github.com/HakanSeven12/opencadgraph.git", rev = "9b5ae39" } +codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "fe69506", features = ["serde"] } +kernel = { package = "opencadkernel", git = "https://github.com/HakanSeven12/opencadkernel.git", rev = "ae28f66", features = ["acis", "offset"] } +kernel-constraints = { package = "opencadkernel-constraints", git = "https://github.com/HakanSeven12/opencadkernel.git", rev = "ae28f66" } +graph = { package = "opencadgraph", git = "https://github.com/HakanSeven12/opencadgraph.git", rev = "892f942" } dwg-thumbnailer = { path = "crates/dwg-thumbnailer" } flate2 = "1" image = { version = "0.25", default-features = false, features = ["png", "jpeg", "bmp", "tiff"] } diff --git a/crates/ocs_plugin_api/Cargo.toml b/crates/ocs_plugin_api/Cargo.toml index 1edabd809..f9bcba781 100644 --- a/crates/ocs_plugin_api/Cargo.toml +++ b/crates/ocs_plugin_api/Cargo.toml @@ -15,7 +15,7 @@ serde_json = { version = "1", optional = true } # Pulled in only by the `host` feature, which adds the `opencadcodec`-typed # `HostApi` runtime surface. The default crate stays dependency-free so engine # crates and external tooling can depend on the manifest/ribbon contract cheaply. -codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "8d23408", optional = true, features = ["serde"] } +codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "fe69506", optional = true, features = ["serde"] } # Runtime IPC and serialization (host feature only). interprocess = { version = "2", optional = true } @@ -39,7 +39,7 @@ serde_json = "1" serde = { version = "1", features = ["derive"] } cargo-lock = "11" # opencadcodec is scanned at build time to generate the embedded type registry. -codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "8d23408", features = ["serde"] } +codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "fe69506", features = ["serde"] } [dev-dependencies] serde_json = "1" diff --git a/crates/ocs_web_worker/Cargo.toml b/crates/ocs_web_worker/Cargo.toml index 7635cc5d7..138128ec0 100644 --- a/crates/ocs_web_worker/Cargo.toml +++ b/crates/ocs_web_worker/Cargo.toml @@ -8,7 +8,7 @@ publish = false crate-type = ["cdylib"] [dependencies] -codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "8d23408", features = ["serde"] } +codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "fe69506", features = ["serde"] } bincode = "1.3" serde = { version = "1", features = ["derive"] } console_error_panic_hook = "0.1" diff --git a/plugins/opencad-python/Cargo.lock b/plugins/opencad-python/Cargo.lock index b03373f59..35605b2ad 100644 --- a/plugins/opencad-python/Cargo.lock +++ b/plugins/opencad-python/Cargo.lock @@ -1265,7 +1265,7 @@ dependencies = [ [[package]] name = "opencadcodec" version = "0.5.5" -source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=8d23408#8d2340876caef34f68436f62e2c9402be0aabb28" +source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=fe69506#fe69506cb99dea6f4c4a73b690a27fdf04403ea0" dependencies = [ "ahash 0.8.12", "anyhow", From d6dfd0d46d73481a47bd470813c2300cfc424690 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sun, 4 Oct 2026 20:44:08 +0300 Subject: [PATCH 31/43] fix(render): miter the joints of wide polyline bands Each band segment was a rectangle ending square at its vertex, so the outer corner of every joint showed a notch. Every segment end now carries the tangent of half its turn, and the shader slides that end's corners onto the joint's bisector so neighbours meet in a miter. Turns sharper than the limit keep butt ends. Constant-width runs inside a polyline split around its arcs no longer count as tapered, which had kept them unmitred. Fixes #1565 Co-Authored-By: Claude Opus 5.5 --- src/scene/convert/tessellate.rs | 15 +++- src/scene/pipeline/wire_gpu.rs | 127 +++++++++++++++++++++++++--- src/shaders/block_wire.wgsl | 10 ++- src/shaders/block_wire_storage.wgsl | 12 ++- src/shaders/wire.wgsl | 10 ++- src/shaders/wire_indexed.wgsl | 10 ++- 6 files changed, 161 insertions(+), 23 deletions(-) diff --git a/src/scene/convert/tessellate.rs b/src/scene/convert/tessellate.rs index 79459ef6c..917e71a3d 100644 --- a/src/scene/convert/tessellate.rs +++ b/src/scene/convert/tessellate.rs @@ -495,10 +495,17 @@ fn split_mixed_polyline( .iter() .copied() .fold(0.0f32, f32::max); - let has_line_taper = straight_widths - .first() - .map_or(false, |&w0| straight_widths.iter().any(|&w| (w - w0).abs() > 1e-6)); - let taper_widths = if has_line_taper || straight_widths.iter().any(|&w| w > 1e-6) { + // NaN breaks carry a 0 width; only real points decide whether the + // band tapers, so a constant-width run keeps its mitered joints. + let mut real_widths = line_pts + .iter() + .zip(&straight_widths) + .filter(|(p, _)| p[0].is_finite()) + .map(|(_, &w)| w); + let has_line_taper = real_widths + .next() + .map_or(false, |w0| real_widths.any(|w| (w - w0).abs() > 1e-6)); + let taper_widths = if has_line_taper { straight_widths } else { Vec::new() diff --git a/src/scene/pipeline/wire_gpu.rs b/src/scene/pipeline/wire_gpu.rs index aac7f4a3b..ee360adc4 100644 --- a/src/scene/pipeline/wire_gpu.rs +++ b/src/scene/pipeline/wire_gpu.rs @@ -71,8 +71,9 @@ pub struct WireInstance { /// Endpoint width / the per-wire maximum width, normalized by the vertex /// fetch unit. `[0, 0]` means use the constant width. Ratios retain the /// full f32 world-width scale in `WireConst` while making every instance - /// exactly one 64-byte cache line. - pub taper_ratio: [u16; 2], + /// exactly one 64-byte cache line. A constant-width band carries its + /// joint miters (`band_miters`) here instead. + pub taper_ratio: [i16; 2], } impl WireInstance { @@ -86,7 +87,7 @@ impl WireInstance { wgpu::VertexAttribute { offset: std::mem::offset_of!(WireInstance, distance_a) as u64, shader_location: 4, format: wgpu::VertexFormat::Float32 }, wgpu::VertexAttribute { offset: std::mem::offset_of!(WireInstance, distance_b) as u64, shader_location: 5, format: wgpu::VertexFormat::Float32 }, wgpu::VertexAttribute { offset: std::mem::offset_of!(WireInstance, wire_id) as u64, shader_location: 6, format: wgpu::VertexFormat::Uint32 }, - wgpu::VertexAttribute { offset: std::mem::offset_of!(WireInstance, taper_ratio) as u64, shader_location: 7, format: wgpu::VertexFormat::Unorm16x2 }, + wgpu::VertexAttribute { offset: std::mem::offset_of!(WireInstance, taper_ratio) as u64, shader_location: 7, format: wgpu::VertexFormat::Snorm16x2 }, ]; wgpu::VertexBufferLayout { array_stride: std::mem::size_of::() as u64, @@ -288,7 +289,7 @@ pub struct BlockWireVertex { pub pos_b: [f32; 3], pub pos_b_low: [f32; 3], pub distances: [f32; 2], - pub taper_ratio: [u16; 2], + pub taper_ratio: [i16; 2], } impl BlockWireVertex { @@ -299,7 +300,7 @@ impl BlockWireVertex { wgpu::VertexAttribute { offset: std::mem::offset_of!(BlockWireVertex, pos_a_low) as u64, shader_location: 2, format: wgpu::VertexFormat::Float32x3 }, wgpu::VertexAttribute { offset: std::mem::offset_of!(BlockWireVertex, pos_b_low) as u64, shader_location: 3, format: wgpu::VertexFormat::Float32x3 }, wgpu::VertexAttribute { offset: std::mem::offset_of!(BlockWireVertex, distances) as u64, shader_location: 4, format: wgpu::VertexFormat::Float32x2 }, - wgpu::VertexAttribute { offset: std::mem::offset_of!(BlockWireVertex, taper_ratio) as u64, shader_location: 5, format: wgpu::VertexFormat::Unorm16x2 }, + wgpu::VertexAttribute { offset: std::mem::offset_of!(BlockWireVertex, taper_ratio) as u64, shader_location: 5, format: wgpu::VertexFormat::Snorm16x2 }, ]; wgpu::VertexBufferLayout { array_stride: std::mem::size_of::() as u64, @@ -577,6 +578,96 @@ fn marker_metadata(wire: &WireModel) -> ([f32; 4], [f32; 4], [f32; 4]) { ) } +/// Largest |tan(turn/2)| a band joint is mitered at; sharper turns stay butt +/// ends instead of growing a long spike. Must match `MITER_LIMIT` in the wire +/// shaders, which decode the normalized value back. +pub(crate) const MITER_LIMIT: f64 = 8.0; + +/// Per-segment miter factors `[k_a, k_b]` of a constant-width world band, +/// normalized by `MITER_LIMIT`. The shader slides each quad corner by +/// `k·side·half_width` along the segment, so neighbouring segments meet on +/// their joint's bisector instead of leaving a notch at the outer corner. +/// Empty for every other wire. +fn band_miters(wire: &WireModel, normal: [f32; 4]) -> Vec<[f32; 2]> { + let n = wire.points.len(); + if wire.world_width <= 0.0 || !wire.taper_widths.is_empty() || n < 3 { + return Vec::new(); + } + let at = |i: usize| -> Option { + let h = wire.points[i]; + let l = wire.points_low.get(i).copied().unwrap_or([0.0; 3]); + finite3(h).then(|| { + glam::DVec3::new( + h[0] as f64 + l[0] as f64, + h[1] as f64 + l[1] as f64, + h[2] as f64 + l[2] as f64, + ) + }) + }; + let same = |a: glam::DVec3, b: glam::DVec3| a.distance(b) <= 1e-9 * (1.0 + a.length()); + let first = (0..n).find_map(|i| at(i).map(|p| (i, p))); + let last = (0..n).rev().find_map(|i| at(i).map(|p| (i, p))); + let closed = matches!((first, last), (Some((i, a)), Some((j, b))) if i < j && same(a, b)); + // Direction leaving joint `from` (or arriving at it when `step` walks + // back), skipping duplicate points and NaN breaks whose next run starts + // at the same joint; a closed wire wraps around once. + let neighbour = |from: usize, step: isize| -> Option { + let joint = at(from)?; + let mut i = from as isize; + let mut wrapped = false; + let mut broken = false; + loop { + i += step; + if i < 0 || i >= n as isize { + if !closed || wrapped { + return None; + } + wrapped = true; + i = if step > 0 { first?.0 as isize } else { last?.0 as isize }; + continue; + } + let Some(q) = at(i as usize) else { + broken = true; + continue; + }; + if same(q, joint) { + broken = false; + continue; + } + if broken { + return None; + } + let d = if step > 0 { q - joint } else { joint - q }; + return Some(d.normalize()); + } + }; + let axis = glam::DVec3::new(normal[0] as f64, normal[1] as f64, normal[2] as f64); + let axis = if axis.length() > 1e-4 { axis.normalize() } else { glam::DVec3::Z }; + // tan of half the signed turn from `d1` to `d2` about the band normal. + let half_turn = |d1: glam::DVec3, d2: glam::DVec3| -> f32 { + let cos = d1.dot(d2); + if cos <= -1.0 + 1e-9 { + return 0.0; + } + let t = axis.dot(d1.cross(d2)) / (1.0 + cos); + if t.abs() > MITER_LIMIT { 0.0 } else { (t / MITER_LIMIT) as f32 } + }; + (0..n - 1) + .map(|i| { + let (Some(a), Some(b)) = (at(i), at(i + 1)) else { + return [0.0; 2]; + }; + if same(a, b) { + return [0.0; 2]; + } + let d = (b - a).normalize(); + let k_a = neighbour(i, -1).map_or(0.0, |prev| half_turn(prev, d)); + let k_b = neighbour(i + 1, 1).map_or(0.0, |next| -half_turn(d, next)); + [k_a, k_b] + }) + .collect() +} + /// Emit packed per-segment instances (each carries the wire's constants). pub(crate) fn emit_wire_packed( wire: &WireModel, @@ -599,6 +690,7 @@ pub(crate) fn emit_wire_packed( (Vec::new(), 0.0, 0.0) }; let (marker_origin_high, marker_origin_low, marker_normal_scale) = marker_metadata(wire); + let miters = band_miters(wire, marker_normal_scale); let low = |i: usize| -> [f32; 3] { wire.points_low.get(i).copied().unwrap_or([0.0; 3]) }; let is_tapered = !wire.taper_widths.is_empty(); let tw = |i: usize| -> f32 { @@ -638,8 +730,17 @@ pub(crate) fn emit_wire_packed( world_half_width: wire.world_width * 0.5, world_hw_a: tw(i), world_hw_b: tw(i + 1), - marker_origin_high, - marker_origin_low, + // The origin `w` slots are free: they carry the band miters. + marker_origin_high: { + let mut m = marker_origin_high; + m[3] = miters.get(i).map_or(0.0, |k| k[0]); + m + }, + marker_origin_low: { + let mut m = marker_origin_low; + m[3] = miters.get(i).map_or(0.0, |k| k[1]); + m + }, marker_normal_scale, }); } @@ -684,14 +785,17 @@ pub(crate) fn emit_wire_native( return (Vec::new(), cst); } let low = |i: usize| -> [f32; 3] { wire.points_low.get(i).copied().unwrap_or([0.0; 3]) }; - let taper_ratio = |i: usize| -> u16 { + let snorm = |v: f32| -> i16 { (v.clamp(-1.0, 1.0) * i16::MAX as f32).round() as i16 }; + let taper_ratio = |i: usize| -> i16 { if !is_tapered || wire.world_width <= 0.0 { 0 } else { let width = wire.taper_widths.get(i).copied().unwrap_or(0.0); - ((width / wire.world_width).clamp(0.0, 1.0) * u16::MAX as f32).round() as u16 + snorm(width / wire.world_width) } }; + // A constant-width band reuses the slot for its joint miters. + let miters = band_miters(wire, marker_normal_scale); let mut instances: Vec = Vec::with_capacity(seg_count); for i in 0..seg_count { let a = wire.points[i]; @@ -712,7 +816,10 @@ pub(crate) fn emit_wire_native( distance_a: dist_a, distance_b: dist_b, wire_id, - taper_ratio: [taper_ratio(i), taper_ratio(i + 1)], + taper_ratio: match miters.get(i) { + Some(k) => [snorm(k[0]), snorm(k[1])], + None => [taper_ratio(i), taper_ratio(i + 1)], + }, }); } (instances, cst) diff --git a/src/shaders/block_wire.wgsl b/src/shaders/block_wire.wgsl index 31683b58e..8399a2c2f 100644 --- a/src/shaders/block_wire.wgsl +++ b/src/shaders/block_wire.wgsl @@ -46,6 +46,8 @@ struct VertexIn { const MODEL_LINEWEIGHT_BOOST: f32 = 2.0; const MODEL_LINEWEIGHT_MAX_PX: f32 = 10.0; +// Must match `MITER_LIMIT` in wire_gpu.rs. +const MITER_LIMIT: f32 = 8.0; struct VertexOut { @builtin(position) clip_pos: vec4, @@ -161,13 +163,17 @@ fn vs_main(@builtin(vertex_index) vertex_index: u32, in: VertexIn) -> VertexOut } perp_world = normalize(perp_world); + // A constant-width band slides each corner along the segment onto + // its joint's bisector (miter), so neighbours meet without a notch. + let miter = select(in.taper_ratio, vec2(0.0), is_tapered) * MITER_LIMIT; + let along = mix(miter.x, miter.y, which_end) * eff_hw * side; let pos_rel = mix(rel_a, rel_b, which_end); - let world_pos = pos_rel + perp_world * (eff_hw * side); + let world_pos = pos_rel + perp_world * (eff_hw * side) + world_dir * along; var clip_pos = u.view_rot * vec4(world_pos, 1.0); clip_pos = apply_draw_order(clip_pos, in.depth.x); final_clip = clip_pos; - out_dist = mix(in.distances.x, in.distances.y, which_end); + out_dist = mix(in.distances.x, in.distances.y, which_end) + along * (in.distances.y - in.distances.x) / max(world_len, 1e-6); out_cap = vec2(which_end * world_len, eff_hw * side); out_cap_ends = vec3(world_len, world_hw_a, world_hw_b); } else { diff --git a/src/shaders/block_wire_storage.wgsl b/src/shaders/block_wire_storage.wgsl index 33ee2d636..ebb5a7ea6 100644 --- a/src/shaders/block_wire_storage.wgsl +++ b/src/shaders/block_wire_storage.wgsl @@ -70,6 +70,8 @@ struct VertexIn { const MODEL_LINEWEIGHT_BOOST: f32 = 2.0; const MODEL_LINEWEIGHT_MAX_PX: f32 = 10.0; +// Must match `MITER_LIMIT` in wire_gpu.rs. +const MITER_LIMIT: f32 = 8.0; struct VertexOut { @builtin(position) clip_pos: vec4, @@ -144,7 +146,7 @@ fn vs_main(@builtin(vertex_index) vertex_index: u32, in: VertexIn) -> VertexOut let seg_pos_b = vec3(seg.pos_b_x, seg.pos_b_y, seg.pos_b_z); let seg_pos_b_low = vec3(seg.pos_b_low_x, seg.pos_b_low_y, seg.pos_b_low_z); let seg_distances = vec2(seg.distance_a, seg.distance_b); - let seg_taper_ratio = unpack2x16unorm(seg.taper_ratio); + let seg_taper_ratio = unpack2x16snorm(seg.taper_ratio); let which_end_arr = array(0.0, 1.0, 1.0, 0.0, 1.0, 0.0); let side_arr = array(-1.0, -1.0, 1.0, -1.0, 1.0, 1.0); let which_end = which_end_arr[corner]; @@ -192,13 +194,17 @@ fn vs_main(@builtin(vertex_index) vertex_index: u32, in: VertexIn) -> VertexOut } perp_world = normalize(perp_world); + // A constant-width band slides each corner along the segment onto + // its joint's bisector (miter), so neighbours meet without a notch. + let miter = select(seg_taper_ratio, vec2(0.0), is_tapered) * MITER_LIMIT; + let along = mix(miter.x, miter.y, which_end) * eff_hw * side; let pos_rel = mix(rel_a, rel_b, which_end); - let world_pos = pos_rel + perp_world * (eff_hw * side); + let world_pos = pos_rel + perp_world * (eff_hw * side) + world_dir * along; var clip_pos = u.view_rot * vec4(world_pos, 1.0); clip_pos = apply_draw_order(clip_pos, in.depth.x); final_clip = clip_pos; - out_dist = mix(seg_distances.x, seg_distances.y, which_end); + out_dist = mix(seg_distances.x, seg_distances.y, which_end) + along * (seg_distances.y - seg_distances.x) / max(world_len, 1e-6); out_cap = vec2(which_end * world_len, eff_hw * side); out_cap_ends = vec3(world_len, world_hw_a, world_hw_b); } else { diff --git a/src/shaders/wire.wgsl b/src/shaders/wire.wgsl index 69eefa06b..4d312896f 100644 --- a/src/shaders/wire.wgsl +++ b/src/shaders/wire.wgsl @@ -69,6 +69,8 @@ struct InstanceIn { const MODEL_LINEWEIGHT_BOOST: f32 = 2.0; const MODEL_LINEWEIGHT_MAX_PX: f32 = 10.0; +// Must match `MITER_LIMIT` in wire_gpu.rs. +const MITER_LIMIT: f32 = 8.0; struct VertexOut { @builtin(position) clip_pos: vec4, @@ -191,13 +193,17 @@ fn marker_relative(position_high: vec3, position_low: vec3, instance: } perp_world = normalize(perp_world); + // A constant-width band slides each corner along the segment onto + // its joint's bisector (miter), so neighbours meet without a notch. + let miter = vec2(in.marker_origin_high.w, in.marker_origin_low.w) * MITER_LIMIT; + let along = mix(miter.x, miter.y, which_end) * eff_hw * side; let pos_rel = mix(rel_a, rel_b, which_end); - let world_pos = pos_rel + perp_world * (eff_hw * side); + let world_pos = pos_rel + perp_world * (eff_hw * side) + world_dir * along; var clip_pos = u.view_rot * vec4(world_pos, 1.0); clip_pos = apply_draw_order(clip_pos, in.misc.x); final_clip = clip_pos; - out_dist = mix(in.dists.x, in.dists.y, which_end); + out_dist = mix(in.dists.x, in.dists.y, which_end) + along * (in.dists.y - in.dists.x) / max(world_len, 1e-6); out_cap = vec2(which_end * world_len, eff_hw * side); out_cap_ends = vec3(world_len, world_hw_a, world_hw_b); } else { diff --git a/src/shaders/wire_indexed.wgsl b/src/shaders/wire_indexed.wgsl index 9344b199a..680e0bcd4 100644 --- a/src/shaders/wire_indexed.wgsl +++ b/src/shaders/wire_indexed.wgsl @@ -55,6 +55,8 @@ struct InstanceIn { const MODEL_LINEWEIGHT_BOOST: f32 = 2.0; const MODEL_LINEWEIGHT_MAX_PX: f32 = 10.0; +// Must match `MITER_LIMIT` in wire_gpu.rs. +const MITER_LIMIT: f32 = 8.0; struct VertexOut { @builtin(position) clip_pos: vec4, @@ -168,13 +170,17 @@ fn marker_relative(position_high: vec3, position_low: vec3, c: WireCon } perp_world = normalize(perp_world); + // A constant-width band slides each corner along the segment onto + // its joint's bisector (miter), so neighbours meet without a notch. + let miter = select(in.taper_ratio, vec2(0.0), is_tapered) * MITER_LIMIT; + let along = mix(miter.x, miter.y, which_end) * eff_hw * side; let pos_rel = mix(rel_a, rel_b, which_end); - let world_pos = pos_rel + perp_world * (eff_hw * side); + let world_pos = pos_rel + perp_world * (eff_hw * side) + world_dir * along; var clip_pos = u.view_rot * vec4(world_pos, 1.0); clip_pos = apply_draw_order(clip_pos, c.draw_depth); final_clip = clip_pos; - out_dist = mix(in.distance_a, in.distance_b, which_end); + out_dist = mix(in.distance_a, in.distance_b, which_end) + along * (in.distance_b - in.distance_a) / max(world_len, 1e-6); out_cap = vec2(which_end * world_len, eff_hw * side); out_cap_ends = vec3(world_len, world_hw_a, world_hw_b); } else { From fd01a36ad32dae806fc74877ca90223e97c5a50b Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sun, 4 Oct 2026 20:44:08 +0300 Subject: [PATCH 32/43] fix(osnap): a POINT snaps as a Node only A point carried a key vertex, so Endpoint (which outranks Node) claimed it, and an absolute-size glyph's strokes were indexed for Nearest and Intersection. Points now offer only their Node, in the indexed and the unindexed snap paths alike. Fixes #1570 Co-Authored-By: Claude Opus 5.5 --- src/entities/point.rs | 5 +++-- src/scene/model/wire_model.rs | 5 +++++ src/scene/pick/interaction_index.rs | 2 +- src/snap.rs | 24 +++++++++++++++++++----- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/entities/point.rs b/src/entities/point.rs index fecb7b0a0..02f24a6e6 100644 --- a/src/entities/point.rs +++ b/src/entities/point.rs @@ -51,7 +51,7 @@ fn point_render(pt: &Point, pdmode: i16, s: f64) -> RenderEntity { object: RenderObject::Lines(vec![]), snap_pts: vec![(snap, SnapHint::Node)], tangent_geoms: vec![], - key_vertices: vec![[wx, wy, wz]], + key_vertices: vec![], fill_tris: vec![], }; } @@ -63,7 +63,8 @@ fn point_render(pt: &Point, pdmode: i16, s: f64) -> RenderEntity { key_vertices: if pt.thickness.abs() > 1.0e-10 { vec![[wx, wy, wz], [top.x, top.y, top.z]] } else { - vec![[wx, wy, wz]] + // Snaps as a Node only, never as an endpoint. + vec![] }, fill_tris: vec![], } diff --git a/src/scene/model/wire_model.rs b/src/scene/model/wire_model.rs index 4358d1e5c..233ee854d 100644 --- a/src/scene/model/wire_model.rs +++ b/src/scene/model/wire_model.rs @@ -744,6 +744,11 @@ impl WireModel { pub fn is_display_only(&self) -> bool { self.snap_only && self.display_visible } + /// A POINT's wire: the Node is its only snap; the glyph strokes are drawn + /// but offer no endpoints or segments to snap to. + pub fn is_node_marker(&self) -> bool { + self.key_vertices.is_empty() && matches!(self.snap_pts.as_slice(), [(_, SnapHint::Node)]) + } /// Sentinel AABB that never rejects any snap query. pub const UNBOUNDED_AABB: [f32; 4] = [ f32::NEG_INFINITY, diff --git a/src/scene/pick/interaction_index.rs b/src/scene/pick/interaction_index.rs index efc62a2cd..47f1bc15b 100644 --- a/src/scene/pick/interaction_index.rs +++ b/src/scene/pick/interaction_index.rs @@ -699,7 +699,7 @@ fn append_wire_index_entries(wire_idx: u32, wire: &WireModel, batch: &mut WireIn ); } - if wire.point_marker.is_none() { + if wire.point_marker.is_none() && !wire.is_node_marker() { for start in 0..wire.points.len().saturating_sub(1) { let Some(aabb) = points_aabb3([ wire_point(wire, start), diff --git a/src/snap.rs b/src/snap.rs index 39917f1a6..94e10234a 100644 --- a/src/snap.rs +++ b/src/snap.rs @@ -1346,10 +1346,17 @@ impl Snapper { const MAX_PAIRWISE_POINTS: usize = 3_000; let mut in_range_pts = 0usize; let mut in_range_wires = InRangeWires::new(); + // POINT wires offer only their Node; their glyph strokes stay out of + // every geometric snap below. + let mut in_range_nodes: Vec<&WireModel> = Vec::new(); let unindexed = wires.segments().is_none(); if unindexed { for w in wires.iter() { - if !w.is_display_only() && wire_in_range(w) { + if w.is_node_marker() { + if wire_in_range(w) { + in_range_nodes.push(w); + } + } else if !w.is_display_only() && wire_in_range(w) { in_range_pts += w.points.len(); in_range_wires.push(w); } @@ -1361,7 +1368,11 @@ impl Snapper { // Early out: if no unindexed wires overlap the cursor aperture and // no persistent tracking points exist, discrete/continuous object snaps // cannot hit anything. Avoid running all subsequent pass setups and loops. - if unindexed && in_range_wires.is_empty() && self.tracking_points.is_empty() { + if unindexed + && in_range_wires.is_empty() + && in_range_nodes.is_empty() + && self.tracking_points.is_empty() + { return best; } @@ -1460,7 +1471,7 @@ impl Snapper { try_snap_hint(world, hint, wire_source(wire)); } } else { - for wire in in_range_wires.iter() { + for wire in in_range_wires.iter().chain(in_range_nodes.iter().copied()) { let src = wire_source(wire); for &(world, hint) in &wire.snap_pts { try_snap_hint(world, hint, src); @@ -1489,7 +1500,10 @@ impl Snapper { // Tessellated open curves have no key-vertex set. Their only // endpoints are first/last, so testing candidate wires remains // O(local wires), independent of tessellation density. - for wire in wires.iter().filter(|wire| wire.key_vertices.is_empty()) { + for wire in wires + .iter() + .filter(|wire| wire.key_vertices.is_empty() && !wire.is_node_marker()) + { let closed = wire .snap_pts .iter() @@ -1516,7 +1530,7 @@ impl Snapper { for &point in &wire.key_vertices { try_pt(DVec3::from_array(point), SnapType::Endpoint, src, None); } - } else { + } else if !wire.is_node_marker() { let closed = wire .snap_pts .iter() From 6b5c2758e109a855f99feb586c3f0ec97f2b9f5e Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sun, 4 Oct 2026 20:44:08 +0300 Subject: [PATCH 33/43] fix(hatch): keep the association when TRIM splits a boundary Splitting a boundary object erased it and added the pieces, so the hatch lost that source and rebuilt from what was left, often the whole circle. The pieces now take over the old object's association before it is erased. Fixes #1572 Co-Authored-By: Claude Opus 5.5 --- src/app/command_driver/clipboard.rs | 11 +++++++- src/app/command_driver/mod.rs | 9 ++++--- src/scene/boundary.rs | 42 +++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/src/app/command_driver/clipboard.rs b/src/app/command_driver/clipboard.rs index d566fa7fa..74738f0f7 100644 --- a/src/app/command_driver/clipboard.rs +++ b/src/app/command_driver/clipboard.rs @@ -170,11 +170,20 @@ impl OpenCADStudio { } let label = self.history_label_from_active_cmd(i, "TRIM"); self.push_undo_snapshot(i, label); - self.tabs[i].scene.erase_entities(&[handle]); + // A replacement reusing the original handle must land after the erase; + // fresh pieces take over its hatch associations before it goes. + let reuses_handle = new_entities.iter().any(|e| e.common().handle == handle); + if reuses_handle { + self.tabs[i].scene.erase_entities(&[handle]); + } let new_handles: Vec = new_entities .into_iter() .map(|e| self.tabs[i].scene.add_entity(e)) .collect(); + if !reuses_handle { + self.tabs[i].scene.split_hatch_source(handle, &new_handles); + self.tabs[i].scene.erase_entities(&[handle]); + } // Rebuild replaced dimensions from edited data. for &nh in &new_handles { if matches!( diff --git a/src/app/command_driver/mod.rs b/src/app/command_driver/mod.rs index 21b19199e..33edae656 100644 --- a/src/app/command_driver/mod.rs +++ b/src/app/command_driver/mod.rs @@ -381,8 +381,7 @@ impl OpenCADStudio { .document .get_entity(handle) .map(|entity| entity.common().owner_handle); - self.tabs[tab].scene.erase_entities(&[handle]); - entities + let pieces: Vec = entities .into_iter() .map(|mut entity| { entity.common_mut().handle = Handle::NULL; @@ -391,7 +390,11 @@ impl OpenCADStudio { } self.tabs[tab].scene.add_entity(entity) }) - .collect() + .collect(); + // Hand the hatch associations over before the original goes. + self.tabs[tab].scene.split_hatch_source(handle, &pieces); + self.tabs[tab].scene.erase_entities(&[handle]); + pieces }; for &updated in &handles { if matches!( diff --git a/src/scene/boundary.rs b/src/scene/boundary.rs index da573722e..1c7aae65e 100644 --- a/src/scene/boundary.rs +++ b/src/scene/boundary.rs @@ -816,6 +816,48 @@ impl Scene { true } + /// A boundary source split into pieces (TRIM, BREAK): every associative + /// hatch bounded by `old` is bounded by all of `pieces` instead, so the + /// region survives `old` being erased. + pub(crate) fn split_hatch_source(&mut self, old: Handle, pieces: &[Handle]) { + if pieces.is_empty() { + return; + } + let dependents = self.associative_hatch_dependents(&std::iter::once(old).collect()); + if dependents.is_empty() { + return; + } + for &hatch_handle in &dependents { + if self.is_recording_undo() { + let before = self.document.get_entity_arc(hatch_handle); + self.record_undo_before(hatch_handle, before); + } + let Some(EntityType::Hatch(hatch)) = self.document.get_entity_mut(hatch_handle) else { + continue; + }; + for path in &mut hatch.paths { + if !path.boundary_handles.contains(&old) { + continue; + } + path.boundary_handles.retain(|source| *source != old); + for &piece in pieces { + if !path.boundary_handles.contains(&piece) { + path.boundary_handles.push(piece); + } + } + } + } + self.associative_hatch_source_cache.borrow_mut().take(); + let changes: Vec<_> = pieces + .iter() + .map(|&piece| (piece, ChangeKind::Modified)) + .collect(); + let refreshed = self.refresh_associative_hatches(&changes); + if !refreshed.is_empty() { + self.bump_entities(&refreshed); + } + } + fn associative_hatch_dependents( &self, changed: &rustc_hash::FxHashSet, From 31341e8ea21883f86beb2214b3078c5122f46c2b Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sun, 4 Oct 2026 20:44:08 +0300 Subject: [PATCH 34/43] fix(xref): bring the anonymous blocks dimensions draw from A dimension draws from its *D block by name, but loading an xref skipped anonymous blocks and kept the name verbatim, so its dimensions fell back to a regeneration (giant text at the origin) or a host block of the same name. The load path now imports them prefixed like other blocks and renames the dimension's block; BIND is unchanged. Fixes #1578 Co-Authored-By: Claude Opus 5.5 --- src/io/xref.rs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/io/xref.rs b/src/io/xref.rs index f335f4251..52027741e 100644 --- a/src/io/xref.rs +++ b/src/io/xref.rs @@ -513,8 +513,8 @@ pub(crate) fn ensure_block_entities(doc: &mut CadDocument, block_name: &str) { /// - Kept verbatim (audited, benign): linetype handles (the name carries the /// lookup), Leader `annotation_handle`, Hatch `boundary_handles`, /// `attdef_handle`, reactors, xdata, extension dictionaries, graphic data, -/// Dimension anonymous-block names (`*D…` — geometry regenerates from the -/// style), Hatch pattern names (no pattern table exists), Shape style +/// Dimension anonymous-block names on BIND (`*D…` — geometry regenerates +/// from the style), Hatch pattern names (no pattern table exists), Shape style /// names, MultiLeader line-type/arrowhead handles, Table cell internals /// (rows/cells keep xref text-style names), Viewport visual-style handles, /// SectionSymbol style handles, `Extended` entities. @@ -717,8 +717,21 @@ fn import_xref_symbols( // Nested block records: prefixed clones with cleared membership, detached // layout pointer, fresh handles (same shape as the load path always made). + // The load path also takes the anonymous pictures (`*D` dimensions, `*U` + // block representations): a dimension draws from its block by name, and + // without the copy it falls back to a host block of the same name or a + // regeneration that misses the file's own overrides. BIND keeps skipping + // them, as a `$N$` prefix would make an invalid anonymous name. + let take_anonymous = matches!(naming, SymbolNaming::MergePipe { .. }); for br in xref_doc.block_records.iter() { - if br.name.starts_with('*') || br.flags.is_xref || br.flags.is_xref_overlay { + let anonymous = br.name.starts_with('*'); + let layout_block = br.is_layout() + || br.name.eq_ignore_ascii_case("*Model_Space") + || br.name.to_ascii_lowercase().starts_with("*paper_space"); + if (anonymous && (!take_anonymous || layout_block)) + || br.flags.is_xref + || br.flags.is_xref_overlay + { continue; } let old = br.name.clone(); @@ -831,8 +844,11 @@ fn remap_xref_entity( remap_mtext_style(m, maps); } } - // ── Dim-style names (+ anonymous-block refs stay verbatim) ── - EntityType::Dimension(d) => rename(&maps.dim_styles, &mut d.base_mut().style_name), + // ── Dim-style names + the dimension's picture block ── + EntityType::Dimension(d) => { + rename(&maps.dim_styles, &mut d.base_mut().style_name); + rename(&maps.blocks, &mut d.base_mut().block_name); + } EntityType::Leader(l) => rename(&maps.dim_styles, &mut l.dimension_style), EntityType::Tolerance(t) => { rename(&maps.dim_styles, &mut t.dimension_style_name); From 440adec8347804c174451b3a39eeb4f4fa85d285 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sun, 4 Oct 2026 20:44:08 +0300 Subject: [PATCH 35/43] fix(pdf): leave out what the export window clips away Everything was written and only clipped at view time, so a window over a corner of a large drawing produced a near-empty page of several MB. Wires and hatches whose sheet bounds miss the window are now skipped. Fixes #1568 Co-Authored-By: Claude Opus 5.5 --- src/io/pdf_export.rs | 76 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/io/pdf_export.rs b/src/io/pdf_export.rs index 8609fe4e0..e497c5305 100644 --- a/src/io/pdf_export.rs +++ b/src/io/pdf_export.rs @@ -621,6 +621,23 @@ fn append_pdf_page( draw_items.push((image.image.draw_depth, 1u8, sequence, DrawItem::Image(image))); sequence += 1; } + // Everything outside the export window would only be clipped away, yet + // still written: a window over a corner of a large drawing came out as a + // blank page of several megabytes. Drop items whose ink misses the window. + if let Some((cx, cy, cw, ch)) = clip { + let marker_h = paper_h as f64 / scale.max(1e-6) as f64; + let window = [cx as f64, cy as f64, (cx + cw) as f64, (cy + ch) as f64]; + draw_items.retain(|(_, _, _, item)| { + let bounds = match item { + DrawItem::WireFill(wire) | DrawItem::Wire(wire) | DrawItem::Text(wire) => { + wire_sheet_bounds(&wire.wire, ox, oy, marker_h) + } + DrawItem::Hatch(hatch) => hatch_sheet_bounds(hatch, ox, oy), + DrawItem::Image(_) => None, + }; + bounds.is_none_or(|b| sheet_overlaps(b, window)) + }); + } draw_items.sort_by(|a, b| { a.0.total_cmp(&b.0) .then_with(|| a.1.cmp(&b.1)) @@ -928,6 +945,65 @@ fn append_pdf_page( Ok(()) } +/// Slack around the export window, in sheet mm, so a stroke whose centreline +/// sits just outside still contributes its width. +const CULL_MARGIN_MM: f64 = 10.0; + +fn sheet_overlaps(b: [f64; 4], window: [f64; 4]) -> bool { + b[0] <= window[2] + CULL_MARGIN_MM + && b[2] >= window[0] - CULL_MARGIN_MM + && b[1] <= window[3] + CULL_MARGIN_MM + && b[3] >= window[1] - CULL_MARGIN_MM +} + +fn grow(bounds: &mut Option<[f64; 4]>, x: f64, y: f64) { + if !x.is_finite() || !y.is_finite() { + return; + } + let b = bounds.get_or_insert([x, y, x, y]); + b[0] = b[0].min(x); + b[1] = b[1].min(y); + b[2] = b[2].max(x); + b[3] = b[3].max(y); +} + +/// Sheet-mm bounds of everything a wire inks (strokes, glyphs, fills). +fn wire_sheet_bounds(wire: &WireModel, ox: f64, oy: f64, marker_h: f64) -> Option<[f64; 4]> { + let mut bounds = None; + for (index, point) in wire.points.iter().enumerate() { + if point[0].is_finite() && point[1].is_finite() { + let world = wire.point_world(index, marker_h); + grow(&mut bounds, world.x + ox, world.y + oy); + } + } + for vertex in &wire.text_verts { + let [x, y] = glyph_world_xy(vertex); + grow(&mut bounds, x + ox, y + oy); + } + for (index, point) in wire.fill_tris.iter().enumerate() { + let low = wire.fill_tris_low.get(index).copied().unwrap_or([0.0; 3]); + grow( + &mut bounds, + point[0] as f64 + low[0] as f64 + ox, + point[1] as f64 + low[1] as f64 + oy, + ); + } + bounds +} + +/// Sheet-mm bounds of a hatch, resolved the way `emit_hatch` places it. +fn hatch_sheet_bounds(hatch: &HatchModel, ox: f64, oy: f64) -> Option<[f64; 4]> { + let mut bounds = None; + for &[x, y] in hatch.boundary.iter() { + grow( + &mut bounds, + x as f64 + hatch.world_origin[0] + ox, + y as f64 + hatch.world_origin[1] + oy, + ); + } + bounds +} + /// Build a PDF dash array (in points) from a WireModel linetype pattern. /// /// `pattern` holds the linetype run lengths in paper-mm: positive = dash, From f14b675ff75adf8a993c5fcc7319443bff25c502 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sun, 4 Oct 2026 20:53:11 +0300 Subject: [PATCH 36/43] fix(web): gate native-only code out of the wasm build The wasm check broke on the MCP `tools` op, the block library's folder picker and DWG thumbnails, and the PDF export-window culling helpers. Gate each one like the code around it; `read_handle` needs no gate. Co-Authored-By: Claude Opus 5.5 --- src/app/control/mod.rs | 1 + src/app/update/blocks_palette.rs | 4 ++++ src/io/pdf_export.rs | 5 +++++ src/io/thumbnail.rs | 1 - 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/app/control/mod.rs b/src/app/control/mod.rs index 5a0a19739..f77225cfd 100644 --- a/src/app/control/mod.rs +++ b/src/app/control/mod.rs @@ -528,6 +528,7 @@ impl OpenCADStudio { Task::none(), ); } + #[cfg(not(target_arch = "wasm32"))] if op == "tools" { return ( json!({ diff --git a/src/app/update/blocks_palette.rs b/src/app/update/blocks_palette.rs index 8c88eb728..003c97c78 100644 --- a/src/app/update/blocks_palette.rs +++ b/src/app/update/blocks_palette.rs @@ -77,6 +77,10 @@ impl OpenCADStudio { BlockPaletteMsg::ToggleOptions => { self.block_palette.options_collapsed ^= true; } + // Browsers expose no folder picker. + #[cfg(target_arch = "wasm32")] + BlockPaletteMsg::LibraryBrowse => {} + #[cfg(not(target_arch = "wasm32"))] BlockPaletteMsg::LibraryBrowse => { return Task::perform( async { diff --git a/src/io/pdf_export.rs b/src/io/pdf_export.rs index e497c5305..27ecc88c1 100644 --- a/src/io/pdf_export.rs +++ b/src/io/pdf_export.rs @@ -945,10 +945,12 @@ fn append_pdf_page( Ok(()) } +#[cfg(not(target_arch = "wasm32"))] /// Slack around the export window, in sheet mm, so a stroke whose centreline /// sits just outside still contributes its width. const CULL_MARGIN_MM: f64 = 10.0; +#[cfg(not(target_arch = "wasm32"))] fn sheet_overlaps(b: [f64; 4], window: [f64; 4]) -> bool { b[0] <= window[2] + CULL_MARGIN_MM && b[2] >= window[0] - CULL_MARGIN_MM @@ -956,6 +958,7 @@ fn sheet_overlaps(b: [f64; 4], window: [f64; 4]) -> bool { && b[3] >= window[1] - CULL_MARGIN_MM } +#[cfg(not(target_arch = "wasm32"))] fn grow(bounds: &mut Option<[f64; 4]>, x: f64, y: f64) { if !x.is_finite() || !y.is_finite() { return; @@ -967,6 +970,7 @@ fn grow(bounds: &mut Option<[f64; 4]>, x: f64, y: f64) { b[3] = b[3].max(y); } +#[cfg(not(target_arch = "wasm32"))] /// Sheet-mm bounds of everything a wire inks (strokes, glyphs, fills). fn wire_sheet_bounds(wire: &WireModel, ox: f64, oy: f64, marker_h: f64) -> Option<[f64; 4]> { let mut bounds = None; @@ -991,6 +995,7 @@ fn wire_sheet_bounds(wire: &WireModel, ox: f64, oy: f64, marker_h: f64) -> Optio bounds } +#[cfg(not(target_arch = "wasm32"))] /// Sheet-mm bounds of a hatch, resolved the way `emit_hatch` places it. fn hatch_sheet_bounds(hatch: &HatchModel, ox: f64, oy: f64) -> Option<[f64; 4]> { let mut bounds = None; diff --git a/src/io/thumbnail.rs b/src/io/thumbnail.rs index bdadfe6c1..be8facc71 100644 --- a/src/io/thumbnail.rs +++ b/src/io/thumbnail.rs @@ -178,7 +178,6 @@ pub fn extract_to_png(input: &std::path::Path, output: &std::path::Path, size: u /// Read a DWG's embedded preview and decode it to an iced image handle for the /// Start page's recent-file thumbnails. `None` for DXF/other files, a missing /// preview, or an undecodable format (WMF). -#[cfg(not(target_arch = "wasm32"))] pub fn read_handle(path: &std::path::Path) -> Option { let img = dwg_thumbnailer::extract(path, MAX_DIM)?; let (w, h) = (img.width(), img.height()); From 4700e263e31ac23da41fce08a797f594e97e9503 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sun, 4 Oct 2026 20:59:42 +0300 Subject: [PATCH 37/43] fix(release): rebuild old tags that predate the bundled Python plugin A dispatched rebuild checks out the tag's commit but runs main's workflow; v2026.40 has no stage-bundled.sh, so the macOS bundle step failed. Skip the plugin with a warning in that case only. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/release.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9b83a73a9..cbb3d03f0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -492,10 +492,16 @@ jobs: cp AppIcon.icns "$APP/Contents/Resources/AppIcon.icns" cp DWG.icns DXF.icns "$APP/Contents/Resources/" # First-party Python scripting plugin. It remains out of process and - # uses the same API/toolchain as this host build. - bash plugins/opencad-python/tools/stage-bundled.sh \ - "$APP/Contents/Resources/plugins/opencad.python" \ - --target aarch64-apple-darwin + # uses the same API/toolchain as this host build. A dispatched + # rebuild of a tag cut before the plugin existed ships without it. + STAGE=plugins/opencad-python/tools/stage-bundled.sh + if [ -f "$STAGE" ] || [ "${{ github.event_name }}" != workflow_dispatch ]; then + bash "$STAGE" \ + "$APP/Contents/Resources/plugins/opencad.python" \ + --target aarch64-apple-darwin + else + echo "::warning::$STAGE missing at this commit; Python plugin not bundled" + fi # QuickLook thumbnail extension. cp -R DWGThumbnail.appex "$APP/Contents/PlugIns/" # Substitute version into Info.plist. From 342e9fdf2cf9ce095f7b457b15c79f5270a8d0b1 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 19:41:56 +0100 Subject: [PATCH 38/43] ci(mcp): Inspector CLI conformance probes Runs the official MCP Inspector against a fresh release build on every push and PR: initialize purity, four titled tools, headless resources/list, both resource templates. Headless-safe methods only; drawing-dependent coverage stays in unit tests and the pinned digest. Server addressed via config file (positional CLI targets break on Windows shells); TTL assertions stay at unit level (the CLI normalizes result envelopes on output). --- .github/workflows/mcp-conformance.yml | 89 +++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 .github/workflows/mcp-conformance.yml diff --git a/.github/workflows/mcp-conformance.yml b/.github/workflows/mcp-conformance.yml new file mode 100644 index 000000000..5b15e6ecf --- /dev/null +++ b/.github/workflows/mcp-conformance.yml @@ -0,0 +1,89 @@ +name: MCP conformance + +# Strict third-party proof for the MCP bridge (src/mcp.rs): run the official +# MCP Inspector CLI against a fresh release build and assert the stable +# surface. Headless-safe methods only — anything touching the drawing needs +# a live desktop GUI and stays in unit tests plus the pinned schema digest. +# +# Two deliberate limits, both documented: +# - The server is addressed through a --config file (array-form command). +# Passing the command positionally breaks on Windows shells and can launch +# the GUI instead of the --mcp bridge. +# - Assertions cover fields the Inspector preserves (names, titles, +# templates, handshake purity). Freshness hints (ttlMs/cacheScope) are +# asserted at unit level (legacy_list_results_carry_sep2549_ttl) and by +# direct stdio probes: this CLI normalizes result envelopes on output. + +on: + push: + branches: [main] + pull_request: + +permissions: + contents: read + +concurrency: + group: mcp-conformance-${{ github.ref }} + cancel-in-progress: true + +jobs: + inspector: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + # Same libraries the Linux release build needs to start. + - name: System libraries + run: | + sudo apt-get update + sudo apt-get install -y \ + libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev libxrandr-dev \ + libxkbcommon-dev libwayland-dev libfontconfig1-dev libfreetype6-dev + + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + - uses: actions/setup-node@v4 + with: + node-version: 24 + + - name: Release build + run: cargo build --release --locked + + - name: Inspector config + run: | + printf '{"mcpServers":{"ocs":{"command":"%s/target/release/OpenCADStudio","args":["--mcp"]}}}' \ + "${{ github.workspace }}" > "${{ runner.temp }}/mcp-inspector.json" + + - name: initialize (pure serverInfo, experimental build) + run: | + npx -y @modelcontextprotocol/inspector --cli \ + --config "${{ runner.temp }}/mcp-inspector.json" --server ocs \ + --method initialize --format json 2>/dev/null | jq -e ' + .result.serverInfo.name == "OpenCADStudio" + and ((.result.serverInfo | keys_unsorted | sort) == ["name","title","version"]) + and (.result.capabilities.experimental["opencadstudio.build"].build_rev | type == "string")' + + - name: tools/list (four tools with titles) + run: | + npx -y @modelcontextprotocol/inspector --cli \ + --config "${{ runner.temp }}/mcp-inspector.json" --server ocs \ + --method tools/list --format json 2>/dev/null | jq -e ' + ([.result.tools[].name] | sort) == ["ocs_capture","ocs_execute","ocs_read","ocs_sessions"] + and ([.result.tools[].title] | length == 4)' + + - name: resources/list (reachable headless) + run: | + npx -y @modelcontextprotocol/inspector --cli \ + --config "${{ runner.temp }}/mcp-inspector.json" --server ocs \ + --method resources/list --format json 2>/dev/null | jq -e ' + (.result.resources | type == "array")' + + - name: resources/templates/list (tile and snapshot templates) + run: | + npx -y @modelcontextprotocol/inspector --cli \ + --config "${{ runner.temp }}/mcp-inspector.json" --server ocs \ + --method resources/templates/list --format json 2>/dev/null | jq -e ' + ([.result.resourceTemplates[].uriTemplate] | sort) == [ + "cad://session/{session_id}/snapshot/{hash}.png", + "cad://session/{session_id}/tile/{level}/{x}/{y}.png" + ]' From 695166d53211a6ed91fb013dff50f8abada72c28 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 21:36:04 +0100 Subject: [PATCH 39/43] fix(mcp): stop deleting newborn GUI descriptors as corpses The cached PID snapshot predates a GUI spawn, so the newborn pid missed from it read dead and the bridge deleted its just-written descriptor inside the launching call itself: every fast launch reported still-starting forever while a healthy window sat undiscoverable. Two guards: the snapshot cache is invalidated right after spawning, and deletion now waits out a 120s file-age grace (unknown age counts as newborn). Slow starters that write late were the only ones surviving before, which is why this was intermittent. Covered by stale_snapshot_may_delete predicate tests. --- src/mcp.rs | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index 97ea9d45d..9ce2cff46 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -234,6 +234,34 @@ fn live_pids_cached() -> Option> { }) } +/// Drop the cached PID snapshot so the next discovery pass enumerates +/// fresh. Called after spawning a GUI: without this, the pre-spawn snapshot +/// does not contain the newborn pid, and the corpse cleanup below would +/// delete its just-written descriptor as "dead on arrival". +#[cfg(any(windows, target_os = "macos"))] +fn live_pids_invalidate() { + PID_SNAPSHOT_CACHE.with(|cache| { + *cache.borrow_mut() = ( + Instant::now() - PID_SNAPSHOT_TTL - Duration::from_secs(1), + None, + ); + }); +} + +#[cfg(not(any(windows, target_os = "macos")))] +fn live_pids_invalidate() {} + +/// Descriptors younger than this are never deleted, even when their pid is +/// missing from the snapshot: the snapshot may predate the spawn, and slow +/// starters write late. Deletion stays for genuinely old corpses. +const DESCRIPTOR_GRACE: Duration = Duration::from_secs(120); + +/// Whether a pid missing from the snapshot authorizes deletion. Pure +/// predicate so the staleness rule is unit-testable: only old files go. +fn stale_snapshot_may_delete(missing_from_snapshot: bool, file_age: Duration) -> bool { + missing_from_snapshot && file_age >= DESCRIPTOR_GRACE +} + struct GuiClient { descriptor: Descriptor, state: Value, @@ -767,6 +795,14 @@ fn descriptors() -> Result, String> { // A dead GUI leaves its descriptor file behind; its TCP port may hang // instead of refusing, which used to stall discovery past client // timeouts. Skip (and delete) pid-verified corpses before probing. + // Deletion waits out DESCRIPTOR_GRACE: the PID snapshot may predate + // a spawn, and a newborn pid missing from it must never read "dead". + // Unknown file age counts as newborn (fail open, probe instead). + let file_age = std::fs::metadata(&path) + .and_then(|meta| meta.modified()) + .ok() + .and_then(|modified| SystemTime::now().duration_since(modified).ok()) + .unwrap_or(Duration::ZERO); let pid_dead = match descriptor.pid { Some(pid) => { #[cfg(target_os = "linux")] @@ -775,7 +811,12 @@ fn descriptors() -> Result, String> { } #[cfg(any(windows, target_os = "macos"))] { - live_pids.as_ref().is_some_and(|set| !set.contains(&pid)) + match &live_pids { + None => false, + Some(set) => { + stale_snapshot_may_delete(!set.contains(&pid), file_age) + } + } } #[cfg(not(any( target_os = "linux", @@ -914,7 +955,12 @@ fn sessions(launch_if_none: bool) -> Result, String> { // descriptor instead of spawning another window. let claimed = try_claim_startup_lock(&directory, std::process::id() as u64); let mut child = if claimed { - Some(start_gui()?) + let child = start_gui()?; + // The pre-spawn PID snapshot cannot contain the newborn GUI: + // drop it so the next discovery pass enumerates fresh instead + // of deleting the just-written descriptor as a corpse. + live_pids_invalidate(); + Some(child) } else { None }; @@ -3380,6 +3426,19 @@ mod tests { assert!(schema_sync_enabled()); } + #[test] + fn stale_snapshots_never_delete_fresh_descriptors() { + // Regression: a cached PID snapshot predates a GUI spawn, so the + // newborn pid is "missing" from it. Deletion must still wait until + // the file is older than the grace period (slow starters write + // late); unknown snapshot state never deletes either. + assert!(!stale_snapshot_may_delete(true, Duration::from_secs(0))); + assert!(!stale_snapshot_may_delete(true, Duration::from_secs(59))); + assert!(stale_snapshot_may_delete(true, Duration::from_secs(120))); + assert!(stale_snapshot_may_delete(true, Duration::from_secs(3600))); + assert!(!stale_snapshot_may_delete(false, Duration::from_secs(3600))); + } + #[test] fn malformed_requests_get_jsonrpc_errors() { let unknown = handle_message( From f03ce9ab4fea4084263e9eeb1b1c2c473103d055 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 22:45:11 +0100 Subject: [PATCH 40/43] fix(mcp): send request_id and document_id on GUI capture requests The GUI requires request_id and document_id on every non-query op, but the bridge sent neither on capture: every ocs_capture failed with request_id_required, then document_required. request() now always mints the GUI request id for capture (a client-supplied id wins and is echoed in metadata), and capture carries the active document. The op=capture read path answers guidance pointing at ocs_capture instead of a missing-path failure. Live-proven against the open window: plain and annotated captures return image content. --- src/mcp.rs | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index 9ce2cff46..73007860d 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -29,7 +29,7 @@ const MODERN_PROTOCOL_VERSION: &str = "2026-07-28"; /// changes, so schema drift (new params, renamed tools) is always a conscious, /// reviewed edit — and clients can detect a stale bridge by comparing digests. #[cfg(test)] -const TOOL_SCHEMA_DIGEST: &str = "fbba987a0b2718920eb4f03a204eba843e29c957f09002cd0c23ce969968d5a6"; +const TOOL_SCHEMA_DIGEST: &str = "bb2640277721f23e08cf17085bd9204753f810ece27abf31402be876e2c4683d"; const MAX_REQUEST: usize = 1_048_576; const MAX_RESPONSE: u64 = 16 * 1024 * 1024; const CACHE_TTL_MS: u64 = 3_600_000; @@ -1062,8 +1062,23 @@ impl GuiClient { .and_then(Value::as_str) .ok_or_else(|| "request must contain op".to_string())? .to_string(); - if !READ_OPS.contains(&op.as_str()) { + // The GUI requires request_id on every non-query op, capture + // included: without one the GUI rejects the request outright, so + // the bridge always mints one (a client-supplied id wins). + if !READ_OPS.contains(&op.as_str()) || op == "capture" { insert_default(&mut object, "request_id", Value::String(random_id()?)); + } + // Capture reads the active tab, so it needs the document the + // GUI requires on every non-query op (revision stays absent: + // the GUI only checks revisions callers supply). + if op == "capture" { + insert_default( + &mut object, + "document_id", + self.state["document_id"].clone(), + ); + } + if !READ_OPS.contains(&op.as_str()) { insert_default( &mut object, "client_id", @@ -1819,6 +1834,17 @@ fn call_tool( if !READ_OPS.contains(&op) { return Err("Use ocs_execute for mutations".to_string().into()); } + if op == "capture" { + // The GUI capture op needs a file path and lives behind the + // ocs_capture tool; agents hitting the bare read op get + // guidance instead of a cryptic missing-path failure. + return Ok(json!({ + "ok": false, + "status": "failed", + "code": "use_capture_tool", + "error": "Viewport captures run through the ocs_capture tool (scope, annotate, tiles, diff). ocs_read exposes capture products already stored as resources, not new captures." + })); + } if op == "tools" { return Ok(json!({ "ok": true, @@ -1961,6 +1987,11 @@ fn call_tool( "scope": scope, "max_dimension": if tile_info.is_some() && arguments.get("max_dimension").is_none() { 512 } else { max_dimension }, }); + // The client's id wins when supplied (and is echoed back in + // metadata); otherwise request() mints one for the GUI below. + if let Some(request_id) = arguments.get("request_id").and_then(Value::as_str) { + req["request_id"] = json!(request_id); + } if let Some((_, _, _, tb)) = tile_info { req["view"] = json!("region"); req["bounds"] = json!(tb); @@ -1994,6 +2025,9 @@ fn call_tool( let mut meta = result.get("result").cloned().unwrap_or_else(|| json!({})); if let Some(obj) = meta.as_object_mut() { obj.remove("path"); + if let Some(request_id) = arguments["request_id"].as_str() { + obj.insert("request_id".into(), Value::String(request_id.into())); + } } let mut final_bytes = bytes; @@ -2244,6 +2278,7 @@ pub(crate) fn tool_definitions() -> Value { "type":"object", "properties":{ "ocs_session_id":{"type":"string","minLength":1,"description":"Value of session_id returned by ocs_sessions."}, + "request_id":{"type":"string","description":"Optional client request id, accepted for schema compatibility and echoed in the result metadata. Captures are not idempotency-keyed."}, "scope":{"type":"string","enum":["viewport","window"],"default":"viewport","description":"Capture only the drawing viewport by default, or the complete application window."}, "max_dimension":{"type":"integer","minimum":256,"maximum":4096,"default":1600,"description":"Resize the longest image edge to at most this many pixels."}, "delivery":{"type":"string","enum":["inline","resource","both"],"default":"inline","description":"Image delivery method: 'inline' embeds base64 in tool content, 'resource' returns an MCP cad:// URI reference without inlining image bytes, 'both' returns both inline image and cad:// URI."}, @@ -3439,6 +3474,47 @@ mod tests { assert!(!stale_snapshot_may_delete(false, Duration::from_secs(3600))); } + #[test] + fn capture_accepts_optional_request_id() { + // Strict clients insist on sending request_id even though capture + // is not idempotency-keyed: declare it optional so they can. + let tools = tool_definitions(); + let capture = tools + .as_array() + .unwrap() + .iter() + .find(|t| t["name"] == "ocs_capture") + .unwrap(); + let prop = &capture["inputSchema"]["properties"]["request_id"]; + assert_eq!(prop["type"], "string"); + assert!( + !capture["inputSchema"]["required"] + .as_array() + .unwrap() + .contains(&json!("request_id")) + ); + } + + #[test] + fn read_op_capture_points_at_the_capture_tool() { + // ocs_read advertises "capture" but the GUI op needs a file path; + // agents hitting it bare get guidance, not a cryptic failure. + let guided = call_tool( + "ocs_read", + &json!({"ocs_session_id":"s","op":"capture"}), + &mut HashMap::new(), + &mut ResourceStore::default(), + &mut detached_pump(), + None, + ) + .unwrap(); + assert_eq!(guided["ok"], false); + assert!(guided["error"] + .as_str() + .unwrap() + .contains("ocs_capture")); + } + #[test] fn malformed_requests_get_jsonrpc_errors() { let unknown = handle_message( From a0d7447e2c2832cd2897ef8e3dcabca841517093 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sun, 4 Oct 2026 22:56:42 +0100 Subject: [PATCH 41/43] fix(mcp): honest TTLs - 60s for resources, hour for tools resources/* vary as sessions open and snapshots land, so an hour of advertised freshness was optimistic. protocol_result now takes the TTL value: tools/list and discovery keep 3600000, resources/list/read/templates get 60000, on every protocol version. No tool surface change; digest untouched. --- src/mcp.rs | 56 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/src/mcp.rs b/src/mcp.rs index 73007860d..dd88a88dc 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -33,6 +33,9 @@ const TOOL_SCHEMA_DIGEST: &str = "bb2640277721f23e08cf17085bd9204753f810ece27abf const MAX_REQUEST: usize = 1_048_576; const MAX_RESPONSE: u64 = 16 * 1024 * 1024; const CACHE_TTL_MS: u64 = 3_600_000; +/// Freshness for resources/*, which vary as sessions open and snapshots +/// land. Tools and discovery are static by comparison, so they keep the hour. +const RESOURCE_TTL_MS: u64 = 60_000; const TASK_TTL_MS: u64 = 3_600_000; pub(crate) const INSTRUCTIONS: &str = "Call ocs_sessions, then pass its session_id as ocs_session_id to ocs_read, ocs_execute and ocs_capture. Read capabilities to discover the complete CAD automation surface. Call record_schema to discover every record type, property path, JSON type, enum, unit, constraint and write rule before editing unfamiliar data. Use records to inspect every serializable entity, object, table, header and document record; filter with RFC 6901 JSON Pointer paths. Use set_properties for atomic, type-checked record edits and preserve document_id, revision and request_id. Use commands with parameters.name for a command manifest. Use batch when several steps are known, and request changed_entities when resulting geometry is needed. For interactive work, call start and follow state.command.accepts, options and input_example. To have the person at the screen pick entities for you, call user_select and keep polling until it completes; running means they are still picking. A run.cmd contains the command name followed by prompt answers separated by spaces; points use x,y or x,y,z. After a timeout, query the existing operation and never replay a mutation with a new request_id. waiting_input and running are not completion. Let OCS and its geometry kernel calculate geometry; use query near, contains_point and intersections for exact relationships. ARCHITECTURAL VECTORIZATION DIRECTIVE: When converting or vectorizing a floorplan from an image or sketch: 1. Attach reference images as Xref underlays via embed_image on layer _XREF and lock it. 2. NEVER draw loose lines or arcs for doors or windows; always query records (collection: 'block_records') and insert Block References (type: 'INSERT') on A-DOOR and A-GLAZ. If a block is missing, draft standard geometry at origin (0,0) and register it with block_define before inserting. 3. Categorize layers cleanly: A-WALL-EXTR, A-WALL-INTR, A-WALL-HATCH, A-DOOR, A-GLAZ, A-ANNO-TEXT, A-ANNO-DIMS. 4. Always verify drafted geometry using ocs_capture with annotate: true (Set-of-Marks entity IDs) and diff: true (visual dirty streaming). ocs_capture operates quietly in background and overlapped window states without stealing user focus. Viewports and captured snapshots are available as MCP resources under cad://session/{session_id}/viewport.png and cad://session/{session_id}/snapshot/{hash}.png; ocs_capture accepts delivery: 'resource' to avoid large inline base64 payloads, supplies standardized spatial grounding in _spatial, supports diff: true for streaming dirty visual regions, and provides multiscale DeepZoom pyramidal tiling via tile: {level, x, y} or cad://session/{session_id}/pyramid/manifest.json and cad://session/{session_id}/tile/{level}/{x}/{y}.png. Before delivery call audit with the intended target_format and target_version; use save_verified with an explicit absolute path to save, reopen, hash and compare the semantic manifest. When you first connect, announce the build you are working with to the user from the `bridge` object on ocs_sessions states and hello/capabilities responses (OpenCADStudio version, build_rev, tool_schema digest); repeat the announcement if a later handshake reports a different build."; const READ_OPS: &[&str] = &[ @@ -2487,13 +2490,13 @@ fn poll_task( } } -fn protocol_result(mut result: Value, modern: bool, cacheable: bool) -> Value { +fn protocol_result(mut result: Value, modern: bool, ttl_ms: Option) -> Value { // SEP-2549 freshness hints are version-independent: legacy clients // ignore unknown fields, so list results always carry them. The modern // envelope (resultType/_meta) stays negotiated. - if cacheable { + if let Some(ttl_ms) = ttl_ms { if let Some(object) = result.as_object_mut() { - object.insert("ttlMs".into(), Value::from(CACHE_TTL_MS)); + object.insert("ttlMs".into(), Value::from(ttl_ms)); object.insert("cacheScope".into(), Value::String("public".into())); } } @@ -2594,10 +2597,10 @@ fn handle_message( "instructions":INSTRUCTIONS }), true, - true, + Some(CACHE_TTL_MS), ), ), - "ping" => response(id, protocol_result(json!({}), modern, false)), + "ping" => response(id, protocol_result(json!({}), modern, None)), "resources/list" => { let mut session_ids = Vec::new(); if let Ok(available) = descriptors() { @@ -2626,7 +2629,7 @@ fn handle_message( let list = resources.list_resources(&session_ids); response( id, - protocol_result(json!({ "resources": list }), modern, true), + protocol_result(json!({ "resources": list }), modern, Some(RESOURCE_TTL_MS)), ) } "resources/read" => { @@ -2634,7 +2637,7 @@ fn handle_message( return Some(rpc_error(id, -32602, "Missing resource uri")); }; match read_resource(uri, clients, resources, pump, Some(&id)) { - Ok(contents) => response(id, protocol_result(contents, modern, true)), + Ok(contents) => response(id, protocol_result(contents, modern, Some(RESOURCE_TTL_MS))), // -32002 was THE not-found code in 2025-11-25 and earlier; // 2026-07-28 says MUST NOT emit it, so modern gets -32602. Err(err) => rpc_error(id, if modern { -32602 } else { -32002 }, err), @@ -2658,12 +2661,12 @@ fn handle_message( } ]}), modern, - true, + Some(RESOURCE_TTL_MS), ), ), "tools/list" => response( id, - protocol_result(json!({"tools":tool_definitions()}), modern, true), + protocol_result(json!({"tools":tool_definitions()}), modern, Some(CACHE_TTL_MS)), ), "tools/call" => { let Some(name) = params["name"].as_str() else { @@ -2715,7 +2718,7 @@ fn handle_message( "pollIntervalMs":250 }), true, - false, + None, ), )); } @@ -2730,7 +2733,7 @@ fn handle_message( Err(CallError::Infra(message)) => return Some(rpc_error(id, -32603, message)), Err(CallError::Cancelled) => return None, }; - response(id, protocol_result(result, modern, false)) + response(id, protocol_result(result, modern, None)) } "tasks/get" if modern && supports_tasks(¶ms) => { let Some(task_id) = params["taskId"].as_str() else { @@ -2739,7 +2742,7 @@ fn handle_message( let Some(task) = tasks.get_mut(task_id) else { return Some(rpc_error(id, -32602, "Unknown or expired taskId")); }; - response(id, protocol_result(poll_task(task, clients, resources, pump), true, false)) + response(id, protocol_result(poll_task(task, clients, resources, pump), true, None)) } "tasks/update" if modern && supports_tasks(¶ms) => { let Some(task_id) = params["taskId"].as_str() else { @@ -2748,7 +2751,7 @@ fn handle_message( if tasks.get_mut(task_id).is_none() { return Some(rpc_error(id, -32602, "Unknown or expired taskId")); } - response(id, protocol_result(json!({}), true, false)) + response(id, protocol_result(json!({}), true, None)) } "tasks/cancel" if modern && supports_tasks(¶ms) => { let Some(task_id) = params["taskId"].as_str() else { @@ -2764,7 +2767,7 @@ fn handle_message( task.result = None; task.error = None; task.last_updated_at = iso8601_now(); - response(id, protocol_result(json!({}), true, false)) + response(id, protocol_result(json!({}), true, None)) } _ => rpc_error(id, -32601, format!("Method not found: {method}")), }) @@ -3120,12 +3123,31 @@ mod tests { assert_eq!(listed["result"]["cacheScope"], "public"); } + #[test] + fn resource_lists_use_the_short_dynamic_ttl() { + // resources/* vary as sessions open and snapshots land: 60 s. + // Static tools/discover keep the hour. + let listed = handle_message( + json!({"jsonrpc":"2.0","id":"res","method":"resources/list"}), + &mut HashMap::new(), + &mut TaskStore::default(), + &mut ResourceStore::default(), + &mut detached_pump(), + ) + .unwrap(); + assert_eq!(listed["result"]["ttlMs"], RESOURCE_TTL_MS); + assert_eq!(listed["result"]["ttlMs"], 60_000); + } + #[test] fn legacy_list_results_carry_sep2549_ttl() { // SEP-2549 makes ttlMs mandatory on list results; legacy clients // ignore unknown fields, so the stamp is version-independent while // the modern envelope (resultType/_meta) stays negotiated. - for method in ["tools/list", "resources/list"] { + for (method, ttl) in [ + ("tools/list", CACHE_TTL_MS), + ("resources/list", RESOURCE_TTL_MS), + ] { let listed = handle_message( json!({"jsonrpc":"2.0","id":method,"method":method}), &mut HashMap::new(), @@ -3134,7 +3156,7 @@ mod tests { &mut detached_pump(), ) .unwrap(); - assert_eq!(listed["result"]["ttlMs"], CACHE_TTL_MS, "{method}"); + assert_eq!(listed["result"]["ttlMs"], ttl, "{method}"); assert_eq!(listed["result"]["cacheScope"], "public", "{method}"); assert!(listed["result"].get("resultType").is_none(), "{method}"); assert!(listed["result"].get("_meta").is_none(), "{method}"); @@ -3337,7 +3359,7 @@ mod tests { .as_str() .unwrap() .contains("{hash}"))); - assert_eq!(listed["result"]["ttlMs"], CACHE_TTL_MS); + assert_eq!(listed["result"]["ttlMs"], RESOURCE_TTL_MS); assert_eq!(listed["result"]["cacheScope"], "public"); } } From 7d1fca000b918d6da3ca2b84ff7ab70668368090 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Mon, 5 Oct 2026 00:07:21 +0100 Subject: [PATCH 42/43] fix(io): materialize missing BLOCK/ENDBLK sentinels on load The DXF reader keeps marker identities on the block record but never materializes the entities, so block_entity_handle/block_end_handle dangle after every DXF load (reopened baked *D dimension blocks hit this every time). Re-create missing sentinels at load finalize, reusing the file handle when free and minting otherwise. Idempotent and DWG-safe: loads whose markers already resolve are untouched. Pinned by dimlinear_survives_save_reload_with_baked_geometry. --- src/io/mod.rs | 79 ++++++++++++++++++++++++++++++ src/modules/draw/modify/explode.rs | 73 +++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) diff --git a/src/io/mod.rs b/src/io/mod.rs index 85cfe2906..3a4c9d52a 100644 --- a/src/io/mod.rs +++ b/src/io/mod.rs @@ -1036,6 +1036,7 @@ fn finalize_loaded_outcome( ) -> Result { let doc = &mut outcome.document; normalize_block_origins(doc); + materialize_missing_block_markers(doc); normalize_knotless_splines(doc); if outcome.stats.source_format == Some(codec::SourceFormat::Dxf) { fix_dxf_dimension_rotations(doc); @@ -1240,6 +1241,84 @@ fn normalize_block_origins(doc: &mut CadDocument) { } } +/// The DXF section reader keeps BLOCK/ENDBLK marker identities on the block +/// record but never materializes the sentinel entities, so +/// `block_entity_handle`/`block_end_handle` dangle after every DXF load +/// (reopened baked `*D` dimension blocks hit this every time). Re-create any +/// missing sentinel so each record points at a real Block/BlockEnd again. +/// Idempotent: records whose markers already resolve (DWG loads, live docs) +/// are untouched. File handles are reused when still free so a repair + +/// resave stays handle-stable; otherwise a fresh handle is minted and the +/// record is pointed at it. +fn materialize_missing_block_markers(doc: &mut CadDocument) { + use codec::entities::{Block, BlockEnd}; + use codec::{EntityType, Handle}; + + struct Work { + name: String, + record_handle: Handle, + base_point: codec::types::Vector3, + block_handle: Handle, + end_handle: Handle, + need_block: bool, + need_end: bool, + } + let work: Vec = doc + .block_records + .iter() + .map(|record| Work { + name: record.name.clone(), + record_handle: record.handle, + base_point: record.base_point, + block_handle: record.block_entity_handle, + end_handle: record.block_end_handle, + need_block: !matches!( + doc.get_entity(record.block_entity_handle), + Some(EntityType::Block(_)) + ), + need_end: !matches!( + doc.get_entity(record.block_end_handle), + Some(EntityType::BlockEnd(_)) + ), + }) + .filter(|w| w.need_block || w.need_end) + .collect(); + + for w in work { + if w.need_block { + let mut marker = Block::new(&w.name, w.base_point); + // Reuse the file handle only if nothing else claims it; an + // explicit handle is respected by add_entity (bumping the counter + // past it), otherwise a NULL handle mints a fresh one below. + if !w.block_handle.is_null() && doc.get_entity(w.block_handle).is_none() { + marker.common.handle = w.block_handle; + } + marker.common.owner_handle = w.record_handle; + if let Ok(handle) = doc.add_entity(EntityType::Block(marker)) { + if handle != w.block_handle { + if let Some(record) = doc.block_records.get_mut(&w.name) { + record.block_entity_handle = handle; + } + } + } + } + if w.need_end { + let mut marker = BlockEnd::new(); + if !w.end_handle.is_null() && doc.get_entity(w.end_handle).is_none() { + marker.common.handle = w.end_handle; + } + marker.common.owner_handle = w.record_handle; + if let Ok(handle) = doc.add_entity(EntityType::BlockEnd(marker)) { + if handle != w.end_handle { + if let Some(record) = doc.block_records.get_mut(&w.name) { + record.block_end_handle = handle; + } + } + } + } + } +} + /// A RasterImage entity stores its file path on the linked ImageDefinition, /// often as the original author's absolute path (e.g. a Windows / VMware share) /// that doesn't exist on this machine. Resolve each image to a usable path: diff --git a/src/modules/draw/modify/explode.rs b/src/modules/draw/modify/explode.rs index b8631c67c..dc21485aa 100644 --- a/src/modules/draw/modify/explode.rs +++ b/src/modules/draw/modify/explode.rs @@ -1970,4 +1970,77 @@ mod tests { assert!((line.start.x - 2.0).abs() < 1e-12); assert!((line.end.x - 2.0).abs() < 1e-12); } + + // RED (TDD): a real DIMLINEAR must survive save -> reload with its baked + // *D geometry intact and a clean handle graph (no duplicates, no dangling + // owners). Headless codec round-trip, no GUI needed. + #[test] + fn dimlinear_survives_save_reload_with_baked_geometry() { + let mut failures = Vec::new(); + for ext in ["dxf", "dwg"] { + let mut doc = CadDocument::new(); + let mut d = + DimensionLinear::new(Vector3::new(0.0, 0.0, 0.0), Vector3::new(10.0, 0.0, 0.0)); + d.definition_point = Vector3::new(0.0, 5.0, 0.0); + d.base.text_middle_point = Vector3::new(5.0, 5.0, 0.0); + doc.add_entity(EntityType::Dimension(Dimension::Linear(d))) + .unwrap(); + + let path = std::env::temp_dir().join(format!( + "ocs_dim_rt_{}.{ext}", + std::process::id() + )); + crate::io::save_as_version(&doc, &path, codec::DxfVersion::AC1032) + .expect("save"); + let loaded = crate::io::load_file(&path).expect("load"); + let _ = std::fs::remove_file(&path); + + let mut seen = std::collections::HashSet::new(); + for e in loaded.entities() { + if !seen.insert(e.common().handle) { + failures.push(format!( + "{ext}: duplicate handle {:?}", + e.common().handle + )); + } + } + let dims: Vec<_> = loaded + .entities() + .filter_map(|e| match e { + EntityType::Dimension(d) => Some(d.clone()), + _ => None, + }) + .collect(); + if dims.len() != 1 { + failures.push(format!("{ext}: dimension entity lost")); + continue; + } + let block_name = dims[0].base().block_name.clone(); + if block_name.trim().is_empty() { + failures.push(format!("{ext}: dimension came back blockless")); + continue; + } + let Some(rec) = loaded.block_records.get(&block_name) else { + failures.push(format!("{ext}: *D block {block_name} missing after reload")); + continue; + }; + let owned: Vec = { + let mut h = rec.entity_handles.clone(); + h.push(rec.block_entity_handle); + h.push(rec.block_end_handle); + h + }; + if rec.entity_handles.is_empty() { + failures.push(format!("{ext}: baked block has no sub-entities")); + } + for h in &owned { + if h.is_null() || loaded.get_entity(*h).is_none() { + failures.push(format!( + "{ext}: dangling handle {h:?} in baked block {block_name}" + )); + } + } + } + assert!(failures.is_empty(), "round-trip failures:\n{}", failures.join("\n")); + } } From fc19afa7153443a1ca863817d4088ef8fd8e2e8d Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Mon, 5 Oct 2026 00:07:21 +0100 Subject: [PATCH 43/43] fix(automation): compare save_verified against the baked view The before-manifest was taken pre-bake while save mints *D geometry on its clone, so every new dimension failed verification 1-vs-7. Compute before on a bake-simulated clone: baked-vs-baked proves roundtrip stability (bake correctness itself is pinned by the explode geometry tests). Pinned by save_verified_accepts_new_dimension_with_baked_block. --- src/app/automation.rs | 45 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/app/automation.rs b/src/app/automation.rs index d4feb67e3..559575263 100644 --- a/src/app/automation.rs +++ b/src/app/automation.rs @@ -1398,7 +1398,13 @@ impl OpenCADStudio { // The same snapshot a normal save writes: display-only overrides and // resolved xref content stay out of the file. let snapshot = self.tabs[i].scene.document_for_save(); - let before = document_manifest(&snapshot); + // Bake simulation: save_as_version mints *D geometry blocks on its + // private clone, so the reopened manifest always contains baked + // sub-entities. Compare against the same baked view or every new + // (still blockless) dimension trips a false semantic_mismatch. + let mut baked_view = snapshot.clone(); + crate::modules::draw::modify::explode::bake_dimension_blocks(&mut baked_view); + let before = document_manifest(&baked_view); crate::io::save_as_version(&snapshot, &path, version) .map_err(|error| json!({ "ok":false,"status":"failed","code":"save_failed","error":error, @@ -1572,6 +1578,43 @@ mod tests { let _ = std::fs::remove_file(path); } + #[test] + fn save_verified_accepts_new_dimension_with_baked_block() { + use codec::entities::{Dimension, DimensionLinear}; + use codec::{EntityType, Vector3}; + + let mut app = super::OpenCADStudio::new_for_test(); + app.automation_op(r#"{"op":"new"}"#); + let i = app.active_tab; + let mut d = DimensionLinear::new(Vector3::new(0.0, 0.0, 0.0), Vector3::new(10.0, 0.0, 0.0)); + d.definition_point = Vector3::new(0.0, 5.0, 0.0); + d.base.text_middle_point = Vector3::new(5.0, 5.0, 0.0); + app.tabs[i] + .scene + .document + .add_entity(EntityType::Dimension(Dimension::Linear(d))) + .unwrap(); + let path = std::env::temp_dir().join(format!( + "ocs_verified_dim_{}_{}.dwg", + std::process::id(), + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_nanos(), + )); + let _ = std::fs::remove_file(&path); + let result = app + .save_verified_request(&serde_json::json!({ + "path":path, + "target_format":"dwg", + "overwrite":true, + })) + .expect("verified save of a new dimension"); + assert_eq!(result["verified"], true, "{result}"); + assert!(path.is_file()); + let _ = std::fs::remove_file(path); + } + #[test] fn explicit_target_version_parser_never_silently_defaults() { assert_eq!(