changed a bunch of stuff but it's still not displaying
This commit is contained in:
parent
5e52216a68
commit
b72ffc4d7c
4 changed files with 154 additions and 23 deletions
|
|
@ -5,6 +5,7 @@
|
||||||
// dep: kiri-mode.cam.driver
|
// dep: kiri-mode.cam.driver
|
||||||
// dep: kiri.api
|
// dep: kiri.api
|
||||||
// dep: kiri.alerts
|
// dep: kiri.alerts
|
||||||
|
// dep: geo.polygon
|
||||||
// use: kiri-mode.cam.animate
|
// use: kiri-mode.cam.animate
|
||||||
// use: kiri-mode.cam.animate2
|
// use: kiri-mode.cam.animate2
|
||||||
// use: kiri-mode.cam.tools
|
// use: kiri-mode.cam.tools
|
||||||
|
|
@ -12,6 +13,7 @@
|
||||||
gapp.register("kiri-mode.cam.client", [], (root, exports) => {
|
gapp.register("kiri-mode.cam.client", [], (root, exports) => {
|
||||||
|
|
||||||
const { base, kiri } = root;
|
const { base, kiri } = root;
|
||||||
|
const { Polygon } = base
|
||||||
const { driver, api } = kiri;
|
const { driver, api } = kiri;
|
||||||
const {alerts, conf} = api;
|
const {alerts, conf} = api;
|
||||||
const { CAM } = driver;
|
const { CAM } = driver;
|
||||||
|
|
@ -1158,30 +1160,152 @@ CAM.init = function(kiri, api) {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
func.selectIndividualHoles = function(ev){
|
let holeSelOn = false, lastSelHoles;
|
||||||
console.log("func.selectIndividualHoles not implemented");
|
func.selectHoles = async function(all){
|
||||||
|
console.log("client all selected",all)
|
||||||
let holes = CAM.holes((centers)=>{ //cam holes takes <=0 diameter to mean select all holes
|
if (holeSelOn) {
|
||||||
|
return func.selectHolesDone();
|
||||||
console.log("all centers",centers)
|
|
||||||
|
|
||||||
},0);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
func.clearPops();
|
||||||
|
alert = api.show.alert("analyzing parts...", 1000);
|
||||||
|
holeSelOn = hoveredOp;
|
||||||
|
holeSelOn.classList.add("editing");
|
||||||
|
api.feature.hover = true;
|
||||||
|
api.feature.hoverAdds = true;
|
||||||
|
func.hover = func.selectHolesHover;
|
||||||
|
func.hoverUp = func.selectHolesHoverUp;
|
||||||
|
|
||||||
func.selectAllHoles= function(ev, getRec){
|
|
||||||
let settings = API.conf.get();
|
let settings = API.conf.get();
|
||||||
const {tool,mark} = getRec();
|
const {tool,mark} = poppedRec
|
||||||
|
let diam = new CAM.Tool(settings,tool).fluteDiameter()
|
||||||
|
|
||||||
const diam = new CAM.Tool(settings,tool).fluteDiameter()
|
await CAM.holes(all?0:diam,(centers)=>{
|
||||||
|
console.log("centers",centers)
|
||||||
|
|
||||||
let holes = CAM.holes((centers)=>{ //cam holes takes <=0 diameter to mean select all holes
|
//flattened list of all hole centers and if they are selected
|
||||||
|
|
||||||
console.log("tool specified centers",centers)
|
kiri.api.widgets.for(widget => {
|
||||||
|
console.log(widget)
|
||||||
|
const {holes} = centers.find(center=>center.id = widget.id)
|
||||||
|
widget.holes = holes;
|
||||||
|
// console.log("holes",holes)
|
||||||
|
|
||||||
},diam);
|
api.hide.alert(alert);
|
||||||
|
alert = api.show.alert("[esc] cancels trace editing");
|
||||||
|
kiri.api.widgets.opacity(0.8);
|
||||||
|
|
||||||
|
if (!holes.length) {
|
||||||
|
unselectHoles(holes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let layers = new kiri.Layers();
|
||||||
|
|
||||||
|
holes.forEach(hole => {
|
||||||
|
|
||||||
|
let circlePoly = new Polygon().centerCircle(hole,diam/2,20,true)
|
||||||
|
let mesh = circlePoly.extrude(500)
|
||||||
|
|
||||||
|
let meshPolys = []
|
||||||
|
|
||||||
|
for(let i =0;i<mesh.length;){
|
||||||
|
meshPolys.push(new Polygon(
|
||||||
|
{
|
||||||
|
x: mesh[i++],
|
||||||
|
y: mesh[i++],
|
||||||
|
z: mesh[i++]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
x: mesh[i++],
|
||||||
|
y: mesh[i++],
|
||||||
|
z: mesh[i++]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
x: mesh[i++],
|
||||||
|
y: mesh[i++],
|
||||||
|
z: mesh[i++]
|
||||||
|
}
|
||||||
|
))
|
||||||
|
}
|
||||||
|
hole.meshPolys = meshPolys
|
||||||
|
|
||||||
|
// console.log(meshPolys)
|
||||||
|
|
||||||
|
layers.setLayer("holes", {line: 0x000055, fat:4, order:-10}, false).addAreas(meshPolys);
|
||||||
|
// mesh.position.copy(hole);
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
let stack = new kiri.Stack(widget.mesh);
|
||||||
|
widget.hole_stack = stack;
|
||||||
|
widget.holes.forEach(poly => {
|
||||||
|
stack.addLayers(layers);
|
||||||
|
stack.new_meshes.forEach(mesh => {
|
||||||
|
mesh.trace = {widget, poly};
|
||||||
|
// ensure trace poly singleton from matches
|
||||||
|
if (match.length > 0) {
|
||||||
|
poly._trace = match[0];
|
||||||
|
} else {
|
||||||
|
poly._trace = poly.toArray();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
widget.adds.appendAll(stack.new_meshes);
|
||||||
|
});
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
//START COPYPASTA
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ensure appropriate traces are toggled matching current record
|
||||||
|
// kiri.api.widgets.for(widget => {
|
||||||
|
// let areas = (poppedRec.areas[widget.id] || []);
|
||||||
|
// let stack = widget.trace_stack;
|
||||||
|
// stack.meshes.forEach(mesh => {
|
||||||
|
// let { poly } = mesh.trace;
|
||||||
|
// let match = areas.filter(arr => poly.matches(arr));
|
||||||
|
// if (match.length > 0) {
|
||||||
|
// if (!mesh.selected) {
|
||||||
|
// func.traceToggle(mesh, true);
|
||||||
|
// }
|
||||||
|
// } else if (mesh.selected) {
|
||||||
|
// func.traceToggle(mesh, true);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
//END COPYPASTA
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func.selectHolesHover = function(data) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func.selectHolesHoverUp = function(int, ev) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func.selectHolesDone = () => {
|
||||||
|
if (!holeSelOn) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
func.unpop();
|
||||||
|
holeSelOn.classList.remove("editing");
|
||||||
|
holeSelOn = false;
|
||||||
|
kiri.api.widgets.opacity(1);
|
||||||
|
api.hide.alert(alert);
|
||||||
|
api.feature.hover = false;
|
||||||
|
api.feature.hoverAdds = false;
|
||||||
|
kiri.api.widgets.for(widget => {
|
||||||
|
if (widget.trace_stack) {
|
||||||
|
widget.trace_stack.hide();
|
||||||
|
widget.adds.removeAll(widget.trace_stack.meshes);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// COMMON TAB/TRACE EVENT HANDLERS
|
// COMMON TAB/TRACE EVENT HANDLERS
|
||||||
api.event.on("slice.begin", () => {
|
api.event.on("slice.begin", () => {
|
||||||
|
|
@ -1626,8 +1750,8 @@ CAM.init = function(kiri, api) {
|
||||||
thru: UC.newInput(LANG.cd_drlthru_s, {title:LANG.cd_drlthru_l, convert:UC.toFloat, units:true}),
|
thru: UC.newInput(LANG.cd_drlthru_s, {title:LANG.cd_drlthru_l, convert:UC.toFloat, units:true}),
|
||||||
sep: UC.newBlank({class:"pop-sep"}),
|
sep: UC.newBlank({class:"pop-sep"}),
|
||||||
actions: UC.newRow([
|
actions: UC.newRow([
|
||||||
UC.newButton(LANG.cd_select_s, func.selectIndividualHoles, {title:LANG.cd_select_l}),
|
UC.newButton(LANG.cd_select_s, ()=>func.selectHoles(false), {title:LANG.cd_select_l}),
|
||||||
UC.newButton(LANG.cd_selall_s, (ev)=>func.selectAllHoles(ev, drillOp.createRecordGetter()), {title:LANG.cd_selall_l})
|
UC.newButton(LANG.cd_selall_s, ()=>func.selectHoles(true), {title:LANG.cd_selall_l})
|
||||||
], {class:"ext-buttons f-col"})
|
], {class:"ext-buttons f-col"})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1945,6 +2069,12 @@ function unselectTraces(widget, skip) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function unselectHoles(widget) {
|
||||||
|
widget.holes.forEach(hole => {
|
||||||
|
hole.selected = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function validateTools(tools) {
|
function validateTools(tools) {
|
||||||
if (tools) {
|
if (tools) {
|
||||||
let max = 0;
|
let max = 0;
|
||||||
|
|
|
||||||
|
|
@ -83,13 +83,14 @@ kiri.load(api => {
|
||||||
};
|
};
|
||||||
|
|
||||||
//0 or less diameter means select all holes
|
//0 or less diameter means select all holes
|
||||||
CAM.holes = function(ondone, diam) {
|
CAM.holes = function(diam,onDone) {
|
||||||
kiri.client.sync();
|
kiri.client.sync();
|
||||||
const settings = api.conf.get();
|
const settings = api.conf.get();
|
||||||
const widgets = api.widgets.map();
|
const widgets = api.widgets.map();
|
||||||
kiri.client.send("cam_holes", { settings, diam }, output => {
|
kiri.client.send("cam_holes", { settings, diam }, output => {
|
||||||
let res = kiri.codec.decode(output)
|
let res = kiri.codec.decode(output)
|
||||||
ondone(res);
|
console.log("driver gets",res)
|
||||||
|
onDone(res)
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -465,7 +465,7 @@ CAM.holes = async function(settings, widget, diam) {
|
||||||
areaDelta = area * 0.05,
|
areaDelta = area * 0.05,
|
||||||
drills = [],
|
drills = [],
|
||||||
slices = [],
|
slices = [],
|
||||||
selectall = diam <= 0;
|
selectall = (diam <= 0);
|
||||||
|
|
||||||
function onEach(slice) {
|
function onEach(slice) {
|
||||||
slices.push(slice);
|
slices.push(slice);
|
||||||
|
|
@ -483,8 +483,8 @@ CAM.holes = async function(settings, widget, diam) {
|
||||||
for (let poly of inner) {
|
for (let poly of inner) {
|
||||||
let center = poly.calcCircleCenter();
|
let center = poly.calcCircleCenter();
|
||||||
|
|
||||||
center.isSelected = (selectall || (poly.circularity() >= 0.985 && Math.abs(poly.area() - area) <= areaDelta ));
|
center.selected = (selectall || (poly.circularity() >= 0.985 && Math.abs(poly.area() - area) <= areaDelta ));
|
||||||
|
// center.points = poly.points;
|
||||||
|
|
||||||
if (center.isInPolygon(slice.shadow)) {
|
if (center.isInPolygon(slice.shadow)) {
|
||||||
//TODO: test if this is working
|
//TODO: test if this is working
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ class Layers {
|
||||||
}
|
}
|
||||||
|
|
||||||
// add an enclosed 3D polygon earcut into faces
|
// add an enclosed 3D polygon earcut into faces
|
||||||
// used for FDM solids, bridges, flats debug & SLA slice visualization
|
// used for FDM solids, bridges, flats debug, CAM hole generation & SLA slice visualization
|
||||||
addAreas(polys, options) {
|
addAreas(polys, options) {
|
||||||
const faces = this.current.faces;
|
const faces = this.current.faces;
|
||||||
polys = Array.isArray(polys) ? polys : [ polys ];
|
polys = Array.isArray(polys) ? polys : [ polys ];
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue