fix dimension tag bugs

master
howard 2021-04-16 01:12:10 -07:00
parent a0f0566704
commit 930df2e288
5 changed files with 61 additions and 59 deletions

BIN
dist/solver.wasm vendored

Binary file not shown.

View File

@ -16,13 +16,7 @@ import { AxesHelper } from './axes'
import CSG from "../lib/three-csg" 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.loader = new THREE.ObjectLoader();
window.id = 0 window.id = 0

View File

@ -313,9 +313,10 @@ class Sketch {
obj.geometry.dispose() obj.geometry.dispose()
obj.material.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) this.deleteConstraints(c_id)
} }
obj.userData.constraints = []
} }
this.obj3d.children.splice(i, link.length) this.obj3d.children.splice(i, link.length)
@ -336,10 +337,11 @@ class Sketch {
} }
this.constraints.delete(c_id) this.constraints.delete(c_id)
for (let i = 0; i < this.obj3d.children[1].children.length; i++) { for (let i = 0; i < this.dimGroup.children.length; i++) {
if (this.obj3d.children[1].children[i].name == c_id) { if (this.dimGroup.children[i].name == c_id) {
this.obj3d.children[1].children.splice(i, i + 2).forEach( this.dimGroup.children.splice(i, i + 2).forEach(
e => { e => {
if (e.label) e.label.remove()
e.geometry.dispose() e.geometry.dispose()
e.material.dispose() e.material.dispose()
} }

View File

@ -1,7 +1,6 @@
import * as THREE from '../node_modules/three/src/Three'; import * as THREE from '../node_modules/three/src/Three';
import { color } from './shared' import { color } from './shared'
export function extrude(sketch, depth) { export function extrude(sketch, depth) {
console.log(sketch, 'here')
let constraints = sketch.constraints; let constraints = sketch.constraints;
let linkedObjs = sketch.linkedObjs; let linkedObjs = sketch.linkedObjs;
@ -9,63 +8,70 @@ export function extrude(sketch, depth) {
let objIdx = sketch.objIdx; let objIdx = sketch.objIdx;
let visited = new Set() let visited = new Set()
let v2s = [] let v2s = []
let offSetPts = []
function findPair(node) { function findPair(node) {
console.log(node.name,'xx')
if (node.userData.construction) return; if (node.userData.construction) return;
visited.add(node) visited.add(node)
let linkedObj = linkedObjs.get(node.userData.l_id) let linkedObj = linkedObjs.get(node.userData.l_id)
let arr; let arr;
let lineNode
if (linkedObj[0] == 'line') { if (linkedObj[0] == 'line') {
arr = children[objIdx.get(linkedObj[1][2])].geometry.attributes.position.array lineNode = linkedObj[1][2]
} else if (linkedObj[0] == 'arc') { } else if (linkedObj[0] == 'arc') {
arr = children[objIdx.get(linkedObj[1][3])].geometry.attributes.position.array lineNode = linkedObj[1][3]
} }
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) { 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]))
} }
} else {
nextIdx = 0
for (let i = arr.length - 3; i >= 0; i -= 3) {
v2s.push(new THREE.Vector2(arr[i], arr[i + 1]))
}
}
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[ let d = children[
objIdx.get( objIdx.get(
linkedObj[1][i] linkedObj[1][nextIdx]
) )
] ]
if (d == -1 || d == node) continue; if (d == children[2]) {
if (d == children[4]) {
console.log('pair found') console.log('pair found')
}; };
findTouching(d) findTouching(d)
}
} }
function findTouching(node) { function findTouching(node) {
console.log(node.name,'yy')
for (let t of node.userData.constraints) { for (let t of node.userData.constraints) {
console.log(constraints.get(t)[2],node.name )
if (constraints.get(t)[0] != 'points_coincident') continue if (constraints.get(t)[0] != 'points_coincident') continue
for (let c of constraints.get(t)[2]) { for (let c of constraints.get(t)[2]) {
if (c == -1) continue; if (c == -1) continue;
const d = children[objIdx.get(c)] const d = children[objIdx.get(c)]
if (d == node) continue; if (d == node) continue;
if (d == children[4]) { if (d == children[2]) {
console.log('loop found') console.log('loop found')
} else { } else {
if (!visited.has(d)) { // if (!visited.has(d)) {
findPair(d) findPair(d)
} // }
}; };
} }
} }
} }
findPair(children[4]) //??? need fixing findPair(children[2]) //??? need fixing
const shape = new THREE.Shape(v2s); const shape = new THREE.Shape(v2s);
// const extrudeSettings = { depth: Math.abs(depth), bevelEnabled: false }; // 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 geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);
// const material = new THREE.MeshLambertMaterial({ const material = new THREE.MeshPhongMaterial({
// const material = new THREE.MeshPhongMaterial({ color: color.mesh,
// color: color.mesh, emissive: color.emissive,
// emissive: color.emissive, // wireframe:true
// }); });
// const mesh = new THREE.Mesh(geometry, material) const mesh = new THREE.Mesh(geometry, material)
// const material = new THREE.MeshPhongMaterial({ // 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 ); // const mesh = new THREE.LineSegments( wireframe );
// // mesh.material.depthTest = false; // mesh.material.depthTest = true;
// // mesh.material.opacity = 0.25; // mesh.material.opacity = 0.8;
// // mesh.material.transparent = true; // mesh.material.transparent = true;
// mesh.material.transparent = false;
const edges = new THREE.EdgesGeometry( geometry, 15 ); // const edges = new THREE.EdgesGeometry( geometry, 15 );
edges.type = 'BufferGeometry' // edges.type = 'BufferGeometry'
edges.parameters = undefined // 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 } ) );

View File

@ -105,16 +105,16 @@ int solver(int nPts, float *p_ptr, int nConst, float *c_ptr, int nLinks, float *
l_ptr += 4; l_ptr += 4;
} }
int c_id = 1; int c_pre = 1;
sys.constraint[sys.constraints++] = Slvs_MakeConstraint( sys.constraint[sys.constraints++] = Slvs_MakeConstraint(
c_id++, 2, c_pre++, 2,
SLVS_C_POINTS_COINCIDENT, SLVS_C_POINTS_COINCIDENT,
200, 200,
-1, -1,
101, geomStartIdx, -1, -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( sys.constraint[sys.constraints++] = Slvs_MakeConstraint(
c_id, g, c_id, g,