ugly but works 2

master
howard 2021-04-17 03:25:43 -07:00
parent fbb4fefaa9
commit 4076c90e58
5 changed files with 28 additions and 5 deletions

View File

@ -412,10 +412,14 @@ async function addSketch() {
sketch.activate() sketch.activate()
this.render() this.render()
} }
window.sc = new Scene(store) window.sc = new Scene(store)
sc.loadState() sc.loadState()
// sc.camera.layers.enable(1) // sc.camera.layers.enable(1)
// rc.layers.set(1) // rc.layers.set(1)

View File

@ -5,7 +5,7 @@ import * as THREE from '../node_modules/three/src/Three';
import { _vec2, _vec3, raycaster, awaitSelection, ptObj, setHover } from './shared' import { _vec2, _vec3, raycaster, awaitSelection, ptObj, setHover } from './shared'
import { drawOnClick1, drawOnClick2, drawPreClick2, drawOnClick3, drawPreClick3, drawClear, drawPoint } from './drawEvents' import { drawOnClick1, drawOnClick2, drawPreClick2, drawOnClick3, drawPreClick3, drawClear, drawPoint } from './drawEvents'
import { onHover, onDrag, onPick, onRelease } from './mouseEvents' import { onHover, onDrag, onPick, onRelease, clearSelection} from './mouseEvents'
import { setCoincident, setOrdinate, setTangent } from './constraintEvents' import { setCoincident, setOrdinate, setTangent } from './constraintEvents'
import { get3PtArc } from './drawArc' import { get3PtArc } from './drawArc'
import { replacer, reviver } from './utils' import { replacer, reviver } from './utils'
@ -148,6 +148,7 @@ class Sketch {
this.onKeyPress = this.onKeyPress.bind(this); this.onKeyPress = this.onKeyPress.bind(this);
this.setHover = setHover.bind(this); this.setHover = setHover.bind(this);
this.clearSelection = clearSelection.bind(this)
} }
@ -186,6 +187,7 @@ class Sketch {
} }
deactivate() { deactivate() {
console.log('deactivateeeeeeee')
window.removeEventListener('keydown', this.onKeyPress) window.removeEventListener('keydown', this.onKeyPress)
this.canvas.removeEventListener('pointerdown', this.onPick) this.canvas.removeEventListener('pointerdown', this.onPick)
this.canvas.removeEventListener('pointermove', this.onHover) this.canvas.removeEventListener('pointermove', this.onHover)
@ -195,7 +197,9 @@ class Sketch {
this.obj3d.traverse(e => e.layers.disable(2)) this.obj3d.traverse(e => e.layers.disable(2))
this.scene.axes.visible = false this.scene.axes.visible = false
this.scene.activeSketch = null this.scene.activeSketch = null
this.selected = []
this.clearSelection()
} }

View File

@ -72,11 +72,14 @@ export const Dialog = () => {
if (sc.activeSketch.hasChanged || sc.activeSketch.idOnActivate != id) { if (sc.activeSketch.hasChanged || sc.activeSketch.idOnActivate != id) {
console.log('has changed') console.log('has changed')
dispatch({ type: "cancel-sketch" }) dispatch({ type: "cancel-sketch" })
sc.store.getState().treeEntries.byId[sc.activeSketch.obj3d.name].deactivate()
} else {
sc.activeSketch.deactivate()
} }
sc.activeSketch.deactivate()
sc.render()
sc.render()
dispatch({ type: "clear-dialog" }) dispatch({ type: "clear-dialog" })
} }

View File

@ -31,7 +31,16 @@ export const NavBar = () => {
forceUpdate() forceUpdate()
} }
useEffect(() => { // hacky way to handle mounting and unmounting mouse listeners for feature mode
if (!activeSketchId) {
sc.canvas.addEventListener('pointermove', sc.onHover)
sc.canvas.addEventListener('pointerdown', sc.onPick)
return () => {
sc.canvas.removeEventListener('pointermove', sc.onHover)
sc.canvas.removeEventListener('pointerdown', sc.onPick)
}
}
}, [activeSketchId])
const sketchModeButtons = [ const sketchModeButtons = [
[Icon.Extrude, () => { [Icon.Extrude, () => {

View File

@ -50,12 +50,15 @@ export function treeEntries(state = defaultState, action) {
const deletedObj = sc.obj3d.children.splice(state.order[state.activeSketchId] + 1, 1, const deletedObj = sc.obj3d.children.splice(state.order[state.activeSketchId] + 1, 1,
sketch.obj3d sketch.obj3d
)[0] )[0]
console.log('spliced and starting to delete')
deletedObj.traverse((obj) => { deletedObj.traverse((obj) => {
if (obj.geometry) obj.geometry.dispose() if (obj.geometry) obj.geometry.dispose()
if (obj.material) obj.material.dispose() if (obj.material) obj.material.dispose()
}) })
// sketch.deactivate()
return update(state, { return update(state, {
activeSketchId: { $set: "" }, activeSketchId: { $set: "" },
byId: { [state.activeSketchId]: { $set: sketch } }, byId: { [state.activeSketchId]: { $set: sketch } },