Files
Aislo/B07_DesignDetail/openwebcad/src/tools.ts
T
eomsangdonandClaude Opus 5 ea5ce92725 feat(B07): 표를 객체로 만들어 도면의 표가 진짜 표가 되게 한다
표가 DXF의 표로 나가야 한다(사용자 확정). 지금까지 도면의 표는 선과 문자 뭉치라
내보낼 때 고를 수 있는 길이 하나뿐이었다.

- TableEntity: 열별 폭·행별 높이·칸 문자·병합을 한 객체가 들고 있다. 격자선은 담지
  않고 병합 자리에서 선을 끊는 규칙을 표가 스스로 안다(helpers/table-geometry.ts).
  회전·대칭은 지원하지 않는다 — 표는 축에 붙어 있다.
- 명령: TABLE을 표 객체 생성으로 다시 쓰고 TABLEEDIT(칸 문자)·TABLEROW·TABLECOL·
  TABLEMERGE·TABLEUNMERGE를 더했다. EXPLODE는 표를 선과 문자로 흩는다.
- 그립: 좌측 상단으로 표를 옮기고, 열·행 경계로 폭·높이를 바꾼다.
- 백엔드: 유역 정보표와 횡단 수량 산출표를 표 객체로 낸다. 횡단표는 머리행이 폭
  8등분, 본문이 11열 가중치로 격자가 서로 달라 두 경계를 합친 18열로 만들고 병합으로
  원래 칸을 되살렸다 — 손으로 하던 가로선 끊기가 사라졌다.
- 수량 역추출: 값 Text의 결정적 id로 읽던 것을 칸에 실은 key로 읽도록 옮겼다. 이미
  저장된 도면을 위해 옛 방식을 폴백으로 남겼다.

토적도·종단표는 값이 칸이 아니라 측점 위치에 놓이는 성격이라 이관하지 않았다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-30 15:12:19 +09:00

128 lines
3.0 KiB
TypeScript

export enum Tool {
SELECT = 'SELECT',
LINE = 'LINE',
RECTANGLE = 'RECTANGLE',
CIRCLE = 'CIRCLE',
MOVE = 'MOVE',
COPY = 'COPY',
SCALE = 'SCALE',
ERASER = 'ERASER',
IMAGE_IMPORT = 'IMAGE_IMPORT',
INSERT_BLOCK = 'INSERT_BLOCK',
GRIP_EDIT = 'GRIP_EDIT',
ROTATE = 'ROTATE',
ALIGN_LEFT = 'ALIGN_LEFT',
ALIGN_RIGHT = 'ALIGN_RIGHT',
ALIGN_CENTER_HORIZONTAL = 'ALIGN_CENTER_HORIZONTAL',
ALIGN_TOP = 'ALIGN_TOP',
ALIGN_BOTTOM = 'ALIGN_BOTTOM',
ALIGN_CENTER_VERTICAL = 'ALIGN_CENTER_VERTICAL',
ARRAY = 'ARRAY',
PEDIT = 'PEDIT',
// 조사표 1절 — 그리기
PLINE = 'PLINE',
ARC = 'ARC',
POLYGON = 'POLYGON',
ELLIPSE = 'ELLIPSE',
SPLINE = 'SPLINE',
MLINE = 'MLINE',
MLSTYLE = 'MLSTYLE',
XLINE = 'XLINE',
RAY = 'RAY',
POINT = 'POINT',
DONUT = 'DONUT',
DIVIDE = 'DIVIDE',
MEASURE_LENGTH = 'MEASURE_LENGTH',
HATCH = 'HATCH',
GRADIENT = 'GRADIENT',
BOUNDARY = 'BOUNDARY',
REGION = 'REGION',
WIPEOUT = 'WIPEOUT',
// 조사표 2절 — 수정
MIRROR = 'MIRROR',
ALIGN = 'ALIGN',
OFFSET = 'OFFSET',
STRETCH = 'STRETCH',
LENGTHEN = 'LENGTHEN',
FILLET = 'FILLET',
CHAMFER = 'CHAMFER',
BLEND = 'BLEND',
BREAK = 'BREAK',
BREAK_AT_POINT = 'BREAK_AT_POINT',
EXTEND = 'EXTEND',
JOIN = 'JOIN',
EXPLODE = 'EXPLODE',
ERASE = 'ERASE',
MATCHPROP = 'MATCHPROP',
DRAWORDER_FRONT = 'DRAWORDER_FRONT',
DRAWORDER_BACK = 'DRAWORDER_BACK',
SETBYLAYER = 'SETBYLAYER',
REVERSE = 'REVERSE',
OVERKILL = 'OVERKILL',
HATCHEDIT = 'HATCHEDIT',
// 조사표 3절 — 도면층·특성·그룹·유틸리티
LAYER_CURRENT = 'LAYER_CURRENT',
LAYOFF = 'LAYOFF',
LAYFRZ = 'LAYFRZ',
LAYLCK = 'LAYLCK',
LAYULK = 'LAYULK',
LAYISO = 'LAYISO',
LAYERSTATE = 'LAYERSTATE',
LAYERSTATE_RESTORE = 'LAYERSTATE_RESTORE',
LAYMCH = 'LAYMCH',
LAYCUR = 'LAYCUR',
LAYMRG = 'LAYMRG',
LAYDEL = 'LAYDEL',
TRANSPARENCY = 'TRANSPARENCY',
GROUP = 'GROUP',
UNGROUP = 'UNGROUP',
DIST = 'DIST',
RADIUS_INQUIRY = 'RADIUS_INQUIRY',
ANGLE_INQUIRY = 'ANGLE_INQUIRY',
AREA = 'AREA',
ID_POINT = 'ID_POINT',
QUICKCALC = 'QUICKCALC',
MEASUREGEOM = 'MEASUREGEOM',
QSELECT = 'QSELECT',
SELECTSIMILAR = 'SELECTSIMILAR',
ISOLATEOBJECTS = 'ISOLATEOBJECTS',
HIDEOBJECTS = 'HIDEOBJECTS',
COPYBASE = 'COPYBASE',
PASTECLIP = 'PASTECLIP',
// 조사표 5절 — 주석
TEXT = 'TEXT',
MTEXT = 'MTEXT',
TEXTEDIT = 'TEXTEDIT',
FIND = 'FIND',
DIM = 'DIM',
DIMLINEAR = 'DIMLINEAR',
DIMALIGNED = 'DIMALIGNED',
DIMBASELINE = 'DIMBASELINE',
DIMCONTINUE = 'DIMCONTINUE',
QDIM = 'QDIM',
DIMRADIUS = 'DIMRADIUS',
DIMDIAMETER = 'DIMDIAMETER',
DIMANGULAR = 'DIMANGULAR',
DIMARC = 'DIMARC',
DIMORDINATE = 'DIMORDINATE',
CENTERMARK = 'CENTERMARK',
CENTERLINE = 'CENTERLINE',
DIMSPACE = 'DIMSPACE',
DIMSTYLE = 'DIMSTYLE',
MLEADER = 'MLEADER',
MLEADERSTYLE = 'MLEADERSTYLE',
MLEADERALIGN = 'MLEADERALIGN',
TABLE = 'TABLE',
TABLESTYLE = 'TABLESTYLE',
TABLEEDIT = 'TABLEEDIT',
TABLEROW = 'TABLEROW',
TABLECOL = 'TABLECOL',
TABLEMERGE = 'TABLEMERGE',
TABLEUNMERGE = 'TABLEUNMERGE',
REVCLOUD = 'REVCLOUD',
ANNOSCALE = 'ANNOSCALE',
COLOR = 'COLOR',
LINETYPE = 'LINETYPE',
LWEIGHT = 'LWEIGHT',
}