From fdf5dc628bb07d85d2e2ae6146905b5050c7f5bb Mon Sep 17 00:00:00 2001 From: howard Date: Fri, 2 Apr 2021 21:05:28 -0700 Subject: [PATCH] semi working dimension line --- dist/solver.wasm | Bin 138710 -> 138893 bytes src/extrude.js | 7 ++-- src/sketcher/Sketch.js | 1 - src/sketcher/drawDimension.js | 58 ++++++++++++++++++++++++++++++---- src/utils/mouseEvents.js | 23 +++++++++----- wasm/solver.c | 57 +++++++-------------------------- 6 files changed, 83 insertions(+), 63 deletions(-) diff --git a/dist/solver.wasm b/dist/solver.wasm index 04fd3bc81996949f2f8c843a502f4ec42745ec19..01d053cb76df9d8470e2d9cd449ee33d3bf855a3 100755 GIT binary patch delta 5066 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 delta 4903 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 { const ret = new THREE.Points( new THREE.BufferGeometry().setAttribute('position', @@ -12,6 +34,7 @@ const DptObj = (n) => { ret.matrixAutoUpdate = false; ret.userData.constraints = [] + ret.userData.construction = true return ret } @@ -62,12 +85,15 @@ export async function drawDimensionPre() { p1.userData.constraints.push(this.c_id) p2.userData.constraints.push(this.c_id) + // this.updateOtherBuffers() + // console.log(points) - for (let i = 1; i++; i < points.length) { + const updatePoint = this.obj3d.children.length + for (let i = 1; i < points.length; i++) { if (i % 2) { this.constraints.set(++this.c_id, //??? increment investigation [ - 'coincident', -1, + 'points_coincident', -1, [points[i - 1].name, points[i].name, -1, -1] ] ) @@ -75,9 +101,10 @@ export async function drawDimensionPre() { points[i].userData.constraints.push(this.c_id) - } else { + } else { // even + + const toPush = [...points.slice(i - 1, i + 1), lines[i / 2 - 1]] - const toPush = [...points.slice(i - 2, i), lines[i / 2 - 1]] this.linkedObjs.set(this.l_id, ['line', toPush.map(e => e.name)]) for (let obj of toPush) { obj.userData.l_id = this.l_id @@ -95,11 +122,30 @@ export async function drawDimensionPre() { lines[i / 2 - 1].userData.constraints.push(this.c_id) } + this.obj3d.add(...toPush) // not to be confused with this.topush + } + if (i<=3) { // move pts to their respective spots to spread them + points[i].geometry.attributes.position.set(p1.geometry.attributes.position.array) + } else { + points[i].geometry.attributes.position.set(p2.geometry.attributes.position.array) + } } + lines[0].userData.construction = true + lines[2].userData.construction = true + + + + + + + + this.updatePointsBuffer(updatePoint) + this.updateOtherBuffers() + // line[1].geometry.attributes.position.set(p1.geometry.attributes.position.array) // line[1].geometry.attributes.position.set(p1.geometry.attributes.position.array, 3) @@ -117,7 +163,7 @@ export async function drawDimensionPre() { - return [p1, p2, line]; + return } export function drawLine(mouseLoc) { @@ -132,7 +178,7 @@ export function drawLine(mouseLoc) { this.constraints.set(++this.c_id, [ - 'coincident', -1, + 'points_coincident', -1, [this.obj3d.children[this.obj3d.children.length - 2].name, p1.name, -1, -1] ] ) diff --git a/src/utils/mouseEvents.js b/src/utils/mouseEvents.js index 67aeb85..2318a1e 100644 --- a/src/utils/mouseEvents.js +++ b/src/utils/mouseEvents.js @@ -13,7 +13,7 @@ export function onHover(e) { ); let hoverPts; - if (this.obj3d.name[0]=='s') { + if (this.obj3d.name[0] == 's') { hoverPts = raycaster.intersectObjects(this.obj3d.children) } else { hoverPts = raycaster.intersectObjects(this.obj3d.children, true) @@ -31,6 +31,7 @@ export function onHover(e) { idx.push(i) } } + // console.log(hoverPts, idx) if (!idx.length) idx.push(0) } @@ -92,13 +93,19 @@ export function onPick(e) { export function onDrag(e) { const mouseLoc = this.getLocation(e); - for (let x = 0; x < this.hovered.length; x++) { - const obj = this.hovered[x] - this.ptsBuf.set( - mouseLoc, - this.objIdx.get(obj.name) * 3 - ) - } + // for (let x = 0; x < this.hovered.length; x++) { + // const obj = this.hovered[x] + // this.ptsBuf.set( + // mouseLoc, + // this.objIdx.get(obj.name) * 3 + // ) + // } + + const obj = this.hovered[this.hovered.length-1] + this.ptsBuf.set( + mouseLoc, + this.objIdx.get(obj.name) * 3 + ) this.solve() this.obj3d.dispatchEvent({ type: 'change' }) diff --git a/wasm/solver.c b/wasm/solver.c index 4cffe5a..34881f3 100644 --- a/wasm/solver.c +++ b/wasm/solver.c @@ -77,6 +77,7 @@ int solver(int nPts, float *p_ptr, int nConst, float *c_ptr, int nLinks, float * { if (isnan((float)*p_ptr)) { + // printf("%i\n",i); p_ptr += 3; continue; } @@ -92,13 +93,14 @@ int solver(int nPts, float *p_ptr, int nConst, float *c_ptr, int nLinks, float * switch ((int)*l_ptr++) { case 0: - sys.entity[sys.entities++] = Slvs_MakeLineSegment(lh++, g, + // printf("matching %i\n",(int)*(l_ptr + 2)); + sys.entity[sys.entities++] = Slvs_MakeLineSegment((int)*(l_ptr + 2), g, 200, (int)*l_ptr, (int)*(l_ptr + 1)); break; case 1: /* And arc, centered at point 303, starting at point 304, ending at * point 305. */ - sys.entity[sys.entities++] = Slvs_MakeArcOfCircle(lh++, g, 200, 102, + sys.entity[sys.entities++] = Slvs_MakeArcOfCircle((int)*(l_ptr + 3), g, 200, 102, (int)*(l_ptr + 2), (int)*(l_ptr), (int)*(l_ptr + 1)); break; default: @@ -108,50 +110,15 @@ int solver(int nPts, float *p_ptr, int nConst, float *c_ptr, int nLinks, float * l_ptr += 4; } - for (int i = 0; i < nConst; i++) + for (int i = 0; i < nConst; i++, c_ptr += 6) { - - - - switch ((int)*c_ptr + 100000) - { - case SLVS_C_POINTS_COINCIDENT: - c_ptr += 2; - sys.constraint[sys.constraints++] = Slvs_MakeConstraint( - con_id++, g, - SLVS_C_POINTS_COINCIDENT, - 200, - 0.0, - (int)*c_ptr, (int)*(c_ptr + 1), 0, 0); - - c_ptr += 4; - break; - case 1: - - break; - default: - c_ptr += 6; - break; - } - - - - // if ((int)*c_ptr + 100000 == SLVS_C_POINTS_COINCIDENT) - // { - // c_ptr += 2; - // sys.constraint[sys.constraints++] = Slvs_MakeConstraint( - // con_id++, g, - // SLVS_C_POINTS_COINCIDENT, - // 200, - // 0.0, - // (int)*c_ptr, (int)*(c_ptr + 1), 0, 0); - - // c_ptr += 4; - // } - // else - // { - // c_ptr += 6; - // } + // printf("%i here %i\n",(int)*c_ptr, nConst); + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + con_id++, g, + (int)*c_ptr + 100000, + 200, + *(c_ptr + 1), + (int)*(c_ptr + 2), (int)*(c_ptr + 3), (int)*(c_ptr + 4), (int)*(c_ptr + 5)); } /* And solve. */