diff --git a/src/kiri/mode/fdm/init-menu.js b/src/kiri/mode/fdm/init-menu.js index ffaf931f..8131a6da 100644 --- a/src/kiri/mode/fdm/init-menu.js +++ b/src/kiri/mode/fdm/init-menu.js @@ -129,7 +129,7 @@ export function menu() { separator: newBlank({ class:"set-sep", driven, show:manualSupport }), sliceSupportManual: newRow([ (ui.ssmAdd = newButton(undefined, onButtonClick, {icon:''})), - (ui.ssmDun = newButton(undefined, onButtonClick, {icon:''})), + (ui.ssmDel = newButton(undefined, onButtonClick, {icon:''})), (ui.ssmClr = newButton(undefined, onButtonClick, {icon:''})) ], {class:"ext-buttons f-row", show:manualSupport}), _____: newGroup(LANG.fl_menu, $('fdm-base'), { modes:FDM, driven, hideable, separator, group:"fdm-base" }), diff --git a/src/kiri/mode/fdm/init-ui.js b/src/kiri/mode/fdm/init-ui.js index 3a7819c1..1f955c7d 100644 --- a/src/kiri/mode/fdm/init-ui.js +++ b/src/kiri/mode/fdm/init-ui.js @@ -13,6 +13,7 @@ const LANG = api.language.current; let lastView, addingSupports = false, + removingSupports = false, isFdmMode = false, alert = [], func = {}, @@ -164,8 +165,8 @@ export function init() { api.event.on("button.click", target => { switch (target) { case api.ui.ssaGen: return func.sgen(); - case api.ui.ssmAdd: return func.sadd(); - case api.ui.ssmDun: return func.sdone(); + case api.ui.ssmAdd: return func.sadd({ remove: false }); + case api.ui.ssmDel: return func.sadd({ remove: true }); case api.ui.ssmClr: return func.sclear(); } }); @@ -178,11 +179,15 @@ export function init() { } // manual add supports - func.sadd = () => { + func.sadd = ({ remove } = { remove: false }) => { if (addingSupports) { - return func.sdone(); + func.sdone(); + if (removingSupports === remove) { + return; + } } - alert = api.show.alert("[esc] key cancels support editing", 1000); + removingSupports = remove; + alert = api.show.alert(`[esc] key cancels ${remove?'removing':'adding'} supports`, 1000); api.feature.hover = addingSupports = true; api.feature.on_mouse_down = (int) => { if (int) { @@ -193,7 +198,7 @@ export function init() { }; api.feature.on_mouse_drag = ({ int }) => { 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, remove); } return [ down.widget.mesh ]; // return api.widgets.meshes(); @@ -210,7 +215,7 @@ export function init() { api.space.update(); } - func.sadd_point = (point, widget) => { + func.sadd_point = (point, widget, remove) => { let { x, y, z } = point; let rec = { point: { x, y:-z, z:y }, @@ -221,15 +226,21 @@ export function init() { 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) { + let dist = newPoint(point.x, point.y, point.z).distTo2D(pt); + if (remove && dist < 2) { + r.delete = true; + } else if (dist < 1) { return; } } - paint.push(rec); + if (remove) { + paint = widget.anno.paint = paint.filter(rec => !rec.delete); + } else { + paint.push(rec); + } updatePaintOverlay(widget.mesh.material[0], paint); api.space.update(); api.conf.save(); - }; // manual add done @@ -309,6 +320,7 @@ export function init() { // rotate supports when rotation is constrained to Z axis rotateWidgetPaint(widget, z); } + api.conf.save(); }); api.event.on("mouse.hover.up", func.hoverup = (on = {}) => { @@ -319,7 +331,7 @@ export function init() { if (object && down.z < 0) { let { point } = object; let { widget } = object.object; - func.sadd_point(point, widget); + func.sadd_point(point, widget, removingSupports); } });