fixing delete, still one thing

master
howard 2021-03-29 15:12:46 -07:00
parent 87c7c3e55c
commit b3162d97f7
6 changed files with 62 additions and 47 deletions

1
dist/index.html vendored
View File

@ -39,7 +39,6 @@
<div id="react"></div> <div id="react"></div>
<canvas id="c"></canvas> <canvas id="c"></canvas>
<div id="stats"></div> <div id="stats"></div>
<!-- <script src="redux.bundle.js"></script> -->
<script src="index.bundle.js"></script> <script src="index.bundle.js"></script>
<script src="renderer.bundle.js"></script> <script src="renderer.bundle.js"></script>
<script src="solver.js"></script> <script src="solver.js"></script>

View File

@ -7,7 +7,7 @@ import { onHover, onDrag, onPick, onRelease } from './pickEvents'
import { addDimension, setCoincident } from './constraintEvents' import { addDimension, setCoincident } from './constraintEvents'
import { get3PtArc } from './sketchArc' import { get3PtArc } from './sketchArc'
import { extrude } from './extrude' import { extrude } from './extrude'
import {_vec2, _vec3, raycaster} from '../utils/static' import { _vec2, _vec3, raycaster } from '../utils/static'
@ -62,7 +62,7 @@ class Sketcher extends THREE.Group {
this.onKeyPress = this.onKeyPress.bind(this); this.onKeyPress = this.onKeyPress.bind(this);
this.matrixAutoUpdate=false; this.matrixAutoUpdate = false;
this.selected = new Set() this.selected = new Set()
this.hovered = [] this.hovered = []
@ -151,24 +151,57 @@ class Sketcher extends THREE.Group {
} }
deleteSelected() { deleteSelected() {
let minI = this.children.length;
for (let obj of this.selected) { const toDelete = [...this.selected]
minI = Math.min(minI, this.delete(obj)) .filter(e => e.type == 'Line')
} .sort((a, b) => b.id - a.id)
.map(e => {
const i = this.objIdx.get(e.id)
this.delete(i)
return i
})
// this.updatePointsBuffer(minI)
this.updatePointsBuffer() this.updatePointsBuffer(toDelete[0])
// this.updatePointsBuffer()
this.updateOtherBuffers() this.updateOtherBuffers()
this.selected.clear() this.selected.clear()
this.dispatchEvent({ type: 'change' }) this.dispatchEvent({ type: 'change' })
} }
delete(i) {
const obj = this.children[i]
let link = this.linkedObjs.get(obj.l_id)
if (!link) return;
link = link[1]
console.log('delete',link.length)
for (let j = 0; j < link.length; j++) {
const obj = this.children[i + j]
obj.geometry.dispose()
obj.material.dispose()
for (let c_id of obj.constraints) {
console.log(j,c_id)
this.deleteConstraints(c_id)
}
}
this.children.splice(i, link.length)
this.linkedObjs.delete(obj.l_id)
}
deleteConstraints(c_id) { deleteConstraints(c_id) {
for (let ob of this.constraints.get(c_id)[2]) { for (let idx of this.constraints.get(c_id)[2]) { //////////
if (ob == -1) continue if (idx == -1) continue
ob.constraints.delete(c_id) const ob = this.children[this.objIdx.get(idx)]
if (ob) {
ob.constraints.delete(c_id)
}
} }
this.constraints.delete(c_id) this.constraints.delete(c_id)
} }
@ -179,7 +212,7 @@ class Sketcher extends THREE.Group {
this.constraintsBuf.set( this.constraintsBuf.set(
[ [
this.constraintNum[obj[0]], obj[1], this.constraintNum[obj[0]], obj[1],
...obj[2].map(ele => this.objIdx.get(ele.id) ?? -1), ...obj[2].map(ele => this.objIdx.get(ele) ?? -1),
], ],
(i) * 6 (i) * 6
) )
@ -191,7 +224,7 @@ class Sketcher extends THREE.Group {
this.linksBuf.set( this.linksBuf.set(
[ [
this.linkNum[obj[0]], this.linkNum[obj[0]],
...obj[1].map(ele => this.objIdx.get(ele.id) ?? -1), ...obj[1].map(ele => this.objIdx.get(ele) ?? -1),
], ],
(i) * 5 (i) * 5
) )
@ -200,29 +233,7 @@ class Sketcher extends THREE.Group {
} }
delete(obj) {
let link = this.linkedObjs.get(obj.l_id)
if (!link) return Infinity;
link = link[1]
let i = this.children.indexOf(link[0])
for (let j = 0; j < link.length; j++) {
const obj = this.children[i + j]
obj.geometry.dispose()
obj.material.dispose()
for (let c_id of obj.constraints) {
this.deleteConstraints(c_id)
}
}
this.children.splice(i, link.length)
this.linkedObjs.delete(obj.l_id)
return i
}
updatePointsBuffer(startingIdx = 0) { updatePointsBuffer(startingIdx = 0) {
for (let i = startingIdx; i < this.children.length; i++) { for (let i = startingIdx; i < this.children.length; i++) {
@ -299,7 +310,7 @@ class Sketcher extends THREE.Group {
*/ */
for (let [k, obj] of this.linkedObjs) { for (let [k, obj] of this.linkedObjs) {
if (obj[0] != 'arc') continue; if (obj[0] != 'arc') continue;
const [p1, p2, c, arc] = obj[1] const [p1, p2, c, arc] = obj[1].map(e => this.children[this.objIdx.get(e)])
const points = get3PtArc( const points = get3PtArc(
p1.geometry.attributes.position.array, p1.geometry.attributes.position.array,

View File

@ -68,7 +68,7 @@ export function setCoincident() {
this.constraints.set(++this.c_id, this.constraints.set(++this.c_id,
[ [
'coincident', -1, 'coincident', -1,
[toComb[i - 1], toComb[i], -1, -1] [toComb[i - 1].id, toComb[i].id, -1, -1] ///////
] ]
) )
toComb[i].constraints.add(this.c_id) toComb[i].constraints.add(this.c_id)

View File

@ -16,7 +16,7 @@ export function drawOnClick1(e) {
this.updatePoint = this.children.length this.updatePoint = this.children.length
this.add(...this.toPush) this.add(...this.toPush)
this.linkedObjs.set(this.l_id, [this.mode, this.toPush]) this.linkedObjs.set(this.l_id, [this.mode, this.toPush.map(e=>e.id)])
for (let obj of this.toPush) { for (let obj of this.toPush) {
obj.l_id = this.l_id obj.l_id = this.l_id
} }
@ -65,7 +65,7 @@ export function drawClear() {
this.domElement.removeEventListener('pointermove', this.drawPreClick2); this.domElement.removeEventListener('pointermove', this.drawPreClick2);
this.domElement.removeEventListener('pointerdown', this.drawOnClick2); this.domElement.removeEventListener('pointerdown', this.drawOnClick2);
this.delete(this.children[this.children.length - 1]) this.delete(this.updatePoint)
this.dispatchEvent({ type: 'change' }) this.dispatchEvent({ type: 'change' })
this.subsequent = false this.subsequent = false

View File

@ -1,10 +1,11 @@
import * as THREE from '../../node_modules/three/src/Three'; import * as THREE from '../../node_modules/three/src/Three';
import {pointMaterial} from '../utils/static' import { pointMaterial } from '../utils/static'
export function extrude(sketch) { export function extrude(sketch) {
let constraints = sketch.constraints; let constraints = sketch.constraints;
let linkedObjs = sketch.linkedObjs; let linkedObjs = sketch.linkedObjs;
let children = sketch.children; let children = sketch.children;
let objIdx = sketch.objIdx;
let visited = new Set() let visited = new Set()
let v2s = [] let v2s = []
@ -13,16 +14,18 @@ export function extrude(sketch) {
let linkedObj = linkedObjs.get(node.l_id) let linkedObj = linkedObjs.get(node.l_id)
let arr; let arr;
if (linkedObj[0] == 'line') { if (linkedObj[0] == 'line') {
arr = linkedObj[1][2].geometry.attributes.position.array // console.log(children, objIdx, linkedObj)
arr = children[objIdx.get(linkedObj[1][2])].geometry.attributes.position.array
} else if (linkedObj[0] == 'arc') { } else if (linkedObj[0] == 'arc') {
arr = linkedObj[1][3].geometry.attributes.position.array arr = children[objIdx.get(linkedObj[1][3])].geometry.attributes.position.array
} }
for (let i = 0; i < arr.length; i += 3) { for (let i = 0; i < arr.length; i += 3) {
v2s.push(new THREE.Vector2(arr[i], arr[i + 1])) v2s.push(new THREE.Vector2(arr[i], arr[i + 1]))
} }
for (let i = 0; i < 2; i++) { for (let i = 0; i < 2; i++) {
let d = linkedObj[1][i] // let d = linkedObj[1][i]
let d = children[objIdx.get(linkedObj[1][i])]
if (d == -1 || d == node) continue; if (d == -1 || d == node) continue;
if (d == children[1]) { if (d == children[1]) {
console.log('pair found') console.log('pair found')
@ -36,8 +39,10 @@ export function extrude(sketch) {
function findTouching(node) { function findTouching(node) {
for (let t of node.constraints) { for (let t of node.constraints) {
if (constraints.get(t)[0] != 'coincident') continue if (constraints.get(t)[0] != 'coincident') continue
for (let d of constraints.get(t)[2]) { for (let c of constraints.get(t)[2]) {
if (d == -1 || d == node) continue; if (c == -1) continue;
const d = children[objIdx.get(c)]
if (d == node) continue;
if (d == children[1]) { if (d == children[1]) {
console.log('loop found') console.log('loop found')
} else { } else {

View File

@ -41,7 +41,7 @@ export function sketchLine(mouseLoc) {
this.constraints.set(++this.c_id, this.constraints.set(++this.c_id,
[ [
'coincident', -1, 'coincident', -1,
[this.children[this.children.length - 2], p1, -1, -1] [this.children[this.children.length - 2].id, p1.id, -1, -1]
] ]
) )