feat(CAD): 337-5 라 옮기기 무리 1 단계 — MOVE · ROTATE · SCALE 오토캐드 물음 차례

- MOVE: 기준점 [변위(D)] <변위> · 두 번째 점 <첫 번째 점을 변위로 사용> · 변위 기억(MOVE.DISP) · 한 번 뒤 끝 · Esc 제자리 끝
- ROTATE · SCALE: 공용 틀(pivot-tool) — 누름 한 번 = 값 · 복사(C) · 참조(R) → 새 값 [점(P)] · 각 · 비율 기억 · 0 이하 축척 거절
- 공용 고르기 상태(transform.helpers) — PICKFIRST · 빈 고르기 Enter = 끝 · OPTION.* 넘김 · 원본은 확정까지 도면에 그대로(N1 · N2)
- 시험 transform-acad(15) · scale-tool 단위 시험 새 상태 이름

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TteK8mfYZetk5P3bEZkyVZ
This commit is contained in:
2026-10-16 00:17:16 +09:00
co-authored by Claude Opus 5.5
parent b82ea6edcf
commit d35bdfa69d
9 changed files with 1020 additions and 1019 deletions
@@ -27,7 +27,7 @@ function startAtBasePoint() {
resetUndoBaseline();
setSelectedEntityIds([a.id]);
const actor = createActor(scaleToolStateMachine).start();
expect(actor.getSnapshot().value).toBe(ScaleState.WAITING_FOR_BASE_VECTOR_START_POINT);
expect(actor.getSnapshot().value).toBe(ScaleState.WAITING_FOR_BASE_POINT);
actor.send({
type: ActorEvent.MOUSE_CLICK,
worldMouseLocation: new Point(2, 0),
@@ -35,7 +35,7 @@ function startAtBasePoint() {
holdingCtrl: false,
holdingShift: false,
});
expect(actor.getSnapshot().value).toBe(ScaleState.WAITING_FOR_BASE_VECTOR_END_POINT);
expect(actor.getSnapshot().value).toBe(ScaleState.WAITING_FOR_VALUE);
return { actor, a, b };
}
@@ -53,8 +53,8 @@ describe('축척 — 기준점 + 숫자 배율 (226-1)', () => {
expect(getEntities()[0].id).toBe(a.id);
expect(getEntities()[1]).toBe(b);
expect(ends(1)).toEqual([0, 5, 4, 5]);
// 끝나면 선택 풀고 다음 고르기로
expect(actor.getSnapshot().value).toBe(ScaleState.WAITING_FOR_SELECTION);
// 한 번 뒤 끝(오토캐드) — 쉬는 상태로
expect(actor.getSnapshot().status).toBe('done');
});
it('배율 0.5 = 절반', () => {
@@ -84,6 +84,6 @@ describe('축척 — 기준점 + 숫자 배율 (226-1)', () => {
const { actor } = startAtBasePoint();
typeNumber(actor, 0);
expect(ends(0)).toEqual([0, 0, 10, 0]);
expect(actor.getSnapshot().value).toBe(ScaleState.WAITING_FOR_BASE_VECTOR_END_POINT);
expect(actor.getSnapshot().value).toBe(ScaleState.WAITING_FOR_VALUE);
});
});