[ {"note": "sketch.move had no toolbar placement, no tool and no dialog. Its only route into the UI was the sketch context menu, which went through the empty-parameter fallback and reported an engine error. It now sits on SKETCH MODIFY and opens a tool window carrying Entities, a Center, X Distance, Y Distance, Angle and Create Copy."}, {"start": "sketch.create"}, {"click": {"plane": "XY"}}, {"expect": {"sketching": true}}, {"start": "sketch.rectangle.two_point"}, {"click": {"sketch": [0, 0]}}, {"click": {"sketch": [20, 10]}}, {"key": "Escape"}, {"expect": {"sketch_curves": {"own": 4}, "errors": 0}}, {"note": "The command opens a window and commits nothing."}, {"start": "sketch.move"}, {"expect": {"dialog": "SketchModify(Move", "sketch_curves": {"own": 4}, "errors": 0}}, {"click": {"sketch": [10, 0]}}, {"expect": {"dialog": "SketchModify(Move", "sketch_curves": {"own": 4}, "errors": 0}}, {"key": "Escape"}, {"expect": {"dialog": null, "errors": 0, "sketch_curves": {"own": 4}}}, {"expect": {"query": {"command": "sketch.inspect", "path": ["profiles", 0, "area_mm2"], "value": 200}}}, {"note": "Create Copy ticked: the rectangle is copied 30 mm along X, so the sketch holds eight curves and two profiles."}, {"start": "sketch.move"}, {"click": {"sketch": [10, 0]}}, {"click": {"sketch": [20, 5]}}, {"click": {"sketch": [10, 10]}}, {"click": {"sketch": [0, 5]}}, {"click": {"handle": "dialog:Create Copy"}}, {"click": {"handle": "dialog:X Distance"}}, {"key": "A", "cmd": true}, {"text": "30"}, {"key": "Enter"}, {"expect": {"dialog": null, "errors": 0, "sketch_curves": {"own": 8}}}, {"expect": {"query": {"command": "sketch.inspect", "path": ["profiles", 0, "area_mm2"], "value": 200}}}, {"expect": {"query": {"command": "sketch.inspect", "path": ["profiles", 1, "area_mm2"], "value": 200}}}, {"shot": "sketch_move_copy_window"}, {"note": "Create Copy cleared (the default): a plain move takes the copy with it and makes nothing new. Moving it 20 mm along Y leaves eight curves."}, {"start": "sketch.move"}, {"click": {"sketch": [40, 0]}}, {"click": {"sketch": [50, 5]}}, {"click": {"sketch": [40, 10]}}, {"click": {"sketch": [30, 5]}}, {"click": {"handle": "dialog:Y Distance"}}, {"key": "A", "cmd": true}, {"text": "20"}, {"key": "Enter"}, {"expect": {"dialog": null, "errors": 0, "sketch_curves": {"own": 8}}}, {"expect": {"query": {"command": "sketch.inspect", "path": ["profiles", 1, "area_mm2"], "value": 200}}}, {"shot": "sketch_move_window"}, {"note": "The X Distance also has an on-canvas drag arrow, along the sketch's own x axis, with its value box beside it. A factor has no length to drag, so Scale gets no arrow."}, {"start": "sketch.move"}, {"click": {"sketch": [40, 20]}}, {"expect": {"shown_handles": ["arrow"]}}, {"drag": [{"handle": "arrow"}, {"sketch": [70, 20]}]}, {"expect": {"dialog": "SketchModify(Move", "errors": 0}}, {"key": "Escape"}, {"expect": {"dialog": null, "errors": 0, "sketch_curves": {"own": 8}}}, {"note": "Starting the command again and pressing Escape leaves the document and the undo history untouched."}, {"start": "sketch.move"}, {"expect": {"dialog": "SketchModify(Move"}}, {"key": "Escape"}, {"expect": {"dialog": null, "errors": 0}} ]