mirror of
https://github.com/storytold/cadcraft.git
synced 2026-10-25 03:16:50 -06:00
Squash of PR #522 by @vangel76. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
46 lines
1.8 KiB
Rust
46 lines
1.8 KiB
Rust
//! DIMPOST's suffix goes on the tolerance values as well as on the measurement (issue #390).
|
|
|
|
use cadcraft_doc::{DimKind, DimStyle, Dimension};
|
|
use cadcraft_geom::Vec3;
|
|
use cadcraft_render::dimension_geometry;
|
|
|
|
fn text(vars: serde_json::Value) -> (String, String) {
|
|
let d = Dimension {
|
|
kind: DimKind::Linear { rotation: 0.0 },
|
|
defpt: Vec3::new(0.0, 5.0, 0.0),
|
|
text_mid: Vec3::ZERO,
|
|
p13: Vec3::ZERO,
|
|
p14: Vec3::new(10.0, 0.0, 0.0),
|
|
p15: Vec3::ZERO,
|
|
p16: Vec3::ZERO,
|
|
text: String::new(),
|
|
style: "Standard".into(),
|
|
measurement: 0.0,
|
|
text_rotation: 0.0,
|
|
user_text_pos: false,
|
|
block: None,
|
|
overrides: Default::default(),
|
|
assoc: Vec::new(),
|
|
marks: Default::default(),
|
|
};
|
|
let mut st = DimStyle::default();
|
|
let rejected = st.apply_fields(vars.as_object().unwrap());
|
|
assert!(rejected.is_empty(), "unknown variables {rejected:?}");
|
|
let g = dimension_geometry(&d, &st, 1.0);
|
|
(g.value, g.mtext)
|
|
}
|
|
|
|
#[test]
|
|
fn dimpost_suffix_applies_to_tolerances() {
|
|
let sym = serde_json::json!({"DIMPOST": "mm", "DIMDEC": 1, "DIMTOL": 1, "DIMTP": 0.1, "DIMTM": 0.1, "DIMTDEC": 1});
|
|
assert_eq!(text(sym).0, "10.0mm±0.1mm");
|
|
// With `<>` only the part after it is the suffix; the prefix stays on the measurement.
|
|
let dev = serde_json::json!({"DIMPOST": "L=<> mm", "DIMDEC": 1, "DIMTOL": 1, "DIMTP": 0.1, "DIMTM": 0.2, "DIMTDEC": 1});
|
|
let (_, mtext) = text(dev);
|
|
assert!(mtext.starts_with("L=10.0 mm{"), "{mtext}");
|
|
assert!(mtext.contains("\\S+0.1 mm^-0.2 mm;"), "{mtext}");
|
|
// No DIMPOST: unchanged.
|
|
let plain = serde_json::json!({"DIMDEC": 1, "DIMTOL": 1, "DIMTP": 0.1, "DIMTM": 0.1, "DIMTDEC": 1});
|
|
assert_eq!(text(plain).0, "10.0±0.1");
|
|
}
|