Motion analysis: plots of a study's joint values and a point's path, and the parts that collide along it
- motion.plot: joint values and a point's path sampled as the study plays (closed loops following), with velocities and accelerations by finite differences, per step or per second with a duration. - motion.interference: the pairs of parts that pass through each other along a study, with the first step, the step ranges, the depth and the shared volume; occurrences, against or contact sets choose the pairs; bounded samples and work. - Motion Study dialog: a Study box opens a saved study; a chart of a joint value or a picked point with a cursor at the step shown (click to move there); Check collisions with the steps shaded on the chart. ui.start motion.study takes study.
This commit is contained in:
1 parent
8a055afdd6
commit
8fdf6a61a2
23 files changed
+1398
-40
No files matched your search
@@ -371,11 +371,19 @@ fn dispatch(app: &mut SolveApp, ctx: &egui::Context, method: &str, p: &Value) ->
|
||||
let Some(id) = s("command") else { return err("missing `command`") };
|
||||
// `params`: what the dialog opens on. Refused: nothing starts, or the dialog closes.
|
||||
let params = p.get("params").filter(|v| !v.is_null());
|
||||
if params.is_some() && id != "joint.drive" {
|
||||
return err(format!("`{id}` takes no ui.start params yet (joint.drive takes joint, values)"));
|
||||
if params.is_some() && id != "joint.drive" && id != "motion.study" {
|
||||
return err(format!("`{id}` takes no ui.start params yet (joint.drive takes joint, values; motion.study takes study)"));
|
||||
}
|
||||
app.start(id);
|
||||
if let Some(params) = params {
|
||||
if let Some(params) = params.filter(|_| id == "motion.study") {
|
||||
let Some(crate::dialogs::Kind::Motion(k)) = app.dialog.as_mut().map(|d| &mut d.kind) else {
|
||||
return err("Motion Study did not open");
|
||||
};
|
||||
if let Err(e) = crate::dialogs_motion::preset(&app.session, k, params) {
|
||||
crate::dialogs::cancel(app);
|
||||
return err(e);
|
||||
}
|
||||
} else if let Some(params) = params {
|
||||
if app.tree.capture_prompt.is_some() {
|
||||
return err("Drive Joints waits for the Capture Position question (ui.capture)");
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user