Changes
Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
This commit is contained in:
@@ -49,12 +49,21 @@ export function XRControllerMeasure() {
|
|||||||
const dwellStart = useRef(0);
|
const dwellStart = useRef(0);
|
||||||
const dwellFired = useRef(false);
|
const dwellFired = useRef(false);
|
||||||
|
|
||||||
|
// Throttling: raycast + snap analysis are heavy on dense IFC models and
|
||||||
|
// running them every frame at 72fps can stall the Quest right after
|
||||||
|
// toggling "Medir" from the Ferramentas tab. We cap heavy work to ~24Hz.
|
||||||
|
// Trigger/A/B/L-trigger polling continues every frame for responsiveness.
|
||||||
|
const heavyFrame = useRef(0);
|
||||||
|
const cachedSnappedPoint = useRef<THREE.Vector3 | null>(null);
|
||||||
|
const cachedSnapKind = useRef<'vertex' | 'edge' | 'surface' | 'hole'>('surface');
|
||||||
|
|
||||||
useFrame((_state, _dt, frame: XRFrame | undefined) => {
|
useFrame((_state, _dt, frame: XRFrame | undefined) => {
|
||||||
const measureMode = useModelStore.getState().measureMode;
|
const measureMode = useModelStore.getState().measureMode;
|
||||||
const selectionMode = useModelStore.getState().selectionMode;
|
const selectionMode = useModelStore.getState().selectionMode;
|
||||||
if (laserRef.current) laserRef.current.visible = false;
|
if (laserRef.current) laserRef.current.visible = false;
|
||||||
if (tipRef.current) tipRef.current.visible = false;
|
if (tipRef.current) tipRef.current.visible = false;
|
||||||
if ((!measureMode && !selectionMode) || !frame) return;
|
if ((!measureMode && !selectionMode) || !frame) return;
|
||||||
|
const doHeavy = (heavyFrame.current++ % 3) === 0;
|
||||||
|
|
||||||
const session = frame.session;
|
const session = frame.session;
|
||||||
const refSpace = gl.xr.getReferenceSpace();
|
const refSpace = gl.xr.getReferenceSpace();
|
||||||
|
|||||||
Reference in New Issue
Block a user