From 930df2e28848eb67353716b0724cedccfbaf105c Mon Sep 17 00:00:00 2001 From: howard Date: Fri, 16 Apr 2021 01:12:10 -0700 Subject: [PATCH] fix dimension tag bugs --- dist/solver.wasm | Bin 139397 -> 139414 bytes src/Scene.js | 8 +---- src/Sketch.js | 10 +++--- src/extrude.js | 92 +++++++++++++++++++++++++---------------------- wasm/solver.c | 10 +++--- 5 files changed, 61 insertions(+), 59 deletions(-) diff --git a/dist/solver.wasm b/dist/solver.wasm index 29d812888bf5304c08512051866c19c5f973130a..c8b41634e1f2cdc2fbcb117066f2e4be539f4740 100755 GIT binary patch delta 5490 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 delta 5473 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 diff --git a/src/Scene.js b/src/Scene.js index da467c9..be438ea 100644 --- a/src/Scene.js +++ b/src/Scene.js @@ -16,13 +16,7 @@ import { AxesHelper } from './axes' import CSG from "../lib/three-csg" -const eq = (a1, a2) => { - if (a1.length != a2.length) return false - for (let i = 0; i < a1.length; i++) { - if (a1[i] != a2[i]) return false - } - return true -} + window.loader = new THREE.ObjectLoader(); window.id = 0 diff --git a/src/Sketch.js b/src/Sketch.js index bece5c6..d563f60 100644 --- a/src/Sketch.js +++ b/src/Sketch.js @@ -313,9 +313,10 @@ class Sketch { obj.geometry.dispose() obj.material.dispose() - for (let c_id of obj.userData.constraints) { + for (let c_id of obj.userData.constraints.slice()) { // i hate js this.deleteConstraints(c_id) } + obj.userData.constraints = [] } this.obj3d.children.splice(i, link.length) @@ -336,10 +337,11 @@ class Sketch { } this.constraints.delete(c_id) - for (let i = 0; i < this.obj3d.children[1].children.length; i++) { - if (this.obj3d.children[1].children[i].name == c_id) { - this.obj3d.children[1].children.splice(i, i + 2).forEach( + for (let i = 0; i < this.dimGroup.children.length; i++) { + if (this.dimGroup.children[i].name == c_id) { + this.dimGroup.children.splice(i, i + 2).forEach( e => { + if (e.label) e.label.remove() e.geometry.dispose() e.material.dispose() } diff --git a/src/extrude.js b/src/extrude.js index 665c5ec..585b41c 100644 --- a/src/extrude.js +++ b/src/extrude.js @@ -1,7 +1,6 @@ import * as THREE from '../node_modules/three/src/Three'; import { color } from './shared' export function extrude(sketch, depth) { - console.log(sketch, 'here') let constraints = sketch.constraints; let linkedObjs = sketch.linkedObjs; @@ -9,63 +8,70 @@ export function extrude(sketch, depth) { let objIdx = sketch.objIdx; let visited = new Set() let v2s = [] - let offSetPts = [] - - function findPair(node) { + console.log(node.name,'xx') if (node.userData.construction) return; visited.add(node) let linkedObj = linkedObjs.get(node.userData.l_id) let arr; + + let lineNode if (linkedObj[0] == 'line') { - arr = children[objIdx.get(linkedObj[1][2])].geometry.attributes.position.array + lineNode = linkedObj[1][2] } else if (linkedObj[0] == 'arc') { - arr = children[objIdx.get(linkedObj[1][3])].geometry.attributes.position.array - } - for (let i = 0; i < arr.length; i += 3) { - v2s.push(new THREE.Vector2(arr[i], arr[i + 1])) + lineNode = linkedObj[1][3] } - offSetPts.push(arr[0], arr[1]) //make work points for sketch creation - // offSetPts.push(arr[arr.length - 3], arr[arr.length - 2]) - - for (let i = 0; i < 2; i++) { - let d = children[ - objIdx.get( - linkedObj[1][i] - ) - ] - if (d == -1 || d == node) continue; - if (d == children[4]) { - console.log('pair found') - }; - findTouching(d) + arr = children[objIdx.get(lineNode)].geometry.attributes.position.array + let nextIdx + if (linkedObj[1][0] == node.name) { + nextIdx = 1 + for (let i = 0; i < arr.length; i += 3) { + v2s.push(new THREE.Vector2(arr[i], arr[i + 1])) + } + } else { + nextIdx = 0 + for (let i = arr.length - 3; i >= 0; i -= 3) { + v2s.push(new THREE.Vector2(arr[i], arr[i + 1])) + } } + let d = children[ + objIdx.get( + linkedObj[1][nextIdx] + ) + ] + if (d == children[2]) { + console.log('pair found') + }; + findTouching(d) + } function findTouching(node) { + console.log(node.name,'yy') for (let t of node.userData.constraints) { + console.log(constraints.get(t)[2],node.name ) if (constraints.get(t)[0] != 'points_coincident') continue for (let c of constraints.get(t)[2]) { if (c == -1) continue; const d = children[objIdx.get(c)] if (d == node) continue; - if (d == children[4]) { + if (d == children[2]) { console.log('loop found') } else { - if (!visited.has(d)) { + // if (!visited.has(d)) { findPair(d) - } + // } }; } } } - findPair(children[4]) //??? need fixing + findPair(children[2]) //??? need fixing const shape = new THREE.Shape(v2s); // const extrudeSettings = { depth: Math.abs(depth), bevelEnabled: false }; @@ -74,29 +80,29 @@ export function extrude(sketch, depth) { const geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings); - // const material = new THREE.MeshLambertMaterial({ - // const material = new THREE.MeshPhongMaterial({ - // color: color.mesh, - // emissive: color.emissive, - // }); + const material = new THREE.MeshPhongMaterial({ + color: color.mesh, + emissive: color.emissive, + // wireframe:true + }); - // const mesh = new THREE.Mesh(geometry, material) + const mesh = new THREE.Mesh(geometry, material) // const material = new THREE.MeshPhongMaterial({ - // color: color.mesh, + // color: color.mesh, // }); - // const wireframe = new THREE.EdgesGeometry( geometry ); + + // const wireframe = new THREE.WireframeGeometry( geometry ); // const mesh = new THREE.LineSegments( wireframe ); - // // mesh.material.depthTest = false; - // // mesh.material.opacity = 0.25; - // // mesh.material.transparent = true; - // mesh.material.transparent = false; + // mesh.material.depthTest = true; + // mesh.material.opacity = 0.8; + // mesh.material.transparent = true; - const edges = new THREE.EdgesGeometry( geometry, 15 ); - edges.type = 'BufferGeometry' - edges.parameters = undefined + // const edges = new THREE.EdgesGeometry( geometry, 15 ); + // edges.type = 'BufferGeometry' + // edges.parameters = undefined - const mesh = new THREE.LineSegments( edges, new THREE.LineBasicMaterial( { color: 0x000000 } ) ); + // const mesh = new THREE.LineSegments( edges, new THREE.LineBasicMaterial( { color: 0x000000 } ) ); diff --git a/wasm/solver.c b/wasm/solver.c index 465e520..bab0f14 100644 --- a/wasm/solver.c +++ b/wasm/solver.c @@ -105,16 +105,16 @@ int solver(int nPts, float *p_ptr, int nConst, float *c_ptr, int nLinks, float * l_ptr += 4; } - int c_id = 1; + int c_pre = 1; sys.constraint[sys.constraints++] = Slvs_MakeConstraint( - c_id++, 2, + c_pre++, 2, SLVS_C_POINTS_COINCIDENT, 200, -1, 101, geomStartIdx, -1, -1); - - // it's 2 + nConst because c_id at this point is 2 - for (; c_id < 2 + nConst; c_id++, c_ptr += 6) + + + for (int c_id=c_pre; c_id < c_pre + nConst; c_id++, c_ptr += 6) { sys.constraint[sys.constraints++] = Slvs_MakeConstraint( c_id, g,