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