constrain support paint on to downward faces

This commit is contained in:
Stewart Allen 2026-01-06 22:17:25 -05:00
commit 7d888a1af2
2 changed files with 14 additions and 6 deletions

View file

@ -1,5 +1,6 @@
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
import { newPoint } from '../../../geo/point.js';
import { $ } from '../../../moto/webui.js'; import { $ } from '../../../moto/webui.js';
import { api } from '../../app/api.js'; import { api } from '../../app/api.js';
import { conf } from '../../app/conf/defaults.js'; import { conf } from '../../app/conf/defaults.js';
@ -14,7 +15,8 @@ let lastView,
addingSupports = false, addingSupports = false,
isFdmMode = false, isFdmMode = false,
alert = [], alert = [],
func = {}; func = {},
down;
export function init() { export function init() {
const { ui } = api; const { ui } = api;
@ -181,17 +183,16 @@ export function init() {
return func.sdone(); return func.sdone();
} }
alert = api.show.alert("[esc] key cancels support editing", 1000); alert = api.show.alert("[esc] key cancels support editing", 1000);
let down;
api.feature.hover = addingSupports = true; api.feature.hover = addingSupports = true;
api.feature.on_mouse_down = (int) => { api.feature.on_mouse_down = (int) => {
if (int) { if (int) {
let { point } = int; let { point } = int;
down = { point, widget: int.object.widget }; down = { point, widget: int.object.widget, z: int.face.normal.z };
} }
return api.widgets.meshes(); return api.widgets.meshes();
}; };
api.feature.on_mouse_drag = ({ int }) => { api.feature.on_mouse_drag = ({ int }) => {
if (int?.length) { if (int?.length && int[0].face.normal.z < 0) {
func.sadd_point(int[0].point, down.widget); func.sadd_point(int[0].point, down.widget);
} }
return [ down.widget.mesh ]; return [ down.widget.mesh ];
@ -217,6 +218,13 @@ export function init() {
}; };
// return console.log({ on, widget, point }); // return console.log({ on, widget, point });
let paint = widget.anno.paint; let paint = widget.anno.paint;
let pt = newPoint(x, -z, y);
for (let r of paint) {
let { point } = r;
if (newPoint(point.x, point.y, point.z).distTo2D(pt) < 1) {
return;
}
}
paint.push(rec); paint.push(rec);
updatePaintOverlay(widget.mesh.material[0], paint); updatePaintOverlay(widget.mesh.material[0], paint);
api.space.update(); api.space.update();
@ -307,7 +315,7 @@ export function init() {
return; return;
} }
let { object } = on; let { object } = on;
if (object) { if (object && down.z < 0) {
let { point } = object; let { point } = object;
let { widget } = object.object; let { widget } = object.object;
func.sadd_point(point, widget); func.sadd_point(point, widget);

View file

@ -443,7 +443,7 @@ export function sliceOne(settings, widget, onupdate, ondone) {
* Process shadow-based support generation * Process shadow-based support generation
*/ */
async function processAutoSupport() { async function processAutoSupport() {
if (process.sliceSupportType !== 'automatic') { if (process.sliceSupportType === 'disabled') {
return; return;
} }