grid-apps-cmms/src/kiri/mode/cam/cl-helical.js

63 lines
1.7 KiB
JavaScript
Raw Normal View History

2025-07-10 12:57:56 -06:00
import { api } from "../../core/api.js";
import { CAM } from "./driver-fe.js";
2025-07-11 14:27:51 -06:00
import { clearPops, env } from "./client.js";
let alert, lastWidget;
2025-07-10 12:57:56 -06:00
export let helicalOn = false;
export function selectHelical() {
if (helicalOn) {
2025-07-11 14:27:51 -06:00
return helicalDone();
2025-07-10 12:57:56 -06:00
}
2025-07-11 14:27:51 -06:00
clearPops();
2025-07-10 12:57:56 -06:00
alert = api.show.alert("analyzing surfaces...", 1000);
2025-07-11 14:27:51 -06:00
let cylinders = env.poppedRec.cylinders;
2025-07-10 12:57:56 -06:00
2025-07-11 21:04:32 -06:00
CAM.surface_prep(false, () => {
2025-07-10 12:57:56 -06:00
api.hide.alert(alert);
alert = api.show.alert("[esc] cancels surface selection");
for (let [wid, arr] of Object.entries(cylinders)) {
let widget = api.widgets.forid(wid);
2025-07-19 16:25:33 -06:00
if ( widget && arr?.length )
2025-07-10 12:57:56 -06:00
for (let faceid of arr) {
CAM.cylinderToggle(widget, faceid, (faceids) => {
2025-07-18 18:26:11 -06:00
// cylinders[widget.id] = faceids;
2025-07-10 12:57:56 -06:00
});
}
}
});
2025-07-11 14:27:51 -06:00
helicalOn = env.hoveredOp;
2025-07-10 12:57:56 -06:00
helicalOn.classList.add("editing");
api.feature.on_mouse_up = (obj, ev) => {
let { face } = obj;
let min = Math.min(face.a, face.b, face.c);
let faceid = min / 3;
let widget = (lastWidget = obj.object.widget);
CAM.cylinderToggle(widget, faceid, ({ faces, error }) => {
2025-07-19 16:25:33 -06:00
if ( error ) {
2025-07-10 12:57:56 -06:00
api.show.alert(error, 3000);
2025-07-11 21:04:32 -06:00
console.log( error );
2025-07-10 12:57:56 -06:00
return;
}
cylinders[widget.id] = faces;
});
};
};
export function helicalDone(){
2025-07-19 16:25:33 -06:00
if (!( helicalOn && env.poppedRec && env.poppedRec.cylinders )) {
2025-07-10 12:57:56 -06:00
return;
}
2025-07-11 14:27:51 -06:00
let { cylinders } = env.poppedRec;
2025-07-10 12:57:56 -06:00
for (let wid of Object.keys(cylinders)) {
let widget = api.widgets.forid(wid);
if (widget) {
CAM.cylinderClear(widget);
} else {
delete cylinders[wid];
}
}
api.hide.alert(alert);
api.feature.on_mouse_up = undefined;
helicalOn.classList.remove("editing");
helicalOn = false;
};