meta debug checkpoint. fix touch dolly

This commit is contained in:
Stewart Allen 2020-03-21 14:55:51 -04:00
commit 5a9690bb47
3 changed files with 62 additions and 22 deletions

View file

@ -9,6 +9,15 @@
* array prototype helpers * array prototype helpers
******************************************************************* */ ******************************************************************* */
AP.equals = function(arr) {
if (!arr) return false;
if (arr.length !== this.length) return false;
for (let i=0; i<this.length; i++) {
if (arr[i] !== this[i]) return false;
}
return true;
};
AP.peek = function() { AP.peek = function() {
return this[this.length-1]; return this[this.length-1];
}; };

View file

@ -1618,7 +1618,7 @@ console.clear();
if (!debugadded) SPACE.platform.add(debugadded = debuggroup) if (!debugadded) SPACE.platform.add(debugadded = debuggroup)
debuggroup.children.slice().forEach(c => debuggroup.remove(c)); debuggroup.children.slice().forEach(c => debuggroup.remove(c));
function walk(cube_face, group, xseen) { function walk(cube_face, group) {
let cube = cube_face.cube; let cube = cube_face.cube;
let face_key = `${cube.key}-${cube_face.key}`; let face_key = `${cube.key}-${cube_face.key}`;
// console.log("walk", face_key, seen[face_key] ? 'seen' : '....', group ? group.id : 'new'); // console.log("walk", face_key, seen[face_key] ? 'seen' : '....', group ? group.id : 'new');
@ -1638,13 +1638,8 @@ debuggroup.children.slice().forEach(c => debuggroup.remove(c));
if (newgroup) { if (newgroup) {
group = []; group = [];
group.id = nid++; group.id = nid++;
xseen = {}
} }
group.push({pos: cube.pos, key: cube_face.key, sides }); group.push({pos: cube.pos, key: cube_face.key, sides });
// if (newgroup) {
// console.log(`----------( ${group.id} )----------`,face_key);
// console.log(group);
// }
// walk four directions perpendicular to face // walk four directions perpendicular to face
let skip = [cube_face.key, cube_face.key.reverse()]; let skip = [cube_face.key, cube_face.key.reverse()];
FACES.forEach(face_name => { FACES.forEach(face_name => {
@ -1654,7 +1649,7 @@ debuggroup.children.slice().forEach(c => debuggroup.remove(c));
let facedir = cube.faces[face_name]; let facedir = cube.faces[face_name];
let adjacent = cube.adjacentCube(facedir); let adjacent = cube.adjacentCube(facedir);
if (adjacent) { if (adjacent) {
if (walk(adjacent.faces[cube_face.key], group, seen)) { if (walk(adjacent.faces[cube_face.key], group)) {
// console.log(" ++ ", face_key, face_name); // console.log(" ++ ", face_key, face_name);
sides.push(face_name); sides.push(face_name);
} }
@ -1711,19 +1706,16 @@ debuggroup.children.slice().forEach(c => debuggroup.remove(c));
points.push(op1); points.push(op1);
points.push(op2); points.push(op2);
let mat = new THREE.LineBasicMaterial( { color: 0x0000ff } ); // let mat = new THREE.LineBasicMaterial( { color: 0x0000ff } );
let geo = new THREE.BufferGeometry().setFromPoints([ // let geo = new THREE.BufferGeometry().setFromPoints([
new THREE.Vector3(op1.x,op1.y,op1.z), // new THREE.Vector3(op1.x,op1.y,op1.z),
new THREE.Vector3(op2.x,op2.y,op2.z) // new THREE.Vector3(op2.x,op2.y,op2.z)
]); // ]);
let lnz = new THREE.Line(geo, mat); // let lnz = new THREE.Line(geo, mat);
debuggroup.add(lnz) // debuggroup.add(lnz)
SPACE.refresh(); // SPACE.refresh();
}); });
}); });
// console.log("-----------------------")
// console.log(group);
// console.table(points);
} }
return false; return false;
} }
@ -1740,7 +1732,7 @@ console.log({GROUPS: faceGroups.length})
faceGroups.forEach((el,gi) => { faceGroups.forEach((el,gi) => {
let {map, points} = el; let {map, points} = el;
let seen = {}; let seen = {};
console.log("<<<",points.length); console.log("<<< lines in",points.length/2);
// newstart: for (let ip=0; ip<points.length; ip++) { // newstart: for (let ip=0; ip<points.length; ip++) {
let start = points[0]; let start = points[0];
@ -1748,6 +1740,7 @@ console.log("<<<",points.length);
// console.log({gi,start:ip}) // console.log({gi,start:ip})
let point = start; let point = start;
let out = [ point ]; let out = [ point ];
let delta = [];
seen[point.k] = point; seen[point.k] = point;
outer: for (;;) { outer: for (;;) {
@ -1755,14 +1748,52 @@ console.log("<<<",points.length);
for (let i=0; i<peers.length; i++) { for (let i=0; i<peers.length; i++) {
let peer = peers[i]; let peer = peers[i];
if (!seen[peer.k]) { if (!seen[peer.k]) {
let new_delta = [
peer.x - point.x,
peer.y - point.y,
peer.z - point.z
];
if (new_delta.equals(delta)) {
out.pop();
}
out.push(point = peer); out.push(point = peer);
delta = new_delta;
seen[point.k] = point; seen[point.k] = point;
continue outer; continue outer;
} }
} }
break; break;
} }
console.log(">>>",out) if ([
point.x - start.x,
point.y - start.y,
point.z - start.z
].equals([
start.x - points[1].x,
start.y - points[1].y,
start.z - points[1].z
])) {
out.shift();
}
if (delta.equals([
start.x - point.x,
start.y - point.y,
start.z - point.z
])) {
out.pop();
}
console.log(">>> points out",out.length)
// console.log(out)
let m = 1.05 + (gi * 0.05);
let mat = new THREE.LineBasicMaterial( { color: 0xff0000 } );
let geo = new THREE.BufferGeometry().setFromPoints(
out.map(p => new THREE.Vector3(p.x*m,p.y*m,p.z*m))
);
let lnz = new THREE.Line(geo, mat);
debuggroup.add(lnz)
SPACE.refresh();
// } // }
}); });

View file

@ -523,12 +523,12 @@ MOTO.CTRL = function (object, domElement, notify, slider) {
case 2: // two-fingered touch: dolly case 2: // two-fingered touch: dolly
if (scope.noZoom === true) return; if (scope.noZoom === true) return;
if (state !== STATE.TOUCH_DOLLY) return; if (state !== STATE.TOUCH_DOLLY) return;
console.log(event)
let dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; let dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
let dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; let dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
let distance = Math.sqrt(dx * dx + dy * dy); let distance = Math.sqrt(dx * dx + dy * dy);
if (reverseZoom) distance = -distance; if (scope.reverseZoom) distance = -distance;
dollyEnd.set(0, distance); dollyEnd.set(0, distance);
dollyDelta.subVectors(dollyEnd, dollyStart); dollyDelta.subVectors(dollyEnd, dollyStart);