complete basic auto support generation
This commit is contained in:
parent
4bd21e4e10
commit
eadd9cf355
5 changed files with 15 additions and 14 deletions
|
|
@ -295,6 +295,7 @@
|
|||
sliceSupportArea: 1,
|
||||
sliceSupportExtra: 0,
|
||||
sliceSupportSpan: 5,
|
||||
sliceSupportAngle: 50,
|
||||
sliceSupportNozzle: 0,
|
||||
sliceSolidMinArea: 1,
|
||||
sliceSolidLayers: 3,
|
||||
|
|
|
|||
|
|
@ -1619,6 +1619,7 @@
|
|||
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
|
||||
sliceSupportSpan: UC.newInput(LANG.sp_span_s, {title:LANG.sp_span_l, bound:UC.bound(0.0,200.0), convert:UC.toFloat, modes:FDM, show: () => UI.sliceSupportEnable.checked}),
|
||||
sliceSupportEnable: UC.newBoolean(LANG.sp_auto_s, onBooleanClick, {title: LANG.sp_auto_l, modes:FDM, trigger:true}),
|
||||
sliceSupportAngle: LOCAL ? UC.newInput(LANG.sp_angl_s, {title:LANG.sp_angl_l, bound:UC.bound(0.0,90.0), convert:UC.toFloat, modes:FDM}) : null,
|
||||
|
||||
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
|
||||
sliceSupportGen: LOCAL ? UC.newRow([
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
KIRI.client.sync();
|
||||
let settings = API.conf.get();
|
||||
let widgets = API.widgets.map();
|
||||
send('fdm_support_generate', {}, (gen) => {
|
||||
send('fdm_support_generate', { settings }, (gen) => {
|
||||
for (let g of gen) g.widget = widgets[g.id];
|
||||
ondone(gen);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1077,27 +1077,24 @@
|
|||
FDM.supports = function(settings, widget) {
|
||||
let buf = new THREE.BufferGeometry();
|
||||
buf.setAttribute('position', new THREE.BufferAttribute(widget.vertices, 3));
|
||||
let mat = new THREE.MeshBasicMaterial();
|
||||
let geo = new THREE.Geometry().fromBufferGeometry(buf);
|
||||
// console.log('geo',
|
||||
// geo,
|
||||
// {
|
||||
// "<": geo.faces.filter(f => f.normal.z < 0),
|
||||
// ">": geo.faces.filter(f => f.normal.z > 0),
|
||||
// "=": geo.faces.filter(f => f.normal.z == 0)
|
||||
// }
|
||||
// );
|
||||
let mesh = new THREE.Mesh(geo, new THREE.MeshBasicMaterial());
|
||||
let angle = (Math.PI / 180) * settings.process.sliceSupportAngle;
|
||||
let thresh = -Math.sin(angle);
|
||||
let mesh = new THREE.Mesh(geo, mat);
|
||||
let dir = new THREE.Vector3(0,0,-1)
|
||||
let add = [];
|
||||
geo.faces.filter(f => f.normal.z < 0).forEach(face => {
|
||||
let platform = new THREE.Mesh(
|
||||
new THREE.PlaneGeometry(1000,1000,1), mat
|
||||
);
|
||||
geo.faces.filter(f => f.normal.z < thresh).forEach(face => {
|
||||
let a = geo.vertices[face.a];
|
||||
let b = geo.vertices[face.b];
|
||||
let c = geo.vertices[face.c];
|
||||
let point = a.add(b).add(c).divideScalar(3);
|
||||
let ray = new THREE.Raycaster(point, dir);
|
||||
let int = ray.intersectObjects([ mesh ], false);
|
||||
if (int && int.length) {
|
||||
console.log(int);
|
||||
let int = ray.intersectObjects([ mesh, platform ], false);
|
||||
if (int && int.length && int[0].distance > 0.01) {
|
||||
let mid = new THREE.Vector3().add(point).add(int[0].point).divideScalar(2);
|
||||
add.push({from: point, to: int[0].point, mid});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -235,6 +235,8 @@ kiri.lang['en-us'] = {
|
|||
sp_gaps_l: "number of layers\noffset from part",
|
||||
sp_span_s: "max span",
|
||||
sp_span_l: "unsupported span that causes\na new support to be generated\nin millimeters",
|
||||
sp_angl_s: "max angle",
|
||||
sp_angl_l: "max overhang angle before\nsupporting pillar is generated",
|
||||
sp_area_s: "min area",
|
||||
sp_area_l: "minimum area for\na support column\nin millimeters",
|
||||
sp_xpnd_s: "expand",
|
||||
|
|
|
|||
Loading…
Reference in a new issue