feat(CAD): 337-4a 다-1 고치기 7 — OFFSET · FILLET · CHAMFER · TRIM · EXTEND · BREAK · JOIN 오토캐드 물음 차례 · 옵션 · 기본값 기억 · 빈 Enter · Esc · 끝난 뒤

- OFFSET 새 파일(offset-tool.ts) — 거리 <통과점> · 통과점(T) · 지우기(E) 예/아니오 · 객체 → 면의 점 되풀이 · 다중(M) <다음 객체> · 명령 취소(U) · 기억 OFFSETDIST · OFFSETERASE
- FILLET · CHAMFER 한 꼴 — 객체 먼저 · 반지름(R) · 거리(D) 둘(둘째 기본 = 첫째) · 자르기(T) 모드 · 다중(M) · 명령 취소(U) · Shift = 구석 · 기억 FILLETRAD · CHAMFERA/B · TRIMMODE
- TRIM · EXTEND 빠른 모드 한 꼴 — 되풀이 · Shift = 반대 일 · 집기 반경 밖 무시 · 지우기(R) · 숨은 U · 사각형 변 원래 층 · 꼴(N9) · 자른 선 꼴 유지
- BREAK — 누른 점 = 첫 끊기점 · 첫 번째 점(F) · @0,0 = 같은 점 · JOIN 물음 글
- 시험 resources/tester/cad/modify-acad.test.ts 13

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013QyNXY2TUKXCFMwAca2APG
This commit is contained in:
2026-10-16 00:14:29 +09:00
co-authored by Claude Opus 5.5
parent 6e346cfb5e
commit 00a379595b
7 changed files with 1216 additions and 141 deletions
@@ -1,35 +1,27 @@
/** 연장·결합·분해·지우기 (조사표 2절) */
import { toast } from 'react-toastify';
import { SELECT_OBJECTS } from '../../commands/prompt';
import type { Entity } from '../../entities/Entity';
import { addEntities, deleteEntities, setSelectedEntityIds } from '../../state';
import { Tool } from '../../tools';
import { createSequenceTool } from '../factories/sequence-tool';
import { explodeEntity, extendLineToBoundary, joinEntities } from './modify.helpers';
import { explodeEntity, joinEntities } from './modify.helpers';
export const extendToolStateMachine = createSequenceTool({
tool: Tool.EXTEND,
helpers: false,
steps: [
{ kind: 'entity', instructions: '경계로 쓸 객체를 선택하십시오.' },
{ kind: 'entity', instructions: '연장할 선을 선택하십시오.' },
],
commit: (input) => {
const boundary = input.entity(0);
const target = input.entity(1);
const extended = extendLineToBoundary(target, boundary);
if (!extended) {
toast.warn('경계와 만나도록 연장할 수 없습니다.');
return;
}
deleteEntities([target], false);
addEntities([extended], true);
},
});
/** EXTEND 빠른 모드는 TRIM 과 한 머신 꼴(eraser-tool.ts) */
export { extendToolStateMachine } from '../eraser-tool';
export const joinToolStateMachine = createSequenceTool({
tool: Tool.JOIN,
helpers: false,
steps: [{ kind: 'selection', instructions: '결합할 객체를 선택한 뒤 ENTER.' }],
steps: [
{
kind: 'selection',
prompt: {
text: '한 번에 결합할 원본 객체 또는 여러 객체 선택',
options: SELECT_OBJECTS.options,
},
},
],
commit: (input) => {
const entities = input.entities(0);
const joined = joinEntities(entities);