- 고르기: 누름 = 더함 · Shift = 뺌 · Ctrl = 넣고 빼기 · 상자 = 앞 고름 ∪ 상자 · Shift 상자 = 뺌(H4 · H5) · 명령 안 고르기 단계도 누를 때 첫 점 · 스침 강조(ic/selecting.ts) - 그립: 쉴 때만 집음(N7) · 누르고 떼면 대기 → 다음 누름에 놓음 · 끌어 놓기(H3) · 거리 숫자(N8) · 확정 · 읽기 전용 도면은 그립 · Delete 막음(H2) - 직교: F8 = 기준점에서 가로 · 세로 강제 · Shift 누른 동안 뒤집음 · 객체 스냅 점 · 좌표 · 각도 잠금은 안 덮음 · 클릭 사건 snapped 채움(ic/ortho.ts · H8) · 가이드는 F3 와 뗌 · 가이드 잡는 거리 = 화면 픽셀(H9) - 휠: 기본 밂(앞으로 굴리면 확대 · 오토캐드 · 모든 화면 · ☰ 설정 뒤집기 그대로) · 가운데 단추 두 번 = 범위 줌 · ZOOM · ⛶ 앞 화면 기억(ic/zoom-prompt.ts) - 시험: mouse-acad 새로 · 휠 방향 시험 손질(input-wheel · input-prefs-cad · input_prefs · app_settings · 164 · 220_1 · 221_1 · 244_8 기대값 뒤집음 · 266 pull 박음) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Se7ytqbohmBQnfYpwYFnYf
30 lines
1.3 KiB
TypeScript
30 lines
1.3 KiB
TypeScript
import {
|
|
PINCH_ZOOM_EXPONENT,
|
|
WHEEL_LINE_PX,
|
|
WHEEL_PAGE_PX,
|
|
WHEEL_ZOOM_EXPONENT,
|
|
} from '../App.consts.ts';
|
|
import { wheelEventIn } from '../../../../A00_Common/input_prefs';
|
|
|
|
/**
|
|
* 휠 한 번 → 화면 확대(`zoomScreen` 인자). 휠은 늘 줌 · 커서 자리 고정(153-3) — 마우스 · 트랙패드를
|
|
* 가르지 않는다(옛 판정은 확대율 ≠ 100 % 등에서 휠을 팬으로 오판). 팬 = 가운데 단추 끌기.
|
|
* null = 델타 0 이라 안 움직임.
|
|
*/
|
|
export function wheelZoom(
|
|
evt: Pick<WheelEvent, 'deltaMode' | 'deltaY' | 'ctrlKey'>
|
|
): { delta: number; exponent: number } | null {
|
|
// deltaY 단위를 픽셀로 맞춘다 — 브라우저에 따라 줄(1)·쪽(2) 단위로 오기도 한다.
|
|
const unitPx = evt.deltaMode === 1 ? WHEEL_LINE_PX : evt.deltaMode === 2 ? WHEEL_PAGE_PX : 1;
|
|
const deltaY = evt.deltaY * unitPx;
|
|
if (deltaY === 0) return null;
|
|
// 방향 = ☰ [설정] 휠 확대 방향(기본 밂 = 앞으로 굴리면 확대 · 오토캐드 · 모든 화면 일체) ·
|
|
// 트랙패드 핀치는 늘 벌리면 확대. zoomScreen 은 음수 = 확대.
|
|
// 핀치(ctrl+휠)는 델타가 잘아 지수만 크게.
|
|
const size = Math.abs(deltaY);
|
|
return {
|
|
delta: wheelEventIn({ ctrlKey: evt.ctrlKey, deltaY }) ? -size : size,
|
|
exponent: evt.ctrlKey ? PINCH_ZOOM_EXPONENT : WHEEL_ZOOM_EXPONENT,
|
|
};
|
|
}
|