- 내보내기 엔진 신설 — 캐드 도면(JSON)을 ezdxf 로 DXF 작성(선·폴리선·글자·점·원·호, 도면층 유지), DWG 는 LibreDWG dxf2dwg 를 별도 프로세스로 호출
- POST /{project_id}/drawing-export 신설, 한글 파일명은 RFC 5987 방식으로 전달, 담지 못한 그림 수는 X-Aislo-Skipped 헤더로 통지
- CAD 출력 리본에 「DXF 내보내기」·「DWG 내보내기」 추가 — 캐드가 부모에 요청하면 부모가 서버 파일을 받아 내려받기
- 도각·내보내기 엔드포인트를 B07_DesignDetail_Router_Frame 으로 분리 (700줄 제한)
- 그림(Image)은 DXF 외부 참조 방식이라 제외하고 개수를 안내
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
209 lines
4.2 KiB
TypeScript
209 lines
4.2 KiB
TypeScript
/**
|
|
* 리본 구성 — AutoCAD 2024 `제도 및 주석` 작업공간의 탭·패널 배치를 따른다.
|
|
* 여기에는 데이터만 둔다. 버튼이 무엇을 하는지는 commands 레지스트리가 안다.
|
|
*/
|
|
|
|
export type RibbonWidget = 'properties' | 'layers' | 'textStyle';
|
|
|
|
export interface RibbonPanel {
|
|
label: string;
|
|
/** 크게 표시할 대표 명령 (AutoCAD의 큰 버튼) */
|
|
big?: string[];
|
|
/** 작은 버튼으로 나열할 명령 */
|
|
commands?: string[];
|
|
/** 패널 확장(▾)을 눌러야 나오는 명령 */
|
|
overflow?: string[];
|
|
/** 명령 버튼이 아닌 특수 위젯 패널 */
|
|
widget?: RibbonWidget;
|
|
}
|
|
|
|
export interface RibbonTab {
|
|
id: string;
|
|
label: string;
|
|
panels: RibbonPanel[];
|
|
}
|
|
|
|
export const RIBBON_TABS: RibbonTab[] = [
|
|
{
|
|
id: 'home',
|
|
label: '홈',
|
|
panels: [
|
|
{
|
|
label: '그리기',
|
|
big: ['LINE', 'PLINE'],
|
|
commands: ['CIRCLE', 'ARC', 'RECTANG', 'HATCH'],
|
|
overflow: [
|
|
'POLYGON',
|
|
'POINT',
|
|
'ELLIPSE',
|
|
'SPLINE',
|
|
'MLINE',
|
|
'MLSTYLE',
|
|
'XLINE',
|
|
'RAY',
|
|
'DONUT',
|
|
'DIVIDE',
|
|
'MEASURE',
|
|
'GRADIENT',
|
|
'BOUNDARY',
|
|
'REGION',
|
|
'WIPEOUT',
|
|
],
|
|
},
|
|
{
|
|
label: '수정',
|
|
big: ['MOVE', 'COPY'],
|
|
commands: ['ROTATE', 'MIRROR', 'TRIM', 'OFFSET'],
|
|
overflow: [
|
|
'SCALE',
|
|
'ERASE',
|
|
'ALIGN',
|
|
'ARRAY',
|
|
'EXTEND',
|
|
'STRETCH',
|
|
'FILLET',
|
|
'CHAMFER',
|
|
'BLEND',
|
|
'BREAK',
|
|
'BREAKATPOINT',
|
|
'JOIN',
|
|
'EXPLODE',
|
|
'LENGTHEN',
|
|
'PEDIT',
|
|
'HATCHEDIT',
|
|
'DRAWORDER',
|
|
'DRAWORDERBACK',
|
|
'MATCHPROP',
|
|
'OVERKILL',
|
|
'REVERSE',
|
|
'SETBYLAYER',
|
|
'ALIGNLEFT',
|
|
'ALIGNCENTERH',
|
|
'ALIGNRIGHT',
|
|
'ALIGNTOP',
|
|
'ALIGNCENTERV',
|
|
'ALIGNBOTTOM',
|
|
],
|
|
},
|
|
{
|
|
label: '도면층',
|
|
widget: 'layers',
|
|
overflow: [
|
|
'LAYCURSET',
|
|
'LAYOFF',
|
|
'LAYON',
|
|
'LAYFRZ',
|
|
'LAYTHW',
|
|
'LAYLCK',
|
|
'LAYULK',
|
|
'LAYISO',
|
|
'LAYUNISO',
|
|
'LAYERP',
|
|
'LAYERSTATE',
|
|
'LAYERSTATERESTORE',
|
|
'LAYMCH',
|
|
'LAYCUR',
|
|
'LAYMRG',
|
|
'LAYDEL',
|
|
'LAYWALK',
|
|
],
|
|
},
|
|
{
|
|
label: '특성',
|
|
widget: 'properties',
|
|
overflow: ['PROPERTIES', 'QUICKPROPERTIES', 'COLOR', 'LINETYPE', 'LWEIGHT', 'TRANSPARENCY'],
|
|
},
|
|
{ label: '그룹', commands: ['GROUP', 'UNGROUP'] },
|
|
{
|
|
label: '유틸리티',
|
|
big: ['SELECT'],
|
|
commands: ['DIST', 'AREA'],
|
|
overflow: [
|
|
'ID',
|
|
'LIST',
|
|
'QSELECT',
|
|
'SELECTSIMILAR',
|
|
'RADIUS',
|
|
'ANGLE',
|
|
'MEASUREGEOM',
|
|
'QUICKCALC',
|
|
'ISOLATEOBJECTS',
|
|
'HIDEOBJECTS',
|
|
'UNISOLATEOBJECTS',
|
|
],
|
|
},
|
|
{
|
|
label: '클립보드',
|
|
big: ['PASTECLIP'],
|
|
commands: ['COPYCLIP', 'CUTCLIP'],
|
|
overflow: ['COPYBASE', 'PASTEORIG', 'PASTEBLOCK'],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'insert',
|
|
label: '삽입',
|
|
panels: [
|
|
{ label: '블록', big: ['INSERT'], commands: ['BLOCK'] },
|
|
{ label: '참조', commands: ['IMAGEATTACH'] },
|
|
],
|
|
},
|
|
{
|
|
id: 'annotate',
|
|
label: '주석',
|
|
panels: [
|
|
{
|
|
label: '문자',
|
|
big: ['MTEXT'],
|
|
commands: ['TEXT', 'TEXTEDIT', 'FIND', 'STYLE'],
|
|
},
|
|
{ label: '문자 스타일', widget: 'textStyle' },
|
|
{
|
|
label: '치수',
|
|
big: ['DIMLINEAR', 'DIMALIGNED'],
|
|
commands: ['DIM', 'DIMANGULAR', 'DIMRADIUS', 'DIMDIAMETER', 'DIMCONTINUE', 'QDIM'],
|
|
overflow: [
|
|
'DIMARC',
|
|
'DIMORDINATE',
|
|
'DIMBASELINE',
|
|
'CENTERMARK',
|
|
'CENTERLINE',
|
|
'DIMSTYLE',
|
|
'DIMUPDATE',
|
|
'DIMSPACE',
|
|
],
|
|
},
|
|
{
|
|
label: '지시선',
|
|
big: ['MLEADER'],
|
|
commands: ['MLEADERSTYLE', 'MLEADERALIGN'],
|
|
},
|
|
{
|
|
label: '표',
|
|
commands: ['TABLE', 'TABLEEDIT'],
|
|
overflow: ['TABLESTYLE', 'TABLEROW', 'TABLECOL', 'TABLEMERGE', 'TABLEUNMERGE'],
|
|
},
|
|
{ label: '표식', commands: ['REVCLOUD', 'ANNOSCALE'] },
|
|
],
|
|
},
|
|
{
|
|
id: 'view',
|
|
label: '뷰',
|
|
panels: [{ label: '탐색', big: ['ZOOM'], commands: ['ZOOMIN', 'ZOOMOUT', 'PAN', 'REGEN'] }],
|
|
},
|
|
{
|
|
id: 'output',
|
|
label: '출력',
|
|
panels: [
|
|
{
|
|
label: '내보내기',
|
|
big: ['EXPORT'],
|
|
commands: ['EXPORTDXF', 'EXPORTDWG', 'EXPORTSVG', 'EXPORTPNG', 'QSAVE'],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
/** 제목표시줄의 빠른 실행 도구막대 */
|
|
export const QUICK_ACCESS_COMMANDS: string[] = ['QSAVE', 'EXPORT', 'UNDO', 'REDO'];
|