Fix modelling regressions and reconcile WIP UI work
This commit is contained in:
1 parent
49bd89de13
commit
d6cdec40da
67 files changed
+1793
-260
No files matched your search
@@ -31,3 +31,98 @@ fn adhoc() {
|
||||
panic!("{path}: {e}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn angle_dimension_both_interactive_workflows() {
|
||||
use serde_json::json;
|
||||
for preselect in [false, true] {
|
||||
let mut h = Harness::new();
|
||||
h.run(&json!([
|
||||
{"call":"engine.execute","params":{"command":"sketch.create","params":{"plane":"XY"}}},
|
||||
{"call":"engine.execute","params":{"command":"sketch.line","params":{"points":[[0,0],[40,0]]}}},
|
||||
{"call":"engine.execute","params":{"command":"sketch.line","params":{"points":[[0,0],[30,30]]}}},
|
||||
{"call":"ui.view","params":{"view":"top"}}
|
||||
]))
|
||||
.unwrap();
|
||||
let picks = json!([
|
||||
{"click":{"sketch":[20,0]}},
|
||||
{"click":{"sketch":[15,15]},"shift":true}
|
||||
]);
|
||||
if preselect {
|
||||
h.run(&picks).unwrap();
|
||||
h.run(&json!([{ "key":"D" }])).unwrap();
|
||||
} else {
|
||||
h.run(&json!([{ "key":"D" }])).unwrap();
|
||||
h.run(&picks).unwrap();
|
||||
}
|
||||
h.run(&json!([
|
||||
{"click":{"sketch":[20,8]}},
|
||||
{"text":"45"}, {"key":"Enter"},
|
||||
{"expect":{"errors":0,"param":{"d1":std::f64::consts::FRAC_PI_4}}}
|
||||
]))
|
||||
.unwrap();
|
||||
let sk = &h.app.session.model.state().sketches[0].sketch;
|
||||
assert!(sk.constraints.iter().any(|c| matches!(c.kind, solvecraft_engine::sketch::ConstraintKind::Angle { .. })));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn home_tab_and_file_recent_open_designs() {
|
||||
use serde_json::json;
|
||||
let mut h = Harness::new();
|
||||
h.run(&json!([
|
||||
{"call":"engine.execute","params":{"command":"solid.box","params":{"length":10,"width":10,"height":10}}},
|
||||
{"call":"engine.execute","params":{"command":"file.save_as","params":{"path":"$DIR/recent.solvecraft"}}},
|
||||
{"click":{"handle":"tab:home"}},
|
||||
{"expect":{"home":true,"documents":1}},
|
||||
{"click":{"handle":"tab:design:0"}},
|
||||
{"expect":{"home":false,"bodies":1}},
|
||||
{"click":{"handle":"tab:home"}},
|
||||
{"click":{"handle":"home:recent:0"}},
|
||||
{"expect":{"home":false,"bodies":1,"documents":2}},
|
||||
{"click":{"handle":"appbar:folder"}},
|
||||
{"widget":"Open Recent"}
|
||||
]))
|
||||
.unwrap();
|
||||
let path = h.dir.join("recent.solvecraft").to_string_lossy().into_owned();
|
||||
h.run(&json!([
|
||||
{"widget":path},
|
||||
{"expect":{"home":false,"bodies":1,"documents":3}}
|
||||
]))
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sketch_toolbar_imports_use_file_picker() {
|
||||
use serde_json::json;
|
||||
let mut h = Harness::new();
|
||||
let path = h.dir.join("drawing.svg");
|
||||
std::fs::write(
|
||||
&path,
|
||||
r#"<svg xmlns="http://www.w3.org/2000/svg" width="40mm" height="20mm" viewBox="0 0 40 20"><path d="M 0 0 L 40 0 L 40 20 L 0 20 Z"/></svg>"#,
|
||||
)
|
||||
.unwrap();
|
||||
h.run(&json!([
|
||||
{"call":"engine.execute","params":{"command":"sketch.create","params":{"plane":"XY"}}},
|
||||
{"choose_file":path},
|
||||
{"start":"sketch.insert_svg"},
|
||||
{"expect":{"errors":0,"sketch_curves":{"own":4}}}
|
||||
]))
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn narrow_toolbar_reaches_collapsed_commands() {
|
||||
use serde_json::json;
|
||||
let mut h = Harness::new();
|
||||
h.run(&json!([
|
||||
{"call":"ui.resize","params":{"width":640,"height":800}},
|
||||
{"expect":{"shown_handles":["toolbar:overflow"]}},
|
||||
{"click":{"handle":"toolbar:overflow"}},
|
||||
{"widget":"CONSTRUCT"},
|
||||
{"expect":{"shown_handles":["toolbar:construct.plane.offset"]}},
|
||||
{"click":{"handle":"toolbar:construct.plane.offset"}},
|
||||
{"expect":{"dialog":"OffsetPlane"}}
|
||||
]))
|
||||
.unwrap();
|
||||
}
|
||||
@@ -1,7 +1,4 @@
|
||||
[
|
||||
{
|
||||
"pending": "#40: offsets of projected geometry get new ids on recompute, the lid's lip fails"
|
||||
},
|
||||
{
|
||||
"note": "Acceptance (#27): the board grows 60 \u2192 70 mm; the lid's lip (offsets of the case's projected rim) follows."
|
||||
},
|
||||
|
||||
@@ -87,6 +87,70 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "engine.execute",
|
||||
"params": {
|
||||
"command": "parameters.change",
|
||||
"params": {
|
||||
"name": "wall",
|
||||
"expression": "2.4 mm"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"expect": {
|
||||
"errors": 0,
|
||||
"bodies": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "engine.execute",
|
||||
"params": {
|
||||
"command": "parameters.change",
|
||||
"params": {
|
||||
"name": "height",
|
||||
"expression": "30 mm"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"expect": {
|
||||
"errors": 0,
|
||||
"bodies": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "engine.execute",
|
||||
"params": {
|
||||
"command": "parameters.change",
|
||||
"params": {
|
||||
"name": "height",
|
||||
"expression": "25 mm"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"expect": {
|
||||
"errors": 0,
|
||||
"bodies": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "engine.execute",
|
||||
"params": {
|
||||
"command": "parameters.change",
|
||||
"params": {
|
||||
"name": "wall",
|
||||
"expression": "2 mm"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"expect": {
|
||||
"errors": 0,
|
||||
"bodies": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "engine.execute",
|
||||
"params": {
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
[
|
||||
{
|
||||
"pending": "#41: a snap fit stays at its old point when its wall moves (a floating body)"
|
||||
},
|
||||
{
|
||||
"note": "Acceptance (#27): the board grows 40 \u2192 50 mm deep; the snap fit stays on the moved front wall."
|
||||
},
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{"click": {"sketch": [20, -8]}},
|
||||
{
|
||||
"text": "50"
|
||||
},
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{"click": {"sketch": [20, -8]}},
|
||||
{
|
||||
"text": "40"
|
||||
},
|
||||
|
||||
@@ -76,6 +76,14 @@
|
||||
{
|
||||
"key": "Enter"
|
||||
},
|
||||
{
|
||||
"call": "ui.set",
|
||||
"params": {
|
||||
"hiddenBodies": [
|
||||
"Body1"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "sketch.create"
|
||||
},
|
||||
@@ -84,6 +92,12 @@
|
||||
"plane": "XZ"
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "ui.set",
|
||||
"params": {
|
||||
"hiddenBodies": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "sketch.rectangle.two_point"
|
||||
},
|
||||
@@ -99,7 +113,7 @@
|
||||
"click": {
|
||||
"sketch": [
|
||||
50,
|
||||
10
|
||||
-10
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -116,16 +130,13 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "solid.extrude"
|
||||
"call": "ui.view",
|
||||
"params": {
|
||||
"view": "fit"
|
||||
}
|
||||
},
|
||||
{
|
||||
"click": {
|
||||
"world": [
|
||||
40,
|
||||
0,
|
||||
5
|
||||
]
|
||||
}
|
||||
"start": "solid.extrude"
|
||||
},
|
||||
{
|
||||
"text": "20"
|
||||
@@ -199,7 +210,7 @@
|
||||
"max": [
|
||||
null,
|
||||
null,
|
||||
20
|
||||
30
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -231,4 +242,4 @@
|
||||
{
|
||||
"shot": "s07_driven"
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -40,6 +40,7 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{"click": {"sketch": [20, -8]}},
|
||||
{
|
||||
"text": "40"
|
||||
},
|
||||
|
||||
@@ -95,6 +95,14 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"click": {
|
||||
"sketch": [
|
||||
20,
|
||||
-8
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "40"
|
||||
},
|
||||
@@ -109,6 +117,14 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"click": {
|
||||
"sketch": [
|
||||
48,
|
||||
12
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "25"
|
||||
},
|
||||
@@ -123,6 +139,14 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"click": {
|
||||
"sketch": [
|
||||
30,
|
||||
20
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "10"
|
||||
},
|
||||
@@ -219,4 +243,4 @@
|
||||
{
|
||||
"shot": "s11_done"
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -76,6 +76,14 @@
|
||||
{
|
||||
"key": "Enter"
|
||||
},
|
||||
{
|
||||
"call": "ui.set",
|
||||
"params": {
|
||||
"hiddenBodies": [
|
||||
"Body1"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "sketch.create"
|
||||
},
|
||||
@@ -84,6 +92,12 @@
|
||||
"plane": "XZ"
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "ui.set",
|
||||
"params": {
|
||||
"hiddenBodies": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "sketch.rectangle.two_point"
|
||||
},
|
||||
@@ -99,7 +113,7 @@
|
||||
"click": {
|
||||
"sketch": [
|
||||
50,
|
||||
10
|
||||
-10
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -116,16 +130,13 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "solid.extrude"
|
||||
"call": "ui.view",
|
||||
"params": {
|
||||
"view": "fit"
|
||||
}
|
||||
},
|
||||
{
|
||||
"click": {
|
||||
"world": [
|
||||
40,
|
||||
0,
|
||||
5
|
||||
]
|
||||
}
|
||||
"start": "solid.extrude"
|
||||
},
|
||||
{
|
||||
"text": "20"
|
||||
@@ -236,4 +247,4 @@
|
||||
{
|
||||
"shot": "s20_section_driven"
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -43,6 +43,7 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{"click": {"sketch": [20, -8]}},
|
||||
{
|
||||
"text": "40"
|
||||
},
|
||||
|
||||
@@ -76,6 +76,14 @@
|
||||
{
|
||||
"key": "Enter"
|
||||
},
|
||||
{
|
||||
"call": "ui.set",
|
||||
"params": {
|
||||
"hiddenBodies": [
|
||||
"Body1"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "sketch.create"
|
||||
},
|
||||
@@ -84,6 +92,12 @@
|
||||
"plane": "XZ"
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "ui.set",
|
||||
"params": {
|
||||
"hiddenBodies": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "sketch.rectangle.two_point"
|
||||
},
|
||||
@@ -99,7 +113,7 @@
|
||||
"click": {
|
||||
"sketch": [
|
||||
50,
|
||||
10
|
||||
-10
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -116,16 +130,13 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "solid.extrude"
|
||||
"call": "ui.view",
|
||||
"params": {
|
||||
"view": "fit"
|
||||
}
|
||||
},
|
||||
{
|
||||
"click": {
|
||||
"world": [
|
||||
40,
|
||||
0,
|
||||
5
|
||||
]
|
||||
}
|
||||
"start": "solid.extrude"
|
||||
},
|
||||
{
|
||||
"text": "20"
|
||||
@@ -240,4 +251,4 @@
|
||||
{
|
||||
"shot": "s26_drive_typed"
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -102,7 +102,7 @@
|
||||
"click": {
|
||||
"sketch": [
|
||||
52,
|
||||
10
|
||||
-10
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -187,7 +187,7 @@
|
||||
"click": {
|
||||
"sketch": [
|
||||
48,
|
||||
25
|
||||
15
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -239,4 +239,4 @@
|
||||
{
|
||||
"shot": "s27_cut"
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -1,7 +1,4 @@
|
||||
[
|
||||
{
|
||||
"pending": "every chevron works; the browser has no Joints folder (solvecraft-shell)"
|
||||
},
|
||||
{
|
||||
"note": "Browser chevrons expand and collapse every kind of node (folders, components, groups, the origin, named views, document settings). Model: two components with a body each, a joint, a sketch, an offset plane, a named view."
|
||||
},
|
||||
@@ -82,6 +79,14 @@
|
||||
{
|
||||
"key": "Enter"
|
||||
},
|
||||
{
|
||||
"call": "ui.set",
|
||||
"params": {
|
||||
"hiddenBodies": [
|
||||
"Body1"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "sketch.create"
|
||||
},
|
||||
@@ -90,6 +95,12 @@
|
||||
"plane": "XZ"
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "ui.set",
|
||||
"params": {
|
||||
"hiddenBodies": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "sketch.rectangle.two_point"
|
||||
},
|
||||
@@ -105,7 +116,7 @@
|
||||
"click": {
|
||||
"sketch": [
|
||||
50,
|
||||
10
|
||||
-10
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -122,16 +133,13 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "solid.extrude"
|
||||
"call": "ui.view",
|
||||
"params": {
|
||||
"view": "fit"
|
||||
}
|
||||
},
|
||||
{
|
||||
"click": {
|
||||
"world": [
|
||||
40,
|
||||
0,
|
||||
5
|
||||
]
|
||||
}
|
||||
"start": "solid.extrude"
|
||||
},
|
||||
{
|
||||
"text": "20"
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
[
|
||||
{
|
||||
"note": "User bug 1/4 (\"big square\"): with the root active, Create Sketch on a moved component's face puts the sketch on the face where it is shown, its projected loop on the face's edges (not at the component's own coordinates)."
|
||||
},
|
||||
{
|
||||
"call": "engine.execute",
|
||||
"params": {
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "C"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "engine.execute",
|
||||
"params": {
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 30,
|
||||
"height": 20
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "engine.execute",
|
||||
"params": {
|
||||
"command": "component.activate",
|
||||
"params": {
|
||||
"component": "root"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "engine.execute",
|
||||
"params": {
|
||||
"command": "occurrence.move",
|
||||
"params": {
|
||||
"occurrence": "C:1",
|
||||
"translate": [
|
||||
100,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"call": "ui.view",
|
||||
"params": {
|
||||
"view": "fit"
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": "sketch.create"
|
||||
},
|
||||
{
|
||||
"click": {
|
||||
"world": [
|
||||
120,
|
||||
15,
|
||||
20
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"expect": {
|
||||
"sketching": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"expect": {
|
||||
"sketch_curves": {
|
||||
"linked": 4,
|
||||
"own": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"expect": {
|
||||
"sketch_world": {
|
||||
"sketch": "Sketch1",
|
||||
"point": "p1",
|
||||
"at": [
|
||||
140,
|
||||
0,
|
||||
20
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"shot": "s43_root_sketch_on_moved_face"
|
||||
},
|
||||
{
|
||||
"start": "sketch.finish"
|
||||
},
|
||||
{
|
||||
"expect": {
|
||||
"errors": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -1,7 +1,4 @@
|
||||
[
|
||||
{
|
||||
"pending": "a root-active sketch on a face of a moved component lands in body-local coordinates (solvecraft-dialogs)"
|
||||
},
|
||||
{
|
||||
"note": "A box in a new component, the component moved +100 in x, the root active: a sketch on the box's top face projects the face's edges where the face is (x 100-140), not at the body's own coordinates (x 0-40)."
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[
|
||||
{"note": "With Y up (#3) the view cube turns with the world: its TOP is world +Y and clicking it looks down −Y in the standard plan orientation; FRONT looks along −Z."},
|
||||
{"note": "With Y up (#3) the view cube turns with the world: its TOP is world +Y and clicking it looks down −Y in the standard plan orientation; FRONT looks along −Z."},
|
||||
{"call": "engine.execute", "params": {"command": "solid.box", "params": {"length": 40, "width": 30, "height": 20}}},
|
||||
{"call": "ui.set", "params": {"upAxis": "y"}},
|
||||
{"call": "ui.prefs", "params": {"up_axis": "y"}},
|
||||
{"call": "ui.view", "params": {"view": "home"}},
|
||||
{"move": {"cube": [0, 0, 1]}},
|
||||
{"expect": {"shown_handles": ["cube_hover:top"]}},
|
||||
|
||||
Reference in new issue
Block a user