+
- {
- activeSketchId ?
- sketchModeButtons.map(([Icon, fcn, txt, shortcut], idx) => (
-
- ))
- :
- partModeButtons.map(([Icon, fcn, txt, shortcut], idx) => (
-
- ))
- }
-
+
+ {
+ activeSketchId ?
+ sketchModeButtons.map(([Icon, fcn, txt, shortcut], idx) => (
+
+ ))
+ :
+ partModeButtons.map(([Icon, fcn, txt, shortcut], idx) => (
+
+ ))
+ }
+
+
diff --git a/src/react/reducer.js b/src/react/reducer.js
index cc95fb8..7c914d3 100644
--- a/src/react/reducer.js
+++ b/src/react/reducer.js
@@ -1,6 +1,6 @@
-import { DepTree } from './depTree.mjs'
+import { DepTree } from './depTree'
import update from 'immutability-helper'
import { combineReducers } from 'redux';
@@ -13,6 +13,7 @@ const defaultState = {
activeSketchId: ""
}
+
export function treeEntries(state = defaultState, action) {
switch (action.type) {
case 'rx-sketch':
@@ -31,15 +32,35 @@ export function treeEntries(state = defaultState, action) {
}
case 'set-active-sketch':
+ window.cache = JSON.stringify(state.byId[action.activeSketchId])
return update(state, {
visible: { [action.activeSketchId]: { $set: true } },
activeSketchId: { $set: action.activeSketchId },
})
- case 'exit-sketch':
+ case 'finish-sketch':
return update(state, {
activeSketchId: { $set: "" },
visible: { [state.activeSketchId]: { $set: false } },
})
+ case 'cancel-sketch':
+
+ const sketch = sc.loadSketch(cache)
+ console.log(cache, sketch)
+
+ const deletedObj = sc.obj3d.children.splice(state.order[state.activeSketchId] + 1, 1,
+ sketch.obj3d
+ )[0]
+
+ deletedObj.traverse((obj) => {
+ if (obj.geometry) obj.geometry.dispose()
+ if (obj.material) obj.material.dispose()
+ })
+
+ return update(state, {
+ activeSketchId: { $set: "" },
+ byId: { [state.activeSketchId]: { $set: sketch } },
+ visible: { [state.activeSketchId]: { $set: false } },
+ })
case 'rx-extrusion':
return update(state, {
@@ -82,7 +103,7 @@ export function treeEntries(state = defaultState, action) {
}
}
-export function ui(state = {dialog:{}}, action) {
+export function ui(state = { dialog: {} }, action) {
switch (action.type) {
case 'set-dialog':
diff --git a/src/react/tree.jsx b/src/react/tree.jsx
index cea99fa..2e849e3 100644
--- a/src/react/tree.jsx
+++ b/src/react/tree.jsx
@@ -6,8 +6,6 @@ import { MdVisibilityOff, MdVisibility, MdDelete, MdRefresh } from 'react-icons/
import { FaCube, FaEdit } from 'react-icons/fa'
-import { DepTree } from './depTree.mjs'
-
export const Tree = () => {
const treeEntries = useSelector(state => state.treeEntries)
@@ -53,7 +51,9 @@ const TreeEntry = ({ entId }) => {
onDoubleClick={() => {
if (obj3d.userData.type == 'sketch') {
sc.activeSketch && sc.activeSketch.deactivate()
+
sketch.activate()
+
sc.clearSelection()
sc.activeSketch = sketch;
dispatch({ type: 'set-dialog', action: 'sketch' })