master
howard 2021-04-03 19:08:19 -07:00
parent 399537e08c
commit 1d450bab1c
2 changed files with 51 additions and 54 deletions

View File

@ -13,46 +13,42 @@ const pointMaterial = new THREE.PointsMaterial({
export async function drawDimension() { export async function drawDimension() {
let pts; let pts = await this.awaitPts(2)
// try {
// pts = await this.awaitPts(2) if (pts.length != 2) return;
// } catch {
// }
pts = await this.awaitPts(2)
console.log('here', pts)
const p1 = new THREE.Vector2(...pts[0].geometry.attributes.position.array.slice(0, 2))
const p2 = new THREE.Vector2(...pts[1].geometry.attributes.position.array.slice(0, 2))
const p3 = new THREE.Vector2()
const lineGeom = new THREE.Float32BufferAttribute(3 * 8, 3)
const line = new THREE.LineSegments( const line = new THREE.LineSegments(
new THREE.BufferGeometry().setAttribute('position', new THREE.BufferGeometry().setAttribute('position',
lineGeom new THREE.Float32BufferAttribute(3 * 8, 3)
), ),
lineMaterial.clone() lineMaterial.clone()
); );
const ptGeom = new THREE.Float32BufferAttribute(3, 3)
const point = new THREE.Points( const point = new THREE.Points(
new THREE.BufferGeometry().setAttribute('position', new THREE.BufferGeometry().setAttribute('position',
ptGeom new THREE.Float32BufferAttribute(3, 3)
), ),
pointMaterial.clone() pointMaterial.clone()
) )
this.obj3d.children[0].add(line) const group = this.obj3d.children[0]
this.obj3d.children[0].add(point) group.add(line)
group.add(point)
let dir, hyp, proj, perp, p1e, p2e, loc; let dir, hyp, proj, perp, p1e, p2e, loc;
const p1 = new THREE.Vector2(...pts[0].geometry.attributes.position.array.slice(0, 2))
const p2 = new THREE.Vector2(...pts[1].geometry.attributes.position.array.slice(0, 2))
const p3 = new THREE.Vector2()
const onMove = (e) => { const onMove = (e) => {
loc = this.getLocation(e) loc = this.getLocation(e)
p3.set(loc.x, loc.y) p3.set(loc.x, loc.y)
@ -64,33 +60,29 @@ export async function drawDimension() {
p1e = p1.clone().add(perp).toArray() p1e = p1.clone().add(perp).toArray()
p2e = p2.clone().add(perp).toArray() p2e = p2.clone().add(perp).toArray()
lineGeom.set(p1.toArray(), 0) const linegeom = line.geometry.attributes.position.array
lineGeom.set(p1e, 3) linegeom.set(p1.toArray(), 0)
linegeom.set(p1e, 3)
lineGeom.set(p1e, 6) linegeom.set(p1e, 6)
lineGeom.set(p2e, 9) linegeom.set(p2e, 9)
lineGeom.set(p2e, 12) linegeom.set(p2e, 12)
lineGeom.set(p2.toArray(), 15) linegeom.set(p2.toArray(), 15)
lineGeom.set(p1e, 18) linegeom.set(p1e, 18)
lineGeom.set(p3.toArray(), 21) linegeom.set(p3.toArray(), 21)
ptGeom.set(p3.toArray()) point.geometry.attributes.position.set(p3.toArray())
line.geometry.attributes.position.needsUpdate = true; line.geometry.attributes.position.needsUpdate = true;
point.geometry.attributes.position.needsUpdate = true; point.geometry.attributes.position.needsUpdate = true;
sc.render() sc.render()
} }
let onEnd, onKey; let onEnd, onKey;
let ret = await new Promise((res, rej) => { let add = await new Promise((res) => {
onEnd = (e) => { onEnd = (e) => {
res(true) res(true)
this.updateOtherBuffers() this.updateOtherBuffers()
@ -103,23 +95,35 @@ export async function drawDimension() {
window.addEventListener('keydown', onKey) window.addEventListener('keydown', onKey)
}) })
console.log(ret, 'here')
this.canvas.removeEventListener('pointermove', onMove) this.canvas.removeEventListener('pointermove', onMove)
this.canvas.removeEventListener('pointerdown', onEnd) this.canvas.removeEventListener('pointerdown', onEnd)
this.canvas.removeEventListener('keydown', onKey) this.canvas.removeEventListener('keydown', onKey)
// this.constraints.set(++this.c_id, //??? if (add) {
// [ this.constraints.set(++this.c_id, //???
// 'pt_pt_distance', 10, [
// [_p1.name, _p2.name, -1, -1] 'pt_pt_distance', 10,
// ] [pts[0].name, pts[1].name, -1, -1]
// ) ]
// _p1.userData.constraints.push(this.c_id) )
// _p2.userData.constraints.push(this.c_id) pts[0].userData.constraints.push(this.c_id)
pts[1].userData.constraints.push(this.c_id)
this.updateOtherBuffers()
line.name = this.c_id
point.name = this.c_id
} else {
group.children.splice(group.children.length - 2).forEach(
e => {
e.geometry.dispose()
e.material.dispose()
}
)
sc.render()
}

View File

@ -65,14 +65,8 @@ async function awaitPts(n) {
let onEnd, onKey; let onEnd, onKey;
try { try {
pt = await new Promise((res, rej) => { pt = await new Promise((res, rej) => {
onKey = (e) => { onKey = (e) => e.key == 'Escape' && rej()
if (e.key != 'Escape') return onEnd = (e) => res(this.hovered[0])
console.log(e.key, 'key')
rej()
}
onEnd = (e) => {
res(this.hovered[0])
}
this.canvas.addEventListener('pointerdown', onEnd) this.canvas.addEventListener('pointerdown', onEnd)
window.addEventListener('keydown', onKey) window.addEventListener('keydown', onKey)
@ -86,12 +80,11 @@ async function awaitPts(n) {
} }
} catch (e) { } catch (e) {
console.log('cancelled')
end = true; end = true;
} }
window.removeEventListener('keydown', onKey)
this.canvas.removeEventListener('pointerdown', onEnd) this.canvas.removeEventListener('pointerdown', onEnd)
window.removeEventListener('keydown', onKey)
} }
return references return references