/** Copyright Stewart Allen -- All Rights Reserved */ import { api } from './api.js'; import { THREE } from '../../ext/three.js'; import { space } from '../../moto/space.js'; const { Vector3, Quaternion } = THREE; const XAXIS = new THREE.Vector3(1,0,0); const ZAXIS = new THREE.Vector3(0,0,1); // circle let pgeo = new THREE.CircleGeometry(8, 30); let pmat = new THREE.MeshBasicMaterial({color: 0xddeeff, opacity: 0.6, transparent: true}); let pmesh = new THREE.Mesh(pgeo, pmat); // circle outline let pi = pgeo.index.array; let pp = pgeo.attributes.position.array; let np = []; for (let i=0; i { if (!enabled) { return; } cleanup(); let { int, ints, event, point, type } = ev; if (type === 'widget') { lastface = int.face; let obj = lastobj = int.object; let norm = int.face.normal; let widget = obj.widget; let track = widget.track; let opos = track.pos; obj.add(pmesh); pmesh.position.x = point.x - opos.x + norm.x * 0.1; if (track.indexed) { let rad = track.indexRad; let py = point.y * 1.001; let pz = point.z * 1.001; let v = new THREE.Vector3(point.x, py, pz).applyAxisAngle(XAXIS, rad); pmesh.position.y = -v.z; pmesh.position.z = v.y; } else { const zcomp = api.mode.get() === 'CAM' ? track.tzoff : 0; pmesh.position.y = -point.z - opos.y + norm.y * 0.1; pmesh.position.z = point.y + zcomp + norm.z * 0.1; } let q = new Quaternion().setFromUnitVectors(ZAXIS, new Vector3(norm.x,norm.y,norm.z) ); pmesh.setRotationFromQuaternion(q); scale(); } }); api.event.on('mouse.hover.up', (ev) => { if (!enabled) { return; } let { object } = ev; if (!object) { return; } onDone(ev); endIt(); }); export { cleanup, endIt, onDone, onFaceUpSelect, onLayFlatSelect, scale, startFaceUp, startFocus, startIt, startLeftAlign, startLayFlat, };